I am trying out the shinyTree package to see if it works for my hierarchy tree needs, per post
CodePudding user response:
Here is the way with jsTreeR. I also prevented some moves, a move is allowed only if the target is the "Drag here" node.
library(jsTreeR)
nodes <- list(
list(
text = "Menu",
state = list(opened = TRUE),
children = list(
list(
text = "A",
type = "moveable",
state = list(disabled = TRUE)
),
list(
text = "B",
type = "moveable",
state = list(disabled = TRUE)
),
list(
text = "C",
type = "moveable",
state = list(disabled = TRUE)
),
list(
text = "D",
type = "moveable",
state = list(disabled = TRUE)
)
)
),
list(
text = "Drag here:",
type = "target",
state = list(opened = TRUE)
)
)
checkCallback <- JS(
"function(operation, node, parent, position, more) {",
" if(operation === 'copy_node') {",
" if(parent.id === '#' || parent.type !== 'target') {",
" return false;", # prevent moving an item above or below the root
" }", # and moving inside an item except a 'target' item
" }",
" return true;", # allow everything else
"}"
)
dnd <- list(
always_copy = TRUE,
is_draggable = JS(
"function(node) {",
" return node[0].type === 'moveable';",
"}"
)
)
jstree(
nodes, dragAndDrop = TRUE, dnd = dnd, checkCallback = checkCallback,
types = list(moveable = list(), target = list())
)