jsTreeR icon indicating copy to clipboard operation
jsTreeR copied to clipboard

Reordering node under root

Open Giatomo opened this issue 2 years ago • 1 comments

I got some issues while moving nodes right under the root node. Mostly the concat function not working here (on jstreer.js at $el.on("move_node.jstree", function(e, data)) :

var oldPath = oldInstance
              .get_path(data.old_parent)
              .concat(nodeText);

Exemple tree :

# (root node)
- A (child node)
- B
- C

I figured out a solution that would improve the consistancy of the jsTreeMoved event of the "from" and the "to" values while also retrieve the positions of the nodes (which is important in my use case but might also be helpful to other users) : on $el.on("move_node.jstree", function(e, data) :

Shiny.setInputValue("jsTreeMoved:jsTreeR.copied", {
              from: { instance: oldInstanceId, path: oldPath },
              to: { instance: newInstanceId, path: newPath }
            }, {priority: "event"});

can be replaced by either :

Shiny.setInputValue("jsTreeMoved:jsTreeR.copied",{
              from: {
                instance: oldInstanceId,
                parent: data.old_parent,
                path: oldInstance.get_path(node),
                position: data.old_position},
              to: { 
                instance: newInstanceId,
                parent: data.parent,
                path: newInstance.get_path(node),
                position: data.position}
            }, {priority: "event"});

or :

Shiny.setInputValue("jsTreeMoved:jsTreeR.copied"{
              from: {
                instance: oldInstanceId,
                path: [data.old_parent].concat(oldInstance.get_path(node)),
                position: data.old_position},
              to: { 
                instance: newInstanceId,
                path: [data.parent].concat(newInstance.get_path(node)),
                position: data.position}
            }, {priority: "event"});

Thank for looking into this issue ! Best regards

Giatomo avatar Apr 08 '24 13:04 Giatomo

Hello,

I vaguely remember I already encountered a similar issue. The code with .concat does not work because the path is not an array here, it is null. Right?

Are you sure that [data.parent].concat will work in all situations? Anyway I'll have to check. These Shiny values are used in the "tree navigator" provided by the package, I'll have to check that your proposal does not break it.

stla avatar Apr 09 '24 01:04 stla