diff --git a/app/imports/api/creature/Creatures.js b/app/imports/api/creature/Creatures.js index c125ebe8..d49dd907 100644 --- a/app/imports/api/creature/Creatures.js +++ b/app/imports/api/creature/Creatures.js @@ -116,21 +116,9 @@ const insertCreature = new ValidatedMethod({ }); -const removeCreature = new ValidatedMethod({ - name: 'Creatures.methods.remove', - validate: null, - run({charId}) { - let creature = Creatures.findOne(_id); - assertOwnership(creature, this.userId); - let _id = CreatureProperties.insert(creatureProperty); - let property = CreatureProperties.findOne(_id); - recomputeCreatures(property); - }, -}); - const updateCreature = new ValidatedMethod({ name: 'Creatures.methods.update', - validate({_id, path, value, ack}){ + validate({_id, path, value}){ if (!_id) return false; // Allowed fields let allowedFields = ['name', 'alignment', 'gender', 'picture', 'settings']; diff --git a/app/imports/api/library/Libraries.js b/app/imports/api/library/Libraries.js index bb410028..12db9125 100644 --- a/app/imports/api/library/Libraries.js +++ b/app/imports/api/library/Libraries.js @@ -1,6 +1,8 @@ import SimpleSchema from 'simpl-schema'; import SharingSchema from '/imports/api/sharing/SharingSchema.js'; import simpleSchemaMixin from '/imports/api/creature/mixins/simpleSchemaMixin.js'; +import { assertEditPermission, assertOwnership } from '/imports/api/sharing/sharingPermissions.js'; +import LibraryNodes from '/imports/api/library/LibraryNodes.js'; /** * Libraries are trees of library nodes where each node represents a character @@ -41,6 +43,24 @@ const insertLibrary = new ValidatedMethod({ }, }); +const updateLibraryName = new ValidatedMethod({ + name: 'Libraries.methods.updateName', + validate: new SimpleSchema({ + _id: { + type: String, + regEx: SimpleSchema.RegEx.id + }, + name: { + type: String, + }, + }).validator(), + run({_id, name}){ + let library = Libraries.findOne(_id); + assertEditPermission(library, this.userId); + Libraries.update(_id, {$set: {name}}); + }, +}); + const setLibraryDefault = new ValidatedMethod({ name: 'Libraries.methods.makeLibraryDefault', validate: new SimpleSchema({ @@ -60,4 +80,22 @@ const setLibraryDefault = new ValidatedMethod({ }, }); -export { LibrarySchema, insertLibrary, setLibraryDefault }; +const removeLibrary = new ValidatedMethod({ + name: 'Libraries.methods.remove', + validate: new SimpleSchema({ + _id: { + type: String, + regEx: SimpleSchema.RegEx.id + }, + }).validator(), + run({_id}){ + let library = Libraries.findOne(_id); + console.log({library, _id}); + assertOwnership(library, this.userId); + Libraries.remove(_id); + this.unblock(); + LibraryNodes.remove({'ancestors.id': _id}); + } +}) + +export { LibrarySchema, insertLibrary, setLibraryDefault, updateLibraryName, removeLibrary }; diff --git a/app/imports/api/sharing/sharingPermissions.js b/app/imports/api/sharing/sharingPermissions.js index 84162fe7..c65596e6 100644 --- a/app/imports/api/sharing/sharingPermissions.js +++ b/app/imports/api/sharing/sharingPermissions.js @@ -10,7 +10,7 @@ function assertIdValid(userId){ function assertdocExists(doc){ if (!doc){ - throw new Meteor.Error("Edit permission denied", + throw new Meteor.Error("Permission denied", `No such document exists`); } } diff --git a/app/imports/ui/creature/character/CharacterSheet.vue b/app/imports/ui/creature/character/CharacterSheet.vue index 7514384c..abde8e4a 100644 --- a/app/imports/ui/creature/character/CharacterSheet.vue +++ b/app/imports/ui/creature/character/CharacterSheet.vue @@ -70,6 +70,7 @@ + + diff --git a/app/imports/ui/dialogStack/DialogComponentIndex.js b/app/imports/ui/dialogStack/DialogComponentIndex.js index 0f999733..47dd3ce5 100644 --- a/app/imports/ui/dialogStack/DialogComponentIndex.js +++ b/app/imports/ui/dialogStack/DialogComponentIndex.js @@ -2,13 +2,14 @@ import AttributeDialog from '/imports/ui/properties/attributes/AttributeDialog.v import AttributeDialogContainer from '/imports/ui/properties/attributes/AttributeDialogContainer.vue'; import AttributeCreationDialog from '/imports/ui/properties/attributes/AttributeCreationDialog.vue'; import CreatureFormDialog from '/imports/ui/creature/CreatureFormDialog.vue'; -import CharacterDeleteDialog from '/imports/ui/creature/character/CharacterDeleteDialog.vue'; import CreaturePropertyCreationDialog from '/imports/ui/creature/creatureProperties/CreaturePropertyCreationDialog.vue'; import CreaturePropertyDialog from '/imports/ui/creature/creatureProperties/CreaturePropertyDialog.vue' import CreaturePropertyFromLibraryDialog from '/imports/ui/creature/creatureProperties/CreaturePropertyFromLibraryDialog.vue' +import DeleteConfirmationDialog from '/imports/ui/dialogStack/DeleteConfirmationDialog.vue'; import FeatureCreationDialog from '/imports/ui/properties/features/FeatureCreationDialog.vue'; import FeatureDialogContainer from '/imports/ui/properties/features/FeatureDialogContainer.vue'; import LibraryCreationDialog from '/imports/ui/library/LibraryCreationDialog.vue'; +import LibraryEditDialog from '/imports/ui/library/LibraryEditDialog.vue'; import LibraryNodeCreationDialog from '/imports/ui/library/LibraryNodeCreationDialog.vue'; import LibraryNodeEditDialog from '/imports/ui/library/LibraryNodeEditDialog.vue'; import ShareDialog from '/imports/ui/sharing/ShareDialog.vue'; @@ -19,13 +20,14 @@ export default { AttributeDialogContainer, AttributeCreationDialog, CreatureFormDialog, - CharacterDeleteDialog, CreaturePropertyCreationDialog, CreaturePropertyDialog, CreaturePropertyFromLibraryDialog, + DeleteConfirmationDialog, FeatureCreationDialog, FeatureDialogContainer, LibraryCreationDialog, + LibraryEditDialog, LibraryNodeCreationDialog, LibraryNodeEditDialog, ShareDialog, diff --git a/app/imports/ui/library/LibraryBrowser.vue b/app/imports/ui/library/LibraryBrowser.vue index 5596afab..6c151d50 100644 --- a/app/imports/ui/library/LibraryBrowser.vue +++ b/app/imports/ui/library/LibraryBrowser.vue @@ -27,10 +27,8 @@ :selected-node-id="selectedNodeId" /> - add New property + + + create + @@ -97,6 +101,13 @@ export default { } }); }, + editLibrary(_id){ + this.$store.commit('pushDialogStack', { + component: 'library-edit-dialog', + elementId: _id, + data: {_id}, + }); + }, insertLibraryNode(libraryId){ this.$store.commit('pushDialogStack', { component: 'library-node-creation-dialog', @@ -111,7 +122,12 @@ export default { } }); }, - } + }, + watch: { + expandedLibrary(value){ + console.log(value) + }, + }, } diff --git a/app/imports/ui/library/LibraryEditDialog.vue b/app/imports/ui/library/LibraryEditDialog.vue new file mode 100644 index 00000000..bc26fc38 --- /dev/null +++ b/app/imports/ui/library/LibraryEditDialog.vue @@ -0,0 +1,76 @@ + + + + +