From a34fac50b0ca0cbb011d5d2dbb43c84010a31797 Mon Sep 17 00:00:00 2001 From: Rishabh Date: Fri, 13 Aug 2021 13:42:16 +0530 Subject: [PATCH] Added custom filter operators for filtering UI refs https://github.com/TryGhost/Team/issues/943 - adds custom operators for each filter based on type - adds `name or email` filter for `contains` search on name or email --- .../app/components/gh-members-filter-labs.hbs | 2 +- .../app/components/gh-members-filter-labs.js | 112 ++++++++++++++---- ghost/admin/app/controllers/members.js | 10 +- 3 files changed, 102 insertions(+), 22 deletions(-) diff --git a/ghost/admin/app/components/gh-members-filter-labs.hbs b/ghost/admin/app/components/gh-members-filter-labs.hbs index 7f61262612..88eb20ac32 100644 --- a/ghost/admin/app/components/gh-members-filter-labs.hbs +++ b/ghost/admin/app/components/gh-members-filter-labs.hbs @@ -36,7 +36,7 @@ { - if (filter.type === 'label') { - const relationStr = filter.relation === 'is-not' ? '-' : ''; - const filterValue = '[' + filter.value.join(',') + ']'; - query += `${filter.type}:${relationStr}${filterValue}+`; - } else { - const relationStr = filter.relation === 'is-not' ? '-' : ''; - const filterValue = filter.value.includes(' ') ? `'${filter.value}'` : filter.value; - query += `${filter.type}:${relationStr}${filterValue}+`; + if (filter.value && !['name_email'].includes(filter.type)) { + if (filter.type === 'label') { + const relationStr = filter.relation === 'is-not' ? '-' : ''; + const filterValue = '[' + filter.value.join(',') + ']'; + query += `${filter.type}:${relationStr}${filterValue}+`; + } else { + const relationStr = filter.relation === 'is-not' ? '-' : ''; + const filterValue = filter.value.includes(' ') ? `'${filter.value}'` : filter.value; + query += `${filter.type}:${relationStr}${filterValue}+`; + } } }); return query.slice(0, -1); @@ -94,7 +164,9 @@ export default class GhMembersFilterLabsComponent extends Component { setFilterType(filterId, newType) { const filterToEdit = this.filters.findBy('id', filterId); filterToEdit.set('type', newType); - filterToEdit.set('value', ''); + filterToEdit.set('relationOptions', this.availableFilterRelationsOptions[newType]); + const defaultValue = this.availableFilterValueOptions[newType] ? this.availableFilterValueOptions[newType][0].name : ''; + filterToEdit.set('value', defaultValue); } @action diff --git a/ghost/admin/app/controllers/members.js b/ghost/admin/app/controllers/members.js index b374d44f9d..d5520f7b17 100644 --- a/ghost/admin/app/controllers/members.js +++ b/ghost/admin/app/controllers/members.js @@ -213,8 +213,16 @@ export default class MembersController extends Controller { @action applyFilter(filterStr, filters) { - this.filters = filters; + this.filters = filters.filter((filter) => { + return filter.type !== 'name_email'; + }); this.filterParam = filterStr || null; + this.searchParam = null; + filters.forEach((filter) => { + if (filter.type === 'name_email' && filter.value) { + this.searchParam = filter.value; + } + }); } @action