From 518880fa5c103aa287fc7dc0fdb383dfe1275645 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Fri, 27 Aug 2021 12:24:01 +0200 Subject: [PATCH] Fixed error where searching for properties to insert while having other properties selected could prevent any insert from happening at all --- .../methods/insertPropertyFromLibraryNode.js | 10 +++++- .../server/publications/searchLibraryNodes.js | 36 +++++++++++++++++++ .../creature/character/CharacterSheetFab.vue | 2 +- .../AddCreaturePropertyDialog.vue | 3 ++ app/package-lock.json | 2 +- 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/app/imports/api/creature/creatureProperties/methods/insertPropertyFromLibraryNode.js b/app/imports/api/creature/creatureProperties/methods/insertPropertyFromLibraryNode.js index 0d05f29d..39d410c0 100644 --- a/app/imports/api/creature/creatureProperties/methods/insertPropertyFromLibraryNode.js +++ b/app/imports/api/creature/creatureProperties/methods/insertPropertyFromLibraryNode.js @@ -93,7 +93,15 @@ function insertPropertyFromNode(nodeId, ancestors, order){ _id: nodeId, removed: {$ne: true}, }); - if (!node) throw `Node not found for nodeId: ${nodeId}`; + if (!node) { + if (Meteor.isClient) return; + else { + throw new Meteor.Error( + 'Insert property from library failed', + `No library document with id '${nodeId}' was found` + ); + } + } let oldParent = node.parent; let nodes = LibraryNodes.find({ 'ancestors.id': nodeId, diff --git a/app/imports/server/publications/searchLibraryNodes.js b/app/imports/server/publications/searchLibraryNodes.js index 79f1912e..88d7e678 100644 --- a/app/imports/server/publications/searchLibraryNodes.js +++ b/app/imports/server/publications/searchLibraryNodes.js @@ -1,6 +1,42 @@ import { check } from 'meteor/check'; import Libraries from '/imports/api/library/Libraries.js'; import LibraryNodes from '/imports/api/library/LibraryNodes.js'; +import { assertViewPermission } from '/imports/api/sharing/sharingPermissions.js'; + +Meteor.publish('selectedLibraryNodes', function(selectedNodeIds){ + console.log('attempting selectedLibraryNodes') + check(selectedNodeIds, Array); + // Limit to 20 selected nodes + if (selectedNodeIds.length > 20){ + selectedNodeIds = selectedNodeIds.slice(0, 20); + } + let libraryViewPermissions = {}; + // Check view permissions of all libraries + for (let id of selectedNodeIds){ + let node = LibraryNodes.findOne(id); + if (!node) continue; + let libraryId = node.ancestors[0].id; + if (libraryViewPermissions[id]){ + continue; + } else { + let library = Libraries.findOne(libraryId, {fields: { + owner: 1, + readers: 1, + writers: 1, + public: 1, + }}); + assertViewPermission(library, this.userId); + libraryViewPermissions[id] = true; + } + } + // Return all nodes and their children + return [LibraryNodes.find({ + $or: [ + {_id: {$in: selectedNodeIds}}, + {'ancestors.id': {$in: selectedNodeIds}}, + ], + })]; +}); Meteor.publish('searchLibraryNodes', function(){ let self = this; diff --git a/app/imports/ui/creature/character/CharacterSheetFab.vue b/app/imports/ui/creature/character/CharacterSheetFab.vue index 721f9811..13948fca 100644 --- a/app/imports/ui/creature/character/CharacterSheetFab.vue +++ b/app/imports/ui/creature/character/CharacterSheetFab.vue @@ -144,7 +144,7 @@ meteor: { hideSpellsTab(){ let creature = Creatures.findOne(this.creatureId); - return creature?.settings.hideSpellsTab; + return creature?.settings?.hideSpellsTab; }, }, methods: { diff --git a/app/imports/ui/creature/creatureProperties/AddCreaturePropertyDialog.vue b/app/imports/ui/creature/creatureProperties/AddCreaturePropertyDialog.vue index 0929f4b8..c7c4b7e0 100644 --- a/app/imports/ui/creature/creatureProperties/AddCreaturePropertyDialog.vue +++ b/app/imports/ui/creature/creatureProperties/AddCreaturePropertyDialog.vue @@ -298,6 +298,9 @@ meteor: { '$subscribe':{ 'searchLibraryNodes': [], + 'selectedLibraryNodes'(){ + return [this.selectedNodeIds]; + }, }, showPropertyHelp(){ let user = Meteor.user(); diff --git a/app/package-lock.json b/app/package-lock.json index 68d9f103..055c293f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -2735,7 +2735,7 @@ }, "signal-exit": { "version": "3.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simpl-schema": {