Browse Source

trigger 'sorter:drag:validation'

refactor-sorter
mohamedsalem401 1 year ago
parent
commit
879e58c8e1
  1. 23
      packages/core/src/utils/sorter/DropLocationDeterminer.ts
  2. 2
      packages/core/src/utils/sorter/Sorter.ts

23
packages/core/src/utils/sorter/DropLocationDeterminer.ts

@ -70,7 +70,7 @@ export class DropLocationDeterminer<T, NodeType extends SortableTreeNode<T>> ext
this.containerContext = options.containerContext;
this.positionOptions = options.positionOptions;
this.dragDirection = options.dragDirection;
this.eventHandlers = options.eventHandlers || {};
this.eventHandlers = options.eventHandlers;
bindAll(this, 'startSort', 'onDragStart', 'onMove', 'endDrag');
this.restLastMoveData();
@ -246,22 +246,22 @@ export class DropLocationDeterminer<T, NodeType extends SortableTreeNode<T>> ext
const { lastTargetNode: targetNode } = this.lastMoveData;
// For backward compatibility, leave it to a single node
const sourceNode = this.sourceNodes[0];
const firstSourceNode = this.sourceNodes[0];
this.em.trigger('sorter:drag:end', {
targetCollection: targetNode ? targetNode.getChildren() : null,
modelToDrop: sourceNode.model,
modelToDrop: firstSourceNode.model,
warns: [''],
validResult: {
result: true,
src: this.sourceNodes.map(node => node.element),
srcModel: sourceNode.model,
srcModel: firstSourceNode.model,
trg: targetNode?.element,
trgModel: targetNode?.model,
draggable: true,
droppable: true,
},
dst: targetNode?.element,
srcEl: sourceNode.element,
srcEl: firstSourceNode.element,
});
}
@ -289,9 +289,18 @@ export class DropLocationDeterminer<T, NodeType extends SortableTreeNode<T>> ext
private getValidParentNode(targetNode: NodeType) {
let finalNode = targetNode;
// TODO change the hard coded values
while (finalNode.getParent() !== null) {
while (finalNode !== null) {
const canMove = this.sourceNodes.some(node => finalNode.canMove(node, 0));
// For backward compatibility, leave it to a single node
const firstSource = this.sourceNodes[0];
this.em.trigger('sorter:drag:validation', {
valid: canMove,
src: firstSource.element,
srcModel: firstSource.model,
trg: finalNode.element,
trgModel: finalNode.model,
})
if (canMove) break
finalNode = finalNode.getParent()! as NodeType;
}

2
packages/core/src/utils/sorter/Sorter.ts

@ -121,6 +121,8 @@ export default class Sorter<T, NodeType extends SortableTreeNode<T>> {
this.bindDragEventHandlers(docs);
this.eventHandlers.onStartSort?.(this.sourceNodes, this.containerContext.container);
// For backward compatibility, leave it to a single node
const model = this.sourceNodes?.[0].model;
this.eventHandlers.legacyOnStartSort?.({
sorter: this,

Loading…
Cancel
Save