Began making generic tree re-arranging methods, still buggy

This commit is contained in:
Stefan Zermatten
2019-07-30 16:47:21 +02:00
parent 4b7ff2146f
commit d0304da4fd
18 changed files with 176 additions and 60 deletions

View File

@@ -22,7 +22,8 @@
:children="computedChildren"
:group="group"
:show-empty="organize"
@moved="e => $emit('moved', e)"
@reordered="e => $emit('reordered', e)"
@reorganized="e => $emit('reorganized', e)"
/>
</div>
</v-expand-transition>

View File

@@ -18,7 +18,8 @@
:organize="organize"
:lazy="lazy"
class="item"
@moved="e => $emit('moved', e)"
@reordered="e => $emit('reordered', e)"
@reorganized="e => $emit('reorganized', e)"
@dragstart.native="e => e.dataTransfer.setData('cow', child.node && child.node.name)"
/>
</draggable>
@@ -54,10 +55,17 @@
},
},
methods: {
change({added, removed, moved}){
if (removed) return;
let newIndex = (added || moved).newIndex;
this.$emit('moved', {parent: this.node, newIndex});
change({added, moved}){
let event = moved || added;
if (event){
let newIndex = event.newIndex;
let doc = event.element.node;
if (moved){
this.$emit('reordered', {doc, newIndex});
} else if (added){
this.$emit('reorganized', {doc, parent: this.node, newIndex});
}
}
},
},
};

View File

@@ -5,7 +5,8 @@
:children="libraryChildren"
:group="library && library._id"
:organize="organize"
@moved="moved"
@reordered="reordered"
@reorganized="reorganized"
/>
</v-card-text>
</template>
@@ -14,6 +15,7 @@
import Libraries from '/imports/api/library/Libraries.js';
import LibraryNodes, { libraryNodesToTree } from '/imports/api/library/LibraryNodes.js';
import TreeNodeList from '/imports/ui/components/tree/TreeNodeList.vue';
import { organizeDoc, reorderDoc } from '/imports/api/parenting/organizeMethods.js';
export default {
components: {
@@ -36,8 +38,36 @@
},
},
methods: {
moved(e){
console.log(e)
reordered({doc, newIndex}){
reorderDoc.call({
docRef: {
id: doc._id,
collection: 'libraryNodes',
},
order: newIndex,
});
},
reorganized({doc, parent, newIndex}){
let parentRef;
if (parent){
parentRef = {
id: this.libraryId,
collection: 'libraries',
};
} else {
parentRef = {
id: parent._id,
collection: 'libraryNodes',
};
}
organizeDoc.call({
docRef: {
id: doc._id,
collection: 'libraryNodes',
},
parentRef,
order: newIndex,
});
},
},
};

View File

@@ -38,7 +38,7 @@ export default {
mixins: [schemaFormMixin],
data(){return {
model: {
libraryNodeType: this.type,
type: this.type,
},
schema: undefined,
validationContext: undefined,
@@ -52,7 +52,7 @@ export default {
this.schema = librarySchemas[newType];
this.validationContext = this.schema.newContext();
let model = this.schema.clean({});
model.libraryNodeType = newType;
model.type = newType;
this.model = model;
},
model(newModel){

View File

@@ -44,8 +44,8 @@
elementId: 'insert-library-node-fab',
callback(libraryNode){
if (!libraryNode) return;
libraryNode.parent = {collection: "library", id: that.library._id};
libraryNode.ancestors = [ {collection: "library", id: that.library._id}];
libraryNode.parent = {collection: "libraries", id: that.library._id};
libraryNode.ancestors = [ {collection: "libraries", id: that.library._id}];
setDocToLastOrder({collection: LibraryNodes, doc: libraryNode});
console.log(libraryNode);
let libraryNodeId = insertNode.call(libraryNode);