From 307252da12c9155c9d8eba24ac5ceff927f13f49 Mon Sep 17 00:00:00 2001 From: Sergii Leonenko Date: Fri, 6 Nov 2020 12:08:52 +0200 Subject: [PATCH] TT#92007 and #96801 CSC: As a Customer, I want to filter PBXDevice by Extension and Username (Seat assigned as Private Line) AC: Can filter by extension Can filter by Username (Seat assigned as Private Line) Can select filter criteria from criteria selection Can see the right input component according to this criteria Change-Id: I6f35098854a866fe2b7de68d17570582dc693340 --- src/api/pbx-devices.js | 39 ++++++++++--------- .../PbxConfiguration/CscPbxDeviceFilters.vue | 26 ++++++++++--- src/pages/CscPagePbxDevices.vue | 24 +++--------- src/store/pbx-devices.js | 8 +--- 4 files changed, 49 insertions(+), 48 deletions(-) diff --git a/src/api/pbx-devices.js b/src/api/pbx-devices.js index d324466d..6fbcd79d 100644 --- a/src/api/pbx-devices.js +++ b/src/api/pbx-devices.js @@ -29,29 +29,32 @@ export function getDevices (options) { export function getDeviceList (options) { return new Promise((resolve, reject) => { + const filters = options.filters || {} + // normalize filters + Object.keys(filters).forEach(key => { + let value = filters[key] + if (value === null || value === undefined || value === '') { + delete filters[key] + } else { + switch (key) { + case 'profile_id': + value = String(value) + break + case 'identifier': + case 'station_name': + value = '*' + value + '*' + break + } + filters[key] = value + } + }) + const params = { page: options.page, - profile_id: options.profile_id, - identifier: options.identifier, - station_name: options.station_name, + ...filters, order_by: PBX_CONFIG_ORDER_BY, order_by_direction: PBX_CONFIG_ORDER_DIRECTION } - if (params.profile_id === null || params.profile_id === undefined || params.profile_id === '') { - delete params.profile_id - } else { - params.profile_id = String(params.profile_id) - } - if (params.identifier === null || params.identifier === undefined || params.identifier === '') { - delete params.identifier - } else { - params.identifier = '*' + params.identifier + '*' - } - if (params.station_name === null || params.station_name === undefined || params.station_name === '') { - delete params.station_name - } else { - params.station_name = '*' + params.station_name + '*' - } getDevices({ params: params }).then((devices) => { diff --git a/src/components/pages/PbxConfiguration/CscPbxDeviceFilters.vue b/src/components/pages/PbxConfiguration/CscPbxDeviceFilters.vue index 1f9a872f..d85e3c42 100644 --- a/src/components/pages/PbxConfiguration/CscPbxDeviceFilters.vue +++ b/src/components/pages/PbxConfiguration/CscPbxDeviceFilters.vue @@ -18,7 +18,7 @@ class="col-xs-12 col-md-2" > { let filterDisplayValue = filterItem.value - if (filterItem.name === 'profileFilter') { + if (filterItem.name === 'profile_id') { filterDisplayValue = this.deviceProfileMap[filterItem.value].name } return { @@ -171,6 +179,12 @@ export default { this.filters.forEach(filter => { params[filter.name] = filter.value }) + + // a special fix because of q-select behaviour. it stores 0 for empty selection + if (!params.profile_id) { + delete params.profile_id + } + this.$emit('filter', params) } } diff --git a/src/pages/CscPagePbxDevices.vue b/src/pages/CscPagePbxDevices.vue index a1a0fd06..ef4d369d 100644 --- a/src/pages/CscPagePbxDevices.vue +++ b/src/pages/CscPagePbxDevices.vue @@ -176,9 +176,7 @@ export default { }, data () { return { - stationNameFilter: null, - identifierFilter: null, - profileFilter: null, + filters: {}, filtersEnabled: false } }, @@ -222,9 +220,7 @@ export default { 'getDeviceRemovalToastMessage' ]), hasFilters () { - return this.stationNameFilter !== null || - this.identifierFilter !== null || - this.profileFilter !== null + return Object.keys(this.filters).length > 0 } }, watch: { @@ -282,9 +278,7 @@ export default { loadDeviceListItemsFiltered (page) { this.loadDeviceListItems({ page: page || 1, - stationNameFilter: this.stationNameFilter, - identifierFilter: this.identifierFilter, - profileFilter: this.profileFilter + filters: this.filters }) }, enableAddForm () { @@ -296,9 +290,7 @@ export default { this.disableDeviceAddForm() }, applyFilter (filterData) { - this.stationNameFilter = filterData.stationNameFilter - this.identifierFilter = filterData.identifierFilter - this.profileFilter = filterData.profileFilter ? Number(filterData.profileFilter) : null + this.filters = filterData this.loadDeviceListItemsFiltered() }, closeFilters () { @@ -306,12 +298,8 @@ export default { this.resetFilters() }, resetFilters () { - if (this.stationNameFilter !== null || - this.identifierFilter !== null || - this.profileFilter !== null) { - this.stationNameFilter = null - this.identifierFilter = null - this.profileFilter = null + if (this.hasFilters) { + this.filters = {} this.loadDeviceListItemsFiltered() } }, diff --git a/src/store/pbx-devices.js b/src/store/pbx-devices.js index 7bcc34c2..5d7e3426 100644 --- a/src/store/pbx-devices.js +++ b/src/store/pbx-devices.js @@ -204,9 +204,7 @@ export default { return new Promise((resolve, reject) => { const page = _.get(options, 'page', context.state.deviceListCurrentPage) const clearList = _.get(options, 'clearList', true) - const stationNameFilter = _.get(options, 'stationNameFilter', null) - const identifierFilter = _.get(options, 'identifierFilter', null) - const profileFilter = _.get(options, 'profileFilter', null) + const filters = _.get(options, 'filters', {}) context.commit('deviceListItemsRequesting', { clearList: clearList }) @@ -215,9 +213,7 @@ export default { }).then(() => { return getDeviceList({ page: page, - station_name: stationNameFilter, - identifier: identifierFilter, - profile_id: profileFilter + filters }) }).then((devices) => { context.commit('deviceListItemsSucceeded', {