diff --git a/app/imports/ui/components/tree/TreeSearchInput.vue b/app/imports/ui/components/tree/TreeSearchInput.vue new file mode 100644 index 00000000..9c843b9a --- /dev/null +++ b/app/imports/ui/components/tree/TreeSearchInput.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/app/imports/ui/creature/character/characterSheetTabs/TreeTab.vue b/app/imports/ui/creature/character/characterSheetTabs/TreeTab.vue index c20b1051..ae2988fc 100644 --- a/app/imports/ui/creature/character/characterSheetTabs/TreeTab.vue +++ b/app/imports/ui/creature/character/characterSheetTabs/TreeTab.vue @@ -23,19 +23,11 @@ :disabled="organizeDisabled" style="flex-grow: 0; height: 32px;" /> - { - if (filter.value){ - typeFilters.push(filter.value); - } else { - // escape string - let term = filter.replace( /[-/\\^$*+?.()|[\]{}]/g, '\\$&' ); - var reg = new RegExp( '.*' + term + '.*', 'i' ); - nameFilters.push(reg) - } - }); - return {$or: [ - {type: {$in: typeFilters}}, - {name: {$in: nameFilters}}, - ]}; - }, - }, watch: { filter(filter){ if (filter) { diff --git a/app/imports/ui/creature/creatureProperties/CreaturePropertiesTree.vue b/app/imports/ui/creature/creatureProperties/CreaturePropertiesTree.vue index c3c48d81..79bce174 100644 --- a/app/imports/ui/creature/creatureProperties/CreaturePropertiesTree.vue +++ b/app/imports/ui/creature/creatureProperties/CreaturePropertiesTree.vue @@ -28,7 +28,10 @@ type: Object, default: undefined, }, - filter: Object, + filter: { + type: Object, + default: undefined, + }, group: { type: String, default: 'creatureProperties' diff --git a/app/imports/ui/library/LibraryAndNode.vue b/app/imports/ui/library/LibraryAndNode.vue index c2ad217c..aa6601db 100644 --- a/app/imports/ui/library/LibraryAndNode.vue +++ b/app/imports/ui/library/LibraryAndNode.vue @@ -25,9 +25,16 @@ class="mx-3" style="flex-grow: 0; height: 32px;" /> + @@ -52,6 +60,7 @@ :organize-mode="organize" :selected-node="selectedNode" style="overflow-y: auto; padding: 12px;" + :filter="filter" @selected="clickNode" /> @@ -82,6 +91,7 @@ import { getPropertyName } from '/imports/constants/PROPERTIES.js'; import isDarkColor from '/imports/ui/utility/isDarkColor.js'; import { assertEditPermission } from '/imports/api/sharing/sharingPermissions.js'; import getThemeColor from '/imports/ui/utility/getThemeColor.js'; +import TreeSearchInput from '/imports/ui/components/tree/TreeSearchInput.vue'; export default { components: { @@ -90,6 +100,7 @@ export default { LibraryNodeDialog, LibraryContentsContainer, InsertLibraryNodeButton, + TreeSearchInput, }, props: { selection: Boolean, @@ -101,6 +112,7 @@ export default { data(){ return { organize: false, selectedNodeId: undefined, + filter: undefined, };}, computed: { isToolbarDark(){ diff --git a/app/imports/ui/library/LibraryBrowser.vue b/app/imports/ui/library/LibraryBrowser.vue index 154ae265..8d7cd84f 100644 --- a/app/imports/ui/library/LibraryBrowser.vue +++ b/app/imports/ui/library/LibraryBrowser.vue @@ -47,6 +47,7 @@ :organize-mode="organizeMode && editPermission(library)" :edit-mode="editMode" :selected-node="selectedNode" + :filter="filter" should-subscribe @selected="e => $emit('selected', e)" /> @@ -87,6 +88,10 @@ export default { type: Object, default: undefined, }, + filter: { + type: Object, + default: undefined, + }, }, data(){ return { expandedLibrary: [], diff --git a/app/imports/ui/library/LibraryContentsContainer.vue b/app/imports/ui/library/LibraryContentsContainer.vue index efbdf49e..f30e30fb 100644 --- a/app/imports/ui/library/LibraryContentsContainer.vue +++ b/app/imports/ui/library/LibraryContentsContainer.vue @@ -38,13 +38,20 @@ TreeNodeList, }, props: { - libraryId: String, + libraryId: { + type: String, + default: undefined, + }, organizeMode: Boolean, selectedNode: { type: Object, default: undefined, }, shouldSubscribe: Boolean, + filter: { + type: Object, + default: undefined, + }, }, data(){return { slowShouldSubscribe: this.shouldSubscribe, @@ -79,7 +86,13 @@ }, libraryChildren(){ if (!this.library) return; - return nodesToTree({collection: LibraryNodes, ancestorId: this.library._id}); + return nodesToTree({ + collection: LibraryNodes, + ancestorId: this.library._id, + filter: this.filter, + includeFilteredDocAncestors: true, + includeFilteredDocDescendants: true, + }); }, }, methods: {