primevue 4.4.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordioncontent/AccordionContent.vue +5 -3
- package/accordioncontent/index.d.ts +4 -0
- package/accordioncontent/index.mjs +4 -2
- package/accordioncontent/index.mjs.map +1 -1
- package/accordioncontent/style/index.mjs +1 -0
- package/accordioncontent/style/index.mjs.map +1 -1
- package/autocomplete/AutoComplete.vue +2 -2
- package/autocomplete/index.mjs +2 -2
- package/autocomplete/index.mjs.map +1 -1
- package/cascadeselect/CascadeSelect.vue +2 -2
- package/cascadeselect/index.mjs +2 -2
- package/cascadeselect/index.mjs.map +1 -1
- package/colorpicker/ColorPicker.vue +1 -1
- package/colorpicker/index.mjs +1 -1
- package/colorpicker/index.mjs.map +1 -1
- package/confirmpopup/ConfirmPopup.vue +1 -1
- package/confirmpopup/index.mjs +1 -1
- package/confirmpopup/index.mjs.map +1 -1
- package/contextmenu/ContextMenu.vue +1 -1
- package/contextmenu/index.mjs +1 -1
- package/contextmenu/index.mjs.map +1 -1
- package/datatable/ColumnFilter.vue +2 -2
- package/datatable/index.mjs +2 -2
- package/datatable/index.mjs.map +1 -1
- package/datepicker/DatePicker.vue +28 -26
- package/datepicker/index.d.ts +19 -3
- package/datepicker/index.mjs +47 -38
- package/datepicker/index.mjs.map +1 -1
- package/drawer/Drawer.vue +1 -1
- package/drawer/index.mjs +3 -3
- package/drawer/index.mjs.map +1 -1
- package/fieldset/Fieldset.vue +5 -3
- package/fieldset/index.d.ts +4 -0
- package/fieldset/index.mjs +4 -2
- package/fieldset/index.mjs.map +1 -1
- package/fieldset/style/index.mjs +1 -0
- package/fieldset/style/index.mjs.map +1 -1
- package/menu/Menu.vue +3 -3
- package/menu/index.mjs +2 -2
- package/menu/index.mjs.map +1 -1
- package/message/Message.vue +17 -14
- package/message/index.d.ts +4 -0
- package/message/index.mjs +7 -4
- package/message/index.mjs.map +1 -1
- package/message/style/index.mjs +1 -0
- package/message/style/index.mjs.map +1 -1
- package/multiselect/MultiSelect.vue +2 -2
- package/multiselect/index.mjs +2 -2
- package/multiselect/index.mjs.map +1 -1
- package/package.json +6 -6
- package/panel/Panel.vue +10 -18
- package/panel/index.d.ts +4 -0
- package/panel/index.mjs +4 -2
- package/panel/index.mjs.map +1 -1
- package/panel/style/index.mjs +1 -0
- package/panel/style/index.mjs.map +1 -1
- package/panelmenu/PanelMenu.vue +14 -12
- package/panelmenu/PanelMenuSub.vue +19 -17
- package/panelmenu/index.mjs +14 -6
- package/panelmenu/index.mjs.map +1 -1
- package/panelmenu/style/index.mjs +1 -0
- package/panelmenu/style/index.mjs.map +1 -1
- package/password/Password.vue +3 -2
- package/password/index.mjs +4 -3
- package/password/index.mjs.map +1 -1
- package/popover/Popover.vue +1 -1
- package/popover/index.mjs +1 -1
- package/popover/index.mjs.map +1 -1
- package/select/Select.vue +2 -2
- package/select/index.mjs +2 -2
- package/select/index.mjs.map +1 -1
- package/speeddial/SpeedDial.vue +1 -1
- package/speeddial/index.mjs +1 -1
- package/speeddial/index.mjs.map +1 -1
- package/splitbutton/SplitButton.vue +1 -1
- package/splitbutton/index.mjs +1 -1
- package/splitbutton/index.mjs.map +1 -1
- package/steppanel/StepPanel.vue +6 -4
- package/steppanel/index.d.ts +4 -0
- package/steppanel/index.mjs +6 -4
- package/steppanel/index.mjs.map +1 -1
- package/steppanel/style/index.mjs +1 -0
- package/steppanel/style/index.mjs.map +1 -1
- package/tieredmenu/TieredMenu.vue +1 -1
- package/tieredmenu/index.mjs +1 -1
- package/tieredmenu/index.mjs.map +1 -1
- package/tree/BaseTree.vue +5 -1
- package/tree/Tree.vue +88 -31
- package/tree/TreeNode.vue +103 -33
- package/tree/index.d.ts +78 -3
- package/tree/index.mjs +229 -96
- package/tree/index.mjs.map +1 -1
- package/treeselect/TreeSelect.vue +3 -2
- package/treeselect/index.mjs +6 -5
- package/treeselect/index.mjs.map +1 -1
- package/umd/primevue.min.js +1 -1
- package/web-types.json +1 -1
package/tree/BaseTree.vue
CHANGED
package/tree/Tree.vue
CHANGED
|
@@ -35,15 +35,19 @@
|
|
|
35
35
|
:selectionKeys="selectionKeys"
|
|
36
36
|
@checkbox-change="onCheckboxChange"
|
|
37
37
|
:loadingMode="loadingMode"
|
|
38
|
+
:draggableNodes="draggableNodes"
|
|
39
|
+
:droppableNodes="droppableNodes"
|
|
38
40
|
:draggableScope="draggableScope"
|
|
39
|
-
:dragdrop="dragdrop"
|
|
40
41
|
:validateDrop="validateDrop"
|
|
41
42
|
@node-drop="onNodeDrop"
|
|
43
|
+
@node-dragenter="onNodeDragEnter"
|
|
44
|
+
@node-dragleave="onNodeDragLeave"
|
|
45
|
+
@value-change="onValueChanged"
|
|
42
46
|
:unstyled="unstyled"
|
|
43
47
|
:pt="pt"
|
|
44
48
|
></TreeNode>
|
|
45
49
|
</ul>
|
|
46
|
-
<div v-else :class="cx('emptyMessage')" v-bind="ptm('emptyMessage')">
|
|
50
|
+
<div v-else-if="empty && !$pcTreeSelect" :class="cx('emptyMessage')" v-bind="ptm('emptyMessage')">
|
|
47
51
|
<slot name="empty">
|
|
48
52
|
{{ emptyMessageText }}
|
|
49
53
|
</slot>
|
|
@@ -69,7 +73,7 @@ export default {
|
|
|
69
73
|
name: 'Tree',
|
|
70
74
|
extends: BaseTree,
|
|
71
75
|
inheritAttrs: false,
|
|
72
|
-
emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'update:value'],
|
|
76
|
+
emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'node-dragenter', 'node-dragleave', 'update:value', 'drag-enter', 'drag-leave'],
|
|
73
77
|
data() {
|
|
74
78
|
return {
|
|
75
79
|
d_expandedKeys: this.expandedKeys || {},
|
|
@@ -81,6 +85,9 @@ export default {
|
|
|
81
85
|
dragHover: null
|
|
82
86
|
};
|
|
83
87
|
},
|
|
88
|
+
inject: {
|
|
89
|
+
$pcTreeSelect: { default: null }
|
|
90
|
+
},
|
|
84
91
|
dragDropService: null,
|
|
85
92
|
dragStartCleanup: null,
|
|
86
93
|
dragStopCleanup: null,
|
|
@@ -90,7 +97,7 @@ export default {
|
|
|
90
97
|
}
|
|
91
98
|
},
|
|
92
99
|
mounted() {
|
|
93
|
-
if (this.
|
|
100
|
+
if (this.droppableNodes) {
|
|
94
101
|
this.dragDropService = useTreeDragDropService();
|
|
95
102
|
|
|
96
103
|
this.dragStartCleanup = this.dragDropService.onDragStart((event) => {
|
|
@@ -272,6 +279,16 @@ export default {
|
|
|
272
279
|
onNodeDrop(event) {
|
|
273
280
|
this.$emit('node-drop', event);
|
|
274
281
|
},
|
|
282
|
+
onNodeDragEnter(event) {
|
|
283
|
+
this.$emit('node-dragenter', event);
|
|
284
|
+
},
|
|
285
|
+
onNodeDragLeave(event) {
|
|
286
|
+
this.$emit('node-dragleave', event);
|
|
287
|
+
},
|
|
288
|
+
onValueChanged(event) {
|
|
289
|
+
this.dragNodeSubNodes.splice(this.dragNodeIndex, 1);
|
|
290
|
+
this.$emit('update:value', event.nodes);
|
|
291
|
+
},
|
|
275
292
|
allowDrop(dragNode, dropNode, dragNodeScope) {
|
|
276
293
|
if (!dragNode) {
|
|
277
294
|
//prevent random html elements to be dragged
|
|
@@ -305,49 +322,79 @@ export default {
|
|
|
305
322
|
allowNodeDrop(dropNode) {
|
|
306
323
|
return this.allowDrop(this.dragNode, dropNode, this.dragNodeScope);
|
|
307
324
|
},
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
if (dropScope
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
+
hasCommonScope(dragScope, dropScope) {
|
|
326
|
+
if (dragScope === null && dropScope === null) {
|
|
327
|
+
return true;
|
|
328
|
+
} else if (dragScope === null || dropScope === null) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (typeof dropScope === 'string') {
|
|
333
|
+
if (typeof dragScope === 'string') {
|
|
334
|
+
return dragScope === dropScope;
|
|
335
|
+
} else if (Array.isArray(dragScope)) {
|
|
336
|
+
return dragScope.indexOf(dropScope) !== -1;
|
|
337
|
+
}
|
|
338
|
+
} else if (Array.isArray(dropScope)) {
|
|
339
|
+
if (typeof dragScope === 'string') {
|
|
340
|
+
return dropScope.indexOf(dragScope) !== -1;
|
|
341
|
+
} else if (Array.isArray(dragScope)) {
|
|
342
|
+
for (let ds of dragScope) {
|
|
343
|
+
if (dropScope.indexOf(ds) !== -1) {
|
|
344
|
+
return true;
|
|
325
345
|
}
|
|
326
346
|
}
|
|
347
|
+
return false;
|
|
327
348
|
}
|
|
328
|
-
|
|
329
|
-
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return false;
|
|
352
|
+
},
|
|
353
|
+
isValidDragScope(dragScope) {
|
|
354
|
+
if (this.droppableScope === null) {
|
|
330
355
|
return true;
|
|
331
356
|
}
|
|
357
|
+
|
|
358
|
+
return this.hasCommonScope(dragScope, this.droppableScope);
|
|
359
|
+
},
|
|
360
|
+
isSameTreeScope(dragScope) {
|
|
361
|
+
return this.hasCommonScope(dragScope, this.draggableScope);
|
|
332
362
|
},
|
|
333
363
|
onDragOver(event) {
|
|
334
|
-
if (this.
|
|
335
|
-
event.dataTransfer.dropEffect = '
|
|
336
|
-
|
|
364
|
+
if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
|
|
365
|
+
event.dataTransfer.dropEffect = 'copy';
|
|
366
|
+
} else {
|
|
367
|
+
event.dataTransfer.dropEffect = 'none';
|
|
337
368
|
}
|
|
369
|
+
|
|
370
|
+
event.preventDefault();
|
|
338
371
|
},
|
|
339
|
-
onDragEnter() {
|
|
340
|
-
if (this.
|
|
372
|
+
onDragEnter(event) {
|
|
373
|
+
if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
|
|
341
374
|
this.dragHover = true;
|
|
375
|
+
|
|
376
|
+
this.$emit('drag-enter', {
|
|
377
|
+
originalEvent: event,
|
|
378
|
+
value: this.value,
|
|
379
|
+
dragNode: this.dragNode,
|
|
380
|
+
dragNodeScope: this.dragNodeScope
|
|
381
|
+
});
|
|
342
382
|
}
|
|
343
383
|
},
|
|
344
384
|
onDragLeave(event) {
|
|
345
|
-
if (this.
|
|
385
|
+
if (this.droppableNodes) {
|
|
346
386
|
let rect = event.currentTarget.getBoundingClientRect();
|
|
347
387
|
|
|
348
|
-
if (event.x
|
|
388
|
+
if (event.x >= parseInt(rect.right) || event.x <= parseInt(rect.left) || event.y >= parseInt(rect.bottom) || event.y <= parseInt(rect.top)) {
|
|
349
389
|
this.dragHover = false;
|
|
350
390
|
}
|
|
391
|
+
|
|
392
|
+
this.$emit('drag-leave', {
|
|
393
|
+
originalEvent: event,
|
|
394
|
+
value: this.value,
|
|
395
|
+
dragNode: this.dragNode,
|
|
396
|
+
dragNodeScope: this.dragNodeScope
|
|
397
|
+
});
|
|
351
398
|
}
|
|
352
399
|
},
|
|
353
400
|
processTreeDrop(dragNode, dragNodeIndex) {
|
|
@@ -360,16 +407,25 @@ export default {
|
|
|
360
407
|
});
|
|
361
408
|
},
|
|
362
409
|
onDrop(event) {
|
|
363
|
-
if (this.
|
|
410
|
+
if (this.droppableNodes) {
|
|
364
411
|
event.preventDefault();
|
|
365
412
|
let dragNode = this.dragNode;
|
|
366
413
|
|
|
367
414
|
if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
|
|
368
415
|
let dragNodeIndex = this.dragNodeIndex;
|
|
369
416
|
|
|
417
|
+
if (this.isSameTreeScope(this.dragNodeScope)) {
|
|
418
|
+
this.dragDropService.stopDrag({
|
|
419
|
+
node: dragNode
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
|
|
370
425
|
if (this.validateDrop) {
|
|
371
426
|
this.$emit('node-drop', {
|
|
372
427
|
originalEvent: event,
|
|
428
|
+
value: this.value,
|
|
373
429
|
dragNode: dragNode,
|
|
374
430
|
dropNode: null,
|
|
375
431
|
index: dragNodeIndex,
|
|
@@ -380,6 +436,7 @@ export default {
|
|
|
380
436
|
} else {
|
|
381
437
|
this.$emit('node-drop', {
|
|
382
438
|
originalEvent: event,
|
|
439
|
+
value: this.value,
|
|
383
440
|
dragNode: dragNode,
|
|
384
441
|
dropNode: null,
|
|
385
442
|
index: dragNodeIndex
|
package/tree/TreeNode.vue
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
@touchend="onTouchEnd"
|
|
24
24
|
@dragstart="onNodeDragStart"
|
|
25
25
|
@dragover="onNodeDragOver"
|
|
26
|
+
@dragenter="onNodeDragEnter"
|
|
26
27
|
@dragleave="onNodeDragLeave"
|
|
27
28
|
@dragend="onNodeDragEnd"
|
|
28
29
|
@drop="onNodeDrop"
|
|
@@ -84,9 +85,13 @@
|
|
|
84
85
|
:selectionKeys="selectionKeys"
|
|
85
86
|
@checkbox-change="propagateUp"
|
|
86
87
|
:draggableScope="draggableScope"
|
|
87
|
-
:
|
|
88
|
+
:draggableNodes="draggableNodes"
|
|
89
|
+
:droppableNodes="droppableNodes"
|
|
88
90
|
:validateDrop="validateDrop"
|
|
89
|
-
@node-drop="
|
|
91
|
+
@node-drop="$emit('node-drop', $event)"
|
|
92
|
+
@node-dragenter="$emit('node-dragenter', $event)"
|
|
93
|
+
@node-dragleave="$emit('node-dragleave', $event)"
|
|
94
|
+
@value-change="$emit('value-change', $event)"
|
|
90
95
|
:unstyled="unstyled"
|
|
91
96
|
:pt="pt"
|
|
92
97
|
/>
|
|
@@ -109,7 +114,7 @@ export default {
|
|
|
109
114
|
name: 'TreeNode',
|
|
110
115
|
hostName: 'Tree',
|
|
111
116
|
extends: BaseComponent,
|
|
112
|
-
emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop'],
|
|
117
|
+
emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop', 'value-change', 'node-dragenter', 'node-dragleave'],
|
|
113
118
|
props: {
|
|
114
119
|
node: {
|
|
115
120
|
type: null,
|
|
@@ -151,7 +156,11 @@ export default {
|
|
|
151
156
|
type: [String, Array],
|
|
152
157
|
default: null
|
|
153
158
|
},
|
|
154
|
-
|
|
159
|
+
draggableNodes: {
|
|
160
|
+
type: Boolean,
|
|
161
|
+
default: null
|
|
162
|
+
},
|
|
163
|
+
droppableNodes: {
|
|
155
164
|
type: Boolean,
|
|
156
165
|
default: null
|
|
157
166
|
},
|
|
@@ -342,46 +351,85 @@ export default {
|
|
|
342
351
|
onTabKey() {
|
|
343
352
|
this.setAllNodesTabIndexes();
|
|
344
353
|
},
|
|
345
|
-
|
|
346
|
-
|
|
354
|
+
removeNodeFromTree(nodes, nodeToRemove) {
|
|
355
|
+
return nodes.reduce((acc, node) => {
|
|
356
|
+
if (node.key === nodeToRemove.key) {
|
|
357
|
+
return acc;
|
|
358
|
+
}
|
|
359
|
+
if (node.children && node.children.length > 0) {
|
|
360
|
+
const updatedChildren = this.removeNodeFromTree(node.children, nodeToRemove);
|
|
361
|
+
acc.push({ ...node, children: updatedChildren });
|
|
362
|
+
} else {
|
|
363
|
+
acc.push(node);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
return acc;
|
|
367
|
+
}, []);
|
|
368
|
+
},
|
|
369
|
+
insertNodeInSiblings(nodes, targetKey, nodeToInsert, offset) {
|
|
370
|
+
const targetIndex = nodes.findIndex((n) => n.key === targetKey);
|
|
371
|
+
|
|
372
|
+
if (targetIndex !== -1) {
|
|
373
|
+
return nodes.toSpliced(targetIndex + offset, 0, nodeToInsert);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return nodes.map((node) => {
|
|
377
|
+
if (node.children && node.children.length > 0) {
|
|
378
|
+
return { ...node, children: this.insertNodeInSiblings(node.children, targetKey, nodeToInsert, offset) };
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return node;
|
|
382
|
+
});
|
|
383
|
+
},
|
|
384
|
+
addNodeAsChild(nodes, parentKey, nodeToInsert) {
|
|
385
|
+
return nodes.map((node) => {
|
|
386
|
+
if (node.key === parentKey) {
|
|
387
|
+
return { ...node, children: [...(node.children || []), nodeToInsert] };
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
if (node.children && node.children.length > 0) {
|
|
391
|
+
return { ...node, children: this.addNodeAsChild(node.children, parentKey, nodeToInsert) };
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
return node;
|
|
395
|
+
});
|
|
347
396
|
},
|
|
348
397
|
insertNodeOnDrop() {
|
|
349
398
|
const { dragNode, dragNodeIndex, dragNodeSubNodes, dragDropService } = this.$pcTree;
|
|
350
399
|
|
|
351
400
|
if (!this.node || dragNodeIndex == null || !dragNode || !dragNodeSubNodes) {
|
|
352
|
-
return;
|
|
401
|
+
return null;
|
|
353
402
|
}
|
|
354
403
|
|
|
355
404
|
const position = this.dropPosition;
|
|
356
|
-
|
|
357
|
-
const index = this.index || 0;
|
|
358
|
-
const dropIndex = dragNodeSubNodes === subNodes ? (dragNodeIndex > index ? index : index - 1) : index;
|
|
359
|
-
|
|
360
|
-
dragNodeSubNodes.splice(dragNodeIndex, 1);
|
|
405
|
+
let updatedNodes = this.removeNodeFromTree(this.rootNodes, dragNode);
|
|
361
406
|
|
|
362
407
|
if (position < 0) {
|
|
363
408
|
// insert before a Node
|
|
364
|
-
|
|
409
|
+
updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 0);
|
|
365
410
|
} else if (position > 0) {
|
|
366
411
|
// insert after a Node
|
|
367
|
-
|
|
412
|
+
updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 1);
|
|
368
413
|
} else {
|
|
369
414
|
// insert as child of a Node
|
|
370
|
-
|
|
371
|
-
this.node.children.push(dragNode);
|
|
415
|
+
updatedNodes = this.addNodeAsChild(updatedNodes, this.node.key, dragNode);
|
|
372
416
|
}
|
|
373
417
|
|
|
418
|
+
this.$emit('value-change', { nodes: updatedNodes });
|
|
419
|
+
|
|
374
420
|
dragDropService.stopDrag({
|
|
375
421
|
node: dragNode,
|
|
376
|
-
subNodes,
|
|
422
|
+
subNodes: updatedNodes,
|
|
377
423
|
index: dragNodeIndex
|
|
378
424
|
});
|
|
425
|
+
|
|
426
|
+
return updatedNodes;
|
|
379
427
|
},
|
|
380
428
|
onNodeDrop(event) {
|
|
381
|
-
event.preventDefault();
|
|
382
|
-
event.stopPropagation();
|
|
383
|
-
|
|
384
429
|
if (this.isDroppable) {
|
|
430
|
+
event.preventDefault();
|
|
431
|
+
event.stopPropagation();
|
|
432
|
+
|
|
385
433
|
const { dragNode } = this.$pcTree;
|
|
386
434
|
const position = this.dropPosition;
|
|
387
435
|
const isValidDrop = position !== 0 || (position === 0 && this.isNodeDroppable);
|
|
@@ -390,32 +438,44 @@ export default {
|
|
|
390
438
|
if (this.validateDrop) {
|
|
391
439
|
this.$emit('node-drop', {
|
|
392
440
|
originalEvent: event,
|
|
441
|
+
value: this.rootNodes,
|
|
393
442
|
dragNode: dragNode,
|
|
394
443
|
dropNode: this.node,
|
|
395
444
|
index: this.index,
|
|
396
445
|
accept: () => {
|
|
397
|
-
this.insertNodeOnDrop();
|
|
446
|
+
const updatedNodes = this.insertNodeOnDrop();
|
|
447
|
+
|
|
448
|
+
this.$emit('node-drop', {
|
|
449
|
+
originalEvent: event,
|
|
450
|
+
value: updatedNodes,
|
|
451
|
+
dragNode: dragNode,
|
|
452
|
+
dropNode: this.node,
|
|
453
|
+
index: this.index
|
|
454
|
+
});
|
|
398
455
|
}
|
|
399
456
|
});
|
|
400
457
|
} else {
|
|
401
|
-
this.insertNodeOnDrop();
|
|
458
|
+
const updatedNodes = this.insertNodeOnDrop();
|
|
459
|
+
|
|
402
460
|
this.$emit('node-drop', {
|
|
403
461
|
originalEvent: event,
|
|
462
|
+
value: updatedNodes,
|
|
404
463
|
dragNode: dragNode,
|
|
405
464
|
dropNode: this.node,
|
|
406
465
|
index: this.index
|
|
407
466
|
});
|
|
408
467
|
}
|
|
409
468
|
}
|
|
410
|
-
}
|
|
411
469
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
470
|
+
this.isPrevDropPointHovered = false;
|
|
471
|
+
this.isNextDropPointHovered = false;
|
|
472
|
+
this.isNodeDropHovered = false;
|
|
473
|
+
}
|
|
415
474
|
},
|
|
416
475
|
onNodeDragStart(event) {
|
|
417
476
|
if (this.isNodeDraggable) {
|
|
418
|
-
event.dataTransfer
|
|
477
|
+
event.dataTransfer.effectAllowed = 'all';
|
|
478
|
+
event.dataTransfer.setData('text', 'data');
|
|
419
479
|
|
|
420
480
|
const target = event.currentTarget;
|
|
421
481
|
const dragEl = target.cloneNode(true);
|
|
@@ -429,7 +489,7 @@ export default {
|
|
|
429
489
|
toggler.style.visibility = 'hidden';
|
|
430
490
|
checkbox?.remove();
|
|
431
491
|
document.body.appendChild(dragEl);
|
|
432
|
-
event.dataTransfer
|
|
492
|
+
event.dataTransfer.setDragImage(dragEl, 0, 0);
|
|
433
493
|
|
|
434
494
|
setTimeout(() => document.body.removeChild(dragEl), 0);
|
|
435
495
|
|
|
@@ -444,9 +504,8 @@ export default {
|
|
|
444
504
|
}
|
|
445
505
|
},
|
|
446
506
|
onNodeDragOver(event) {
|
|
447
|
-
event.dataTransfer.dropEffect = 'move';
|
|
448
|
-
|
|
449
507
|
if (this.isDroppable) {
|
|
508
|
+
event.dataTransfer.dropEffect = 'copy';
|
|
450
509
|
const nodeElement = event.currentTarget;
|
|
451
510
|
const rect = nodeElement.getBoundingClientRect();
|
|
452
511
|
const y = event.clientY - rect.top;
|
|
@@ -462,14 +521,25 @@ export default {
|
|
|
462
521
|
} else if (this.isNodeDroppable) {
|
|
463
522
|
this.isNodeDropHovered = true;
|
|
464
523
|
}
|
|
524
|
+
} else {
|
|
525
|
+
event.dataTransfer.dropEffect = 'none';
|
|
465
526
|
}
|
|
466
527
|
|
|
467
|
-
if (this.
|
|
528
|
+
if (this.droppableNodes) {
|
|
468
529
|
event.preventDefault();
|
|
469
530
|
event.stopPropagation();
|
|
470
531
|
}
|
|
471
532
|
},
|
|
533
|
+
onNodeDragEnter() {
|
|
534
|
+
this.$emit('node-dragenter', {
|
|
535
|
+
node: this.node
|
|
536
|
+
});
|
|
537
|
+
},
|
|
472
538
|
onNodeDragLeave() {
|
|
539
|
+
this.$emit('node-dragleave', {
|
|
540
|
+
node: this.node
|
|
541
|
+
});
|
|
542
|
+
|
|
473
543
|
this.isPrevDropPointHovered = false;
|
|
474
544
|
this.isNextDropPointHovered = false;
|
|
475
545
|
this.isNodeDropHovered = false;
|
|
@@ -667,10 +737,10 @@ export default {
|
|
|
667
737
|
return this.parentNode ? this.parentNode.children : this.rootNodes;
|
|
668
738
|
},
|
|
669
739
|
isDraggable() {
|
|
670
|
-
return this.
|
|
740
|
+
return this.draggableNodes;
|
|
671
741
|
},
|
|
672
742
|
isDroppable() {
|
|
673
|
-
return this.
|
|
743
|
+
return this.droppableNodes && this.$pcTree.allowNodeDrop(this.node);
|
|
674
744
|
},
|
|
675
745
|
isNodeDraggable() {
|
|
676
746
|
return this.node?.draggable !== false && this.isDraggable;
|
package/tree/index.d.ts
CHANGED
|
@@ -106,6 +106,10 @@ export interface TreeNodeDropEvent {
|
|
|
106
106
|
* Original event
|
|
107
107
|
*/
|
|
108
108
|
originalEvent: Event;
|
|
109
|
+
/**
|
|
110
|
+
* New tree value state
|
|
111
|
+
*/
|
|
112
|
+
value: TreeNode[];
|
|
109
113
|
/**
|
|
110
114
|
* Dragged node
|
|
111
115
|
*/
|
|
@@ -120,6 +124,52 @@ export interface TreeNodeDropEvent {
|
|
|
120
124
|
index: number;
|
|
121
125
|
}
|
|
122
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Custom tree drag enter event.
|
|
129
|
+
* @see {@link TreeEmitsOptions.drag-enter}
|
|
130
|
+
*/
|
|
131
|
+
export interface TreeDragEnterEvent {
|
|
132
|
+
/**
|
|
133
|
+
* Original event
|
|
134
|
+
*/
|
|
135
|
+
originalEvent: Event;
|
|
136
|
+
/**
|
|
137
|
+
* Current tree value state
|
|
138
|
+
*/
|
|
139
|
+
value: TreeNode[];
|
|
140
|
+
/**
|
|
141
|
+
* Dragged node
|
|
142
|
+
*/
|
|
143
|
+
dragNode: TreeNode;
|
|
144
|
+
/**
|
|
145
|
+
* Dragged node's scope
|
|
146
|
+
*/
|
|
147
|
+
dragNodeScope: string;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Custom tree drag leave event.
|
|
152
|
+
* @see {@link TreeEmitsOptions.drag-leave}
|
|
153
|
+
*/
|
|
154
|
+
export interface TreeDragLeaveEvent {
|
|
155
|
+
/**
|
|
156
|
+
* Original event
|
|
157
|
+
*/
|
|
158
|
+
originalEvent: Event;
|
|
159
|
+
/**
|
|
160
|
+
* Current tree value state
|
|
161
|
+
*/
|
|
162
|
+
value: TreeNode[];
|
|
163
|
+
/**
|
|
164
|
+
* Dragged node
|
|
165
|
+
*/
|
|
166
|
+
dragNode: TreeNode;
|
|
167
|
+
/**
|
|
168
|
+
* Dragged node's scope
|
|
169
|
+
*/
|
|
170
|
+
dragNodeScope: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
123
173
|
/**
|
|
124
174
|
* Custom passthrough(pt) options.
|
|
125
175
|
* @see {@link TreeProps.pt}
|
|
@@ -344,10 +394,15 @@ export interface TreeProps {
|
|
|
344
394
|
*/
|
|
345
395
|
scrollHeight?: HintedString<'flex'> | undefined;
|
|
346
396
|
/**
|
|
347
|
-
* Whether the nodes are draggable
|
|
397
|
+
* Whether the nodes are draggable.
|
|
348
398
|
* @defaultValue null
|
|
349
399
|
*/
|
|
350
|
-
|
|
400
|
+
draggableNodes?: boolean | undefined;
|
|
401
|
+
/**
|
|
402
|
+
* Whether the nodes are droppable.
|
|
403
|
+
* @defaultValue null
|
|
404
|
+
*/
|
|
405
|
+
droppableNodes?: boolean | undefined;
|
|
351
406
|
/**
|
|
352
407
|
* Scope of the draggable nodes to match a droppableScope.
|
|
353
408
|
* @defaultValue null
|
|
@@ -604,14 +659,34 @@ export interface TreeEmitsOptions {
|
|
|
604
659
|
'node-collapse'(node: TreeNode): void;
|
|
605
660
|
/**
|
|
606
661
|
* Callback to invoke when a node is collapsed.
|
|
662
|
+
* @param {TreeNode} event
|
|
663
|
+
*/
|
|
664
|
+
'node-drop'(event: TreeNodeDropEvent): void;
|
|
665
|
+
/**
|
|
666
|
+
* Callback to invoke when a dragged element enters a node.
|
|
607
667
|
* @param {TreeNode} node - Node instance.
|
|
608
668
|
*/
|
|
609
|
-
'node-
|
|
669
|
+
'node-dragenter'(node: TreeNode): void;
|
|
670
|
+
/**
|
|
671
|
+
* Callback to invoke when a dragged element leaves a node.
|
|
672
|
+
* @param {TreeNode} node - Node instance.
|
|
673
|
+
*/
|
|
674
|
+
'node-dragleave'(node: TreeNode): void;
|
|
610
675
|
/**
|
|
611
676
|
* Callback to invoke on filter input.
|
|
612
677
|
* @param {TreeFilterEvent} event - Custom filter event.
|
|
613
678
|
*/
|
|
614
679
|
'filter'(event: TreeFilterEvent): void;
|
|
680
|
+
/**
|
|
681
|
+
* Callback to invoke on drag enter.
|
|
682
|
+
* @param {TreeDragEnterEvent} event - Custom drag enter event.
|
|
683
|
+
*/
|
|
684
|
+
'drag-enter'(event: TreeDragEnterEvent): void;
|
|
685
|
+
/**
|
|
686
|
+
* Callback to invoke on drag leave.
|
|
687
|
+
* @param {TreeDragLeaveEvent} event - Custom drag leave event.
|
|
688
|
+
*/
|
|
689
|
+
'drag-leave'(event: TreeDragLeaveEvent): void;
|
|
615
690
|
}
|
|
616
691
|
|
|
617
692
|
export declare type TreeEmits = EmitFn<TreeEmitsOptions>;
|