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