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', {