From 532217be124e80a8c9324a1c414d81cd39f02422 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Sun, 10 Apr 2022 17:57:51 +0200 Subject: [PATCH] Support for filtering entities by search string --- .../src/components/panels/Entities/Index.vue | 9 +++--- .../components/panels/Entities/Selector.vue | 32 +++++++++++++++++-- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/platypush/backend/http/webapp/src/components/panels/Entities/Index.vue b/platypush/backend/http/webapp/src/components/panels/Entities/Index.vue index 59f63be17..9cbf97bce 100644 --- a/platypush/backend/http/webapp/src/components/panels/Entities/Index.vue +++ b/platypush/backend/http/webapp/src/components/panels/Entities/Index.vue @@ -95,7 +95,9 @@ export default { ([grouping, entities]) => { return { name: grouping, - entities: entities, + entities: entities.filter( + (e) => e.id in this.selector.selectedEntities + ), } } ) @@ -190,10 +192,7 @@ export default { padding: $main-margin 0; display: flex; break-inside: avoid; - - @include from($tablet) { - padding: $main-margin; - } + padding: $main-margin; .frame { max-height: calc(100% - #{2 * $main-margin}); diff --git a/platypush/backend/http/webapp/src/components/panels/Entities/Selector.vue b/platypush/backend/http/webapp/src/components/panels/Entities/Selector.vue index 3d737ae07..2e25052a5 100644 --- a/platypush/backend/http/webapp/src/components/panels/Entities/Selector.vue +++ b/platypush/backend/http/webapp/src/components/panels/Entities/Selector.vue @@ -17,6 +17,10 @@ @click.stop="toggleGroup(g)" /> + +
+ +
@@ -47,6 +51,7 @@ export default { data() { return { selectedGroups: {}, + searchTerm: '', } }, @@ -70,9 +75,22 @@ export default { }, selectedEntities() { - return Object.values(this.entityGroups.id).filter((entity) => - !!this.selectedGroups[entity[this.value?.grouping]] - ).reduce((obj, entity) => { + return Object.values(this.entityGroups.id).filter((entity) => { + if (!this.selectedGroups[entity[this.value?.grouping]]) + return false + + if (this.searchTerm?.length) { + const searchTerm = this.searchTerm.toLowerCase() + return ( + ((entity.name || '').toLowerCase()).indexOf(searchTerm) >= 0 || + ((entity.plugin || '').toLowerCase()).indexOf(searchTerm) >= 0 || + ((entity.external_id || '').toLowerCase()).indexOf(searchTerm) >= 0 || + (entity.id || 0).toString() == searchTerm + ) + } + + return true + }).reduce((obj, entity) => { obj[entity.id] = entity return obj }, {}) @@ -103,6 +121,13 @@ export default { this.$emit('input', value) }, + updateSearchTerm() { + const value = {...this.value} + value.searchTerm = this.searchTerm + value.selectedEntities = this.selectedEntities + this.$emit('input', value) + }, + resetGroupFilter() { this.selectedGroups = Object.keys( this.entityGroups[this.value?.grouping] || {} @@ -138,6 +163,7 @@ export default { mounted() { this.resetGroupFilter() this.$watch(() => this.value?.grouping, this.resetGroupFilter) + this.$watch(() => this.searchTerm, this.updateSearchTerm) this.$watch(() => this.entityGroups, this.resetGroupFilter) }, }