diff --git a/app/imports/api/creature/Creatures.js b/app/imports/api/creature/Creatures.js index 92f031f7..c125ebe8 100644 --- a/app/imports/api/creature/Creatures.js +++ b/app/imports/api/creature/Creatures.js @@ -4,6 +4,8 @@ import ColorSchema from '/imports/api/properties/subSchemas/ColorSchema.js'; import SharingSchema from '/imports/api/sharing/SharingSchema.js'; import {assertEditPermission, assertOwnership} from '/imports/api/sharing/sharingPermissions.js'; +import '/imports/api/creature/removeCreature.js'; + //set up the collection for creatures Creatures = new Mongo.Collection('creatures'); diff --git a/app/imports/api/creature/removeCreature.js b/app/imports/api/creature/removeCreature.js index 2964bfbf..aee7fe09 100644 --- a/app/imports/api/creature/removeCreature.js +++ b/app/imports/api/creature/removeCreature.js @@ -1,14 +1,10 @@ import SimpleSchema from 'simpl-schema'; import Creatures from '/imports/api/creature/Creatures.js'; -import creatureCollections from '/imports/api/creature/creatureCollections.js'; +import CreatureProperties from '/imports/api/creature/CreatureProperties.js' import { assertOwnership } from '/imports/api/creature/creaturePermissions.js'; function removeRelatedDocuments(charId){ - creatureCollections.forEach(collection => { - collection.remove({charId}, error => { - if (error) console.error(error); - }); - }); + CreatureProperties.remove({'ancestors.id': charId}); }; const removeCreature = new ValidatedMethod({ diff --git a/app/imports/api/sharing/sharingPermissions.js b/app/imports/api/sharing/sharingPermissions.js index 91a47f56..84162fe7 100644 --- a/app/imports/api/sharing/sharingPermissions.js +++ b/app/imports/api/sharing/sharingPermissions.js @@ -22,7 +22,7 @@ export function assertOwnership(doc, userId){ return true; } else { throw new Meteor.Error("Permission denied", - `You are not the owner of this doc`); + `You are not the owner of this document`); } } diff --git a/app/imports/server/publications/users.js b/app/imports/server/publications/users.js index 5ac7d962..cf50d698 100644 --- a/app/imports/server/publications/users.js +++ b/app/imports/server/publications/users.js @@ -10,7 +10,7 @@ Meteor.publish("user", function(){ }); Meteor.publish("userPublicProfiles", function(ids){ - if (!this.userId || !ids) return []; + if (!this.userId || !Array.isArray(ids)) return []; return Meteor.users.find({ _id: {$in: ids} },{ diff --git a/app/imports/ui/creature/character/CharacterDeleteDialog.vue b/app/imports/ui/creature/character/CharacterDeleteDialog.vue new file mode 100644 index 00000000..f670c747 --- /dev/null +++ b/app/imports/ui/creature/character/CharacterDeleteDialog.vue @@ -0,0 +1,66 @@ + + + + Delete Character + + + + Type "{{name}}" to permanenetly delete the character + + + Delete forever + + + Cancel + + + + + + diff --git a/app/imports/ui/creature/character/CharacterSheet.vue b/app/imports/ui/creature/character/CharacterSheet.vue index 66dfcef2..7514384c 100644 --- a/app/imports/ui/creature/character/CharacterSheet.vue +++ b/app/imports/ui/creature/character/CharacterSheet.vue @@ -121,7 +121,13 @@ }); }, deleteCharacter(){ - console.log('todo'); + this.$store.commit('pushDialogStack', { + component: 'character-delete-dialog', + elementId: 'creature-menu', + data: { + id: this.creatureId, + }, + }); }, isDarkColor, }, diff --git a/app/imports/ui/dialogStack/DialogComponentIndex.js b/app/imports/ui/dialogStack/DialogComponentIndex.js index 520f61fe..0f999733 100644 --- a/app/imports/ui/dialogStack/DialogComponentIndex.js +++ b/app/imports/ui/dialogStack/DialogComponentIndex.js @@ -2,6 +2,7 @@ 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' @@ -18,6 +19,7 @@ export default { AttributeDialogContainer, AttributeCreationDialog, CreatureFormDialog, + CharacterDeleteDialog, CreaturePropertyCreationDialog, CreaturePropertyDialog, CreaturePropertyFromLibraryDialog, diff --git a/app/imports/ui/sharing/ShareDialog.vue b/app/imports/ui/sharing/ShareDialog.vue index 042f95da..8912be19 100644 --- a/app/imports/ui/sharing/ShareDialog.vue +++ b/app/imports/ui/sharing/ShareDialog.vue @@ -41,6 +41,11 @@ + Done @@ -105,7 +110,6 @@ export default { model(){ if (!this.docRef || !this.docRef.id) return; let model = fetchDocByRef(this.docRef); - console.log({model}) return model; }, readers(){
+ Type "{{name}}" to permanenetly delete the character +