Fixed showstopping bugs with tree organize functions

This commit is contained in:
ThaumRystra
2023-12-31 18:06:31 +02:00
parent 9d07953a40
commit e886be8f04
12 changed files with 360 additions and 181 deletions

View File

@@ -55,14 +55,15 @@
<tree-node-list
v-if="showExpanded"
:node="node"
:root="node.root"
:children="computedChildren"
:group="group"
:organize="organize"
:selected-node="selectedNode"
:start-expanded="startExpanded"
:show-external-details="showExternalDetails"
@reordered="e => $emit('reordered', e)"
@reorganized="e => $emit('reorganized', e)"
@move-within-root="e => $emit('move-within-root', e)"
@move-between-roots="e => $emit('move-between-roots', e)"
@selected="e => $emit('selected', e)"
/>
<div v-else>

View File

@@ -25,8 +25,8 @@
:start-expanded="startExpanded"
:show-external-details="showExternalDetails"
@selected="e => $emit('selected', e)"
@reordered="e => $emit('reordered', e)"
@reorganized="e => $emit('reorganized', e)"
@move-within-root="e => $emit('move-within-root', e)"
@move-between-roots="e => $emit('move-between-roots', e)"
/>
</draggable>
</template>
@@ -45,6 +45,10 @@ export default {
type: Object,
default: undefined,
},
root: {
type: Object,
required: true,
},
group: {
type: String,
default: undefined,
@@ -93,32 +97,31 @@ export default {
let event = moved || added;
if (event) {
let doc = event.element.doc;
let newIndex;
if (event.newIndex === 0) {
newIndex = 0.5;
} else {
if (event.newIndex < this.children.length) {
let childAtNewIndex = this.children[event.newIndex];
if (event.newIndex > event.oldIndex) {
newIndex = childAtNewIndex.doc.right + 0.5;
} else {
newIndex = childAtNewIndex.doc.left - 0.5;
}
let newPosition;
if (!this.children.length) {
if (this.node) {
newPosition = this.node.left + 0.5;
} else {
let childBeforeNewIndex = this.children[event.newIndex - 1];
newIndex = childBeforeNewIndex.doc.right + 0.5;
newPosition = 0.5;
}
} else if (event.newIndex < this.children.length) {
let childAtNewIndex = this.children[event.newIndex];
if (event.newIndex > event.oldIndex) {
newPosition = childAtNewIndex.doc.right + 0.5;
} else {
newPosition = childAtNewIndex.doc.left - 0.5;
}
} else {
let childBeforeNewIndex = this.children[event.newIndex - 1];
newPosition = childBeforeNewIndex.doc.right + 0.5;
}
if (moved) {
this.$emit('reordered', { doc, newIndex });
} else if (added) {
this.$emit('reorganized', { doc, parent: this.node, newIndex });
if (doc.root.id === this.root.id) {
this.$emit('move-within-root', { doc, newPosition });
} else {
this.$emit('move-between-roots', { doc, newPosition, newRootRef: this.root });
}
}
},
move() {
return true;
},
},
};
</script>