From 5ab34eedd5c13608ad150348dd20edac6361f186 Mon Sep 17 00:00:00 2001 From: Robert Axelsen Date: Thu, 2 Mar 2017 09:16:52 +0100 Subject: [PATCH] TT#11850 Ngcp-csc fix pbx modules filtering Fix filtering for pbx modules, and make case insensitive by default. Change-Id: I7ef721439171cdb0dc1bd4064edfa3e7fc8beebb --- app/model/GridFilters.js | 4 +- .../view/common/gridfilters/GridFilters.js | 57 ++++++++------- .../gridfilters/GridFiltersController.js | 69 +++++++++++-------- classic/src/view/main/Main.js | 2 + classic/src/view/main/MainController.js | 9 ++- .../view/pages/pbxconfig/devices/Devices.js | 5 +- .../pages/pbxconfig/devices/DevicesGrid.js | 8 --- .../src/view/pages/pbxconfig/groups/Groups.js | 1 + .../src/view/pages/pbxconfig/seats/Seats.js | 1 + .../view/pages/pbxconfig/seats/SeatsGrid.js | 7 -- resources/data/devices.json | 2 +- resources/data/gridfilters.json | 3 +- resources/data/seats.json | 20 +++--- 13 files changed, 96 insertions(+), 92 deletions(-) diff --git a/app/model/GridFilters.js b/app/model/GridFilters.js index 8a748926..33356e18 100644 --- a/app/model/GridFilters.js +++ b/app/model/GridFilters.js @@ -9,7 +9,9 @@ Ext.define('NgcpCsc.model.GridFilters', { 'missed', 'answered', 'search_term', - 'name', 'extensions', + 'name', + 'seats_extension', + 'groups_extension', 'groups', 'numbers', 'phone_devices', diff --git a/classic/src/view/common/gridfilters/GridFilters.js b/classic/src/view/common/gridfilters/GridFilters.js index 6109da4e..1a973312 100644 --- a/classic/src/view/common/gridfilters/GridFilters.js +++ b/classic/src/view/common/gridfilters/GridFilters.js @@ -139,46 +139,36 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { items: [{ flex: 1, userCls: 'small-100 big-50', - defaults: { - listeners: { - input: { - element: 'el', - fn: 'submitFilters' - } - } - }, items: [{ xtype: 'textfield', labelAlign: 'top', - bind: '{filtergrid.extensions}', - fieldLabel: Ngcp.csc.locales.filters.extension[localStorage.getItem('languageSelected')] + bind: '{filtergrid.seats_extension}', + fieldLabel: Ngcp.csc.locales.filters.extension[localStorage.getItem('languageSelected')], + listeners: { + delay: 100, + change: 'submitFilters' + } }, { xtype: 'textfield', labelAlign: 'top', bind: '{filtergrid.groups}', - fieldLabel: Ngcp.csc.locales.filters.groups[localStorage.getItem('languageSelected')] + fieldLabel: Ngcp.csc.locales.filters.groups[localStorage.getItem('languageSelected')], + listeners: { + delay: 100, + change: 'submitFilters' + } }] }, { flex: 1, userCls: 'small-100 big-50', - defaults: { - listeners: { - input: { - element: 'el', - fn: 'submitFilters' - } - } - }, items: [{ xtype: 'textfield', labelAlign: 'top', bind: '{filtergrid.numbers}', fieldLabel: Ngcp.csc.locales.filters.numbers[localStorage.getItem('languageSelected')], - input: { - listeners: { - delay: 100, - change: 'submitFilters' - } + listeners: { + delay: 100, + change: 'submitFilters' } }, { xtype: 'textfield', @@ -186,10 +176,8 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { bind: '{filtergrid.phone_devices}', fieldLabel: Ngcp.csc.locales.filters.phone_devices[localStorage.getItem('languageSelected')], listeners: { - listeners: { - delay: 100, - change: 'submitFilters' - } + delay: 100, + change: 'submitFilters' } }] }] @@ -205,6 +193,15 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { flex: 1, userCls: 'small-100 big-50', items: [{ + xtype: 'textfield', + labelAlign: 'top', + bind: '{filtergrid.groups_extension}', + fieldLabel: Ngcp.csc.locales.filters.extension[localStorage.getItem('languageSelected')], + listeners: { + delay: 100, + change: 'submitFilters' + } + }, { xtype: 'textfield', labelAlign: 'top', bind: '{filtergrid.hunt_policy}', @@ -247,11 +244,11 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFilters', { name: 'deviceCombo', displayField: 'name', valueField: 'name', // here we will use the ids most probablys - editable: false, + editable: true, bind: '{filtergrid.device}', listeners: { delay: 100, - select: 'submitFilters' + change: 'submitFilters' } }, { xtype: 'textfield', diff --git a/classic/src/view/common/gridfilters/GridFiltersController.js b/classic/src/view/common/gridfilters/GridFiltersController.js index e4f4640e..9aa84789 100644 --- a/classic/src/view/common/gridfilters/GridFiltersController.js +++ b/classic/src/view/common/gridfilters/GridFiltersController.js @@ -41,10 +41,10 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { applyFreeSearchFilter: function(record) { var vm = this.getViewModel(); - var search_term = vm.get('filtergrid.headerBarFieldInput') || ""; + var search_term = vm.get('filtergrid.headerBarFieldInput').toLowerCase() || ""; var retVal = false; Ext.Object.each(record.data, function(key, val) { - if (Ext.isString(val) && val.indexOf(search_term) > -1) { + if (Ext.isString(val) && val.toLowerCase().indexOf(search_term) > -1) { retVal = true; return; } @@ -72,9 +72,9 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { applyConvSearchFilter: function(record) { var vm = this.getViewModel(); var store = Ext.getStore('Conversations'); - var fieldInput = vm.get('filtergrid.headerBarFieldInput'); + var fieldInput = vm.get('filtergrid.headerBarFieldInput').toLowerCase(); var retVal = true; - if (fieldInput && record.get('source_cli').indexOf(fieldInput) == -1) { + if (fieldInput && record.get('source_cli').toLowerCase().indexOf(fieldInput) == -1) { retVal = false; } return retVal; @@ -83,9 +83,9 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { applyPbxSearchFilter: function(record) { var vm = this.getViewModel(); var store = Ext.getStore('Conversations'); - var fieldInput = vm.get('filtergrid.headerBarFieldInput'); + var fieldInput = vm.get('filtergrid.headerBarFieldInput').toLowerCase(); var retVal = true; - if (fieldInput && record.get('name').indexOf(fieldInput) == -1) { + if (fieldInput && record.get('name').toLowerCase().indexOf(fieldInput) == -1) { retVal = false; } return retVal; @@ -150,7 +150,7 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { var direction = [vm.get('filtergrid.incoming') ? 'incoming' : null, vm.get('filtergrid.outgoing') ? 'outgoing' : null]; var status = [vm.get('filtergrid.missed') ? 'missed' : null, vm.get('filtergrid.answered') ? 'answered' : null]; var answered = vm.get('filtergrid.answered'); - var fieldInput = vm.get('filtergrid.headerBarFieldInput'); + var fieldInput = vm.get('filtergrid.headerBarFieldInput').toLowerCase(); var types = [vm.get('filtergrid.call') ? 'call' : null, vm.get('filtergrid.voicemail') ? 'voicemail' : null, vm.get('filtergrid.sms') ? 'sms' : null, @@ -160,7 +160,7 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { if (new Date(record.get('start_time')) < new Date(fromFilter) || new Date(record.get('start_time')) > new Date(toFilter).setHours(23,59,59,999) || - fieldInput && record.get('source_cli').indexOf(fieldInput) == -1 || + fieldInput && record.get('source_cli').toLowerCase().indexOf(fieldInput) == -1 || types.length > 0 && types.indexOf(record.get('conversation_type')) == -1 || direction.length > 0 && direction.indexOf(record.get('direction')) == -1 || status.length > 0 && status.indexOf(record.get('status')) == -1 @@ -173,16 +173,16 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { applyPbxconfigSeatsFilters: function(record) { var vm = this.getViewModel(); var fieldInput = vm.get('filtergrid.headerBarFieldInput') || ""; - var extensions = vm.get('filtergrid.extensions') ? vm.get('filtergrid.extensions').split(',') : []; - var groups = vm.get('filtergrid.groups') ? vm.get('filtergrid.groups').split(',') : []; + var extension = vm.get('filtergrid.seats_extension') ? vm.get('filtergrid.seats_extension').toLowerCase().split(',') : []; + var groups = vm.get('filtergrid.groups') ? vm.get('filtergrid.groups').toLowerCase().split(',') : []; var numbers = vm.get('filtergrid.numbers') || ""; - var phone_devices = vm.get('filtergrid.phone_devices') ? vm.get('filtergrid.phone_devices').split(',') : []; + var phone_devices = vm.get('filtergrid.phone_devices') ? vm.get('filtergrid.phone_devices').toLowerCase().split(',') : []; var retVal = true; - if (fieldInput && record.get('name').indexOf(fieldInput) == -1 || - extensions.length > 0 && extensions.indexOf(record.get('extension')) == -1 || - groups.length > 0 && groups.indexOf(record.get('groups')) == -1 || - numbers && record.get('numbers').indexOf(numbers) == -1 || - phone_devices.length > 0 && phone_devices.indexOf(record.get('phone_devices')) == -1 + if (fieldInput && record.get('name').toLowerCase().indexOf(fieldInput) == -1 || + extension && record.get('extension').toLowerCase().indexOf(extension) == -1 || + groups && record.get('groups').toLowerCase().indexOf(groups) == -1 || + numbers && record.get('numbers').toLowerCase().indexOf(numbers) == -1 || + phone_devices && record.get('phone_devices').toLowerCase().indexOf(phone_devices) == -1 ) { retVal = false; } @@ -191,15 +191,15 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { applyPbxconfigGroupsFilters: function(record) { var vm = this.getViewModel(); - var fieldInput = vm.get('filtergrid.headerBarFieldInput') || ""; - var extensions = vm.get('filtergrid.extensions') ? vm.get('filtergrid.extensions').split(',') : []; - var hunt_policy = vm.get('filtergrid.hunt_policy') ? vm.get('filtergrid.hunt_policy').split(',') : []; - var hunt_timeout = vm.get('filtergrid.hunt_timeout') ? vm.get('filtergrid.hunt_timeout').split(',') : []; + var fieldInput = vm.get('filtergrid.headerBarFieldInput').toLowerCase() || ""; + var extension = vm.get('filtergrid.groups_extension') ? vm.get('filtergrid.groups_extension').toLowerCase().split(',') : []; + var hunt_policy = vm.get('filtergrid.hunt_policy') ? vm.get('filtergrid.hunt_policy').toLowerCase().split(',') : []; + var hunt_timeout = vm.get('filtergrid.hunt_timeout') ? vm.get('filtergrid.hunt_timeout').toLowerCase().split(',') : []; var retVal = true; - if (fieldInput && record.get('name').indexOf(fieldInput) == -1 || - extensions.length > 0 && extensions.indexOf(record.get('extension')) == -1 || - hunt_policy.length > 0 && hunt_policy.indexOf(record.get('hunt_policy')) == -1 || - hunt_timeout.length > 0 && hunt_timeout.indexOf(record.get('hunt_timeout')) == -1 + if (fieldInput && record.get('name').toLowerCase().indexOf(fieldInput) == -1 || + extension && record.get('extension').toLowerCase().indexOf(extension) == -1 || + hunt_policy && record.get('hunt_policy').toLowerCase().indexOf(hunt_policy) == -1 || + hunt_timeout && record.get('hunt_timeout').toLowerCase().indexOf(hunt_timeout) == -1 ) { retVal = false; } @@ -208,14 +208,14 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { applyPbxconfigDevicesFilters: function(record) { var vm = this.getViewModel(); - var fieldInput = vm.get('filtergrid.headerBarFieldInput') || ""; + var fieldInput = vm.get('filtergrid.headerBarFieldInput').toLowerCase() || ""; var deviceProfile = vm.get('filtergrid.device') || ""; var mac = vm.get('filtergrid.mac') || ""; var status = [vm.get('filtergrid.enabled') ? 'enabled' : null, vm.get('filtergrid.disabled') ? 'disabled' : null]; var retVal = true; - if (fieldInput && record.get('name').indexOf(fieldInput) == -1 || + if (fieldInput && record.get('name').toLowerCase().indexOf(fieldInput) == -1 || deviceProfile && record.get('device').indexOf(deviceProfile) == -1 || mac && record.get('mac').indexOf(mac) == -1 || status.length > 0 && status.indexOf(record.get('status')) == -1 @@ -252,7 +252,8 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { vm.set('filtergrid.answered', true); vm.set('filtergrid.search_term', ''); vm.set('filtergrid.name', ''); - vm.set('filtergrid.extensions', ''); + vm.set('filtergrid.seats_extension', ''); + vm.set('filtergrid.groups_extension', ''); vm.set('filtergrid.groups', ''); vm.set('filtergrid.phone_devices', ''); vm.set('filtergrid.enabled', true); @@ -263,7 +264,7 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { filterBySearchFieldInput: function(el) { var vm = this.getViewModel(); - var val = el.getTarget().value; + var val = el.getTarget().value.toLowerCase(); vm.set('filtergrid.headerBarFieldInput', val); if (val.length === 0) { this.resetFilters(); @@ -320,9 +321,17 @@ Ext.define('NgcpCsc.view.common.gridfilters.GridFiltersController', { vm.set('filtergrid.pbxDevicesFilterHideState', true); }, - toggleFreeSearch: function () { + toggleFreeSearch: function (pressed) { var vm = this.getViewModel(); - vm.set('freeSearchState', !vm.get('freeSearchState')); + var currentFreeSearchState = vm.get('freeSearchState'); + switch (!pressed) { + case (true): + vm.set('freeSearchState', !currentFreeSearchState); + break; + case (false): + vm.set('freeSearchState', true); + break; + }; } }); diff --git a/classic/src/view/main/Main.js b/classic/src/view/main/Main.js index b2073a2a..c93ad782 100644 --- a/classic/src/view/main/Main.js +++ b/classic/src/view/main/Main.js @@ -63,7 +63,9 @@ Ext.define('NgcpCsc.view.main.Main', { } }, { iconCls: 'x-fa fa-header', + reference: 'headerToggleButton', enableToggle: true, + pressed: false, tooltip: Ngcp.csc.locales.filters.tooltips.search_toggle[localStorage.getItem('languageSelected')], margin: '0 2 0 3', bind: { diff --git a/classic/src/view/main/MainController.js b/classic/src/view/main/MainController.js index 975d03a2..f846ff07 100644 --- a/classic/src/view/main/MainController.js +++ b/classic/src/view/main/MainController.js @@ -173,6 +173,7 @@ Ext.define('NgcpCsc.view.main.MainController', { onRouteChange: function(id) { var vm = this.getViewModel(); + var toggleButton = this.lookupReference('headerToggleButton'); this.setCurrentView(id); this.fireEvent('routeChange'); this.setSectionTitle(id); @@ -181,6 +182,10 @@ Ext.define('NgcpCsc.view.main.MainController', { } else { vm.set('headerBarFieldHideState', true); }; + if (id == 'pbxconfig/seats' || id == 'pbxconfig/groups' || id == 'pbxconfig/devices') { + this.toggleFree('pressed'); + toggleButton.setPressed(true); + }; }, setSectionTitle: function(id) { @@ -309,8 +314,8 @@ Ext.define('NgcpCsc.view.main.MainController', { this.fireEvent('toggleFilterForm'); }, - toggleFree: function() { - this.fireEvent('toggleFreeSearch'); + toggleFree: function(pressed) { + this.fireEvent('toggleFreeSearch', pressed); } }); diff --git a/classic/src/view/pages/pbxconfig/devices/Devices.js b/classic/src/view/pages/pbxconfig/devices/Devices.js index 2ff816a8..7ca43a6b 100644 --- a/classic/src/view/pages/pbxconfig/devices/Devices.js +++ b/classic/src/view/pages/pbxconfig/devices/Devices.js @@ -17,11 +17,12 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.devices.Devices', { items: [{ xtype: 'core-container', margin: Ext.os.is.Desktop ? '-5 0 0 20' : '-5 0 0 0', - width: Ext.os.is.Desktop ? 810 : '100%', - items: [{ + width: Ext.os.is.Desktop ? 810 : '100%' + ,items: [{ margin: 10, xtype: 'button', reference:'addNewBtn', + disabled: true, text: Ngcp.csc.locales.pbxconfig.add_new_group[localStorage.getItem('languageSelected')] // ,handler: 'addDevice' }] diff --git a/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js b/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js index 8300b21f..e7fe0c53 100644 --- a/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js +++ b/classic/src/view/pages/pbxconfig/devices/DevicesGrid.js @@ -32,14 +32,6 @@ Ext.define('NgcpCsc.view.pages.devices.DevicesGrid', { }, userCls: Ext.os.is.Desktop ? 'big-820' : 'small-100', - // XXX: Cvenusino: For devices, a) We need new specs from andreas, and b) - // No matter what the new specs are, we either need to use child nodes, - // and/or pull data from other endpoints/data resources for the destinations - // and positioning of the destinations data on the images. As these anyways - // depend on the specs to know 100% what we need to account for in the - // implementation, I propose we leave this module as is for this iteration, - // and await specs for new devices task. - initComponent: function() { var me = this; diff --git a/classic/src/view/pages/pbxconfig/groups/Groups.js b/classic/src/view/pages/pbxconfig/groups/Groups.js index 22c3c944..d6d7021a 100644 --- a/classic/src/view/pages/pbxconfig/groups/Groups.js +++ b/classic/src/view/pages/pbxconfig/groups/Groups.js @@ -22,6 +22,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.groups.Groups', { margin: 10, xtype: 'button', reference:'addNewBtn', + disabled: true, text: Ngcp.csc.locales.pbxconfig.add_new_group[localStorage.getItem('languageSelected')] // ,handler: 'addGroup' }] diff --git a/classic/src/view/pages/pbxconfig/seats/Seats.js b/classic/src/view/pages/pbxconfig/seats/Seats.js index f0ba2676..ced45e31 100644 --- a/classic/src/view/pages/pbxconfig/seats/Seats.js +++ b/classic/src/view/pages/pbxconfig/seats/Seats.js @@ -22,6 +22,7 @@ Ext.define('NgcpCsc.view.pages.pbxconfig.seats.Seats', { margin: 10, xtype: 'button', reference:'addNewBtn', + disabled: true, text: Ngcp.csc.locales.pbxconfig.add_new_group[localStorage.getItem('languageSelected')] // ,handler: 'addSeat' }] diff --git a/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js b/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js index 99b493c6..70ef5ed7 100644 --- a/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js +++ b/classic/src/view/pages/pbxconfig/seats/SeatsGrid.js @@ -32,13 +32,6 @@ Ext.define('NgcpCsc.view.pages.seats.SeatsGrid', { }, userCls: Ext.os.is.Desktop ? 'big-820' : 'small-100', - // XXX: Cvenusino: For seats cards, numbers and phone/devices should be in a - // list (not comma separated), and stored in data as child nodes. For this, - // we need a solution for how to best iterate over child nodes within the - // records. We had a solution for this with rowexpander and rowBodyTpl (see - // example with DevicesGrid.js in current master), but with this new rowbody - // implementation I am not sure how to tacle this. Please advice - initComponent: function() { var me = this; me.features = [{ diff --git a/resources/data/devices.json b/resources/data/devices.json index e6505720..ed5d8846 100644 --- a/resources/data/devices.json +++ b/resources/data/devices.json @@ -4,7 +4,7 @@ "name":"Device1", "device": "Cisco Pbx 1", "mac":"00-14-22-01-23-41", - "status": "enabled", + "status": "disabled", "image": "/resources/images/pbx.png", "destinations": [{ "name": "destination1", diff --git a/resources/data/gridfilters.json b/resources/data/gridfilters.json index d20b462a..e5fbd596 100644 --- a/resources/data/gridfilters.json +++ b/resources/data/gridfilters.json @@ -18,7 +18,8 @@ "search_term": "", /* Pbx config filters */ "name": "", - "extensions": "", + "seats_extension": "", + "groups_extension": "", "groups": "", "numbers": "", "phone_devices": "", diff --git a/resources/data/seats.json b/resources/data/seats.json index 1d7ce262..e7cff75e 100644 --- a/resources/data/seats.json +++ b/resources/data/seats.json @@ -4,28 +4,28 @@ "name": "Seat1", "extension": "ext1", "groups": "group2", - "numbers": "123, 345, 789", + "numbers": "345, 789", "phone_devices": "dev1" },{ "id" : 2, - "name":"Seat2", + "name": "Seat2", "extension": "ext2", - "groups":"group3", - "numbers": "123, 345, 789", + "groups": "group3", + "numbers": "123", "phone_devices": "dev3" }, { "id" : 3, - "name":"Seat3", + "name": "Seat3", "extension": "ext3", - "groups":"group4", - "numbers": "123, 345, 789", + "groups": "group4", + "numbers": "421", "phone_devices": "dev2" }, { "id" : 4, - "name":"Seat4", + "name": "Seat4", "extension": "ext4", - "groups":"group4", - "numbers": "123, 345, 789", + "groups": "group4", + "numbers": "444, 123, 954", "phone_devices": "dev4" }] }