From 9289e40a4e32fc0f9a41dea6674ac8b2a2e4d313 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Tue, 29 Nov 2016 10:03:51 +0500 Subject: Improve Notifications handling --- web/app/model/Notification.js | 8 ++++++++ web/app/view/Notifications.js | 10 --------- web/app/view/NotificationsController.js | 36 ++++++++++----------------------- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/web/app/model/Notification.js b/web/app/model/Notification.js index 1e6c36c5..04dca9bf 100644 --- a/web/app/model/Notification.js +++ b/web/app/model/Notification.js @@ -30,5 +30,13 @@ Ext.define('Traccar.model.Notification', { type: 'int' }, { name: 'attributes' + }, { + name: 'attributes.web', + type: 'bool', + mapping: 'attributes.web' + }, { + name: 'attributes.mail', + type: 'bool', + mapping: 'attributes.mail' }] }); diff --git a/web/app/view/Notifications.js b/web/app/view/Notifications.js index 250a6b5f..795cf326 100644 --- a/web/app/view/Notifications.js +++ b/web/app/view/Notifications.js @@ -51,24 +51,14 @@ Ext.define('Traccar.view.Notifications', { dataIndex: 'attributes.web', xtype: 'checkcolumn', listeners: { - beforeCheckChange: 'onBeforeCheckChange', checkChange: 'onCheckChange' - }, - renderer: function (value, metaData, record) { - var fields = this.dataIndex.split('\.', 2); - return (new Ext.ux.CheckColumn()).renderer(record.get(fields[0])[fields[1]], metaData); } }, { text: Strings.notificationMail, dataIndex: 'attributes.mail', xtype: 'checkcolumn', listeners: { - beforeCheckChange: 'onBeforeCheckChange', checkChange: 'onCheckChange' - }, - renderer: function (value, metaData, record) { - var fields = this.dataIndex.split('\.', 2); - return (new Ext.ux.CheckColumn()).renderer(record.get(fields[0])[fields[1]], metaData); } }] } diff --git a/web/app/view/NotificationsController.js b/web/app/view/NotificationsController.js index 70b99f1b..ec9be56f 100644 --- a/web/app/view/NotificationsController.js +++ b/web/app/view/NotificationsController.js @@ -28,22 +28,14 @@ Ext.define('Traccar.view.NotificationsController', { this.getView().getStore().load({ scope: this, callback: function (records, operation, success) { - var notificationsStore = Ext.create('Traccar.store.Notifications'); - notificationsStore.load({ + Ext.create('Traccar.store.Notifications').load({ params: { userId: this.userId }, scope: this, callback: function (records, operation, success) { - var i, index, attributes, storeRecord; if (success) { - for (i = 0; i < records.length; i++) { - index = this.getView().getStore().findExact('type', records[i].get('type')); - attributes = records[i].get('attributes'); - storeRecord = this.getView().getStore().getAt(index); - storeRecord.set('attributes', attributes); - storeRecord.commit(); - } + this.getView().getStore().loadData(records); } } }); @@ -51,29 +43,23 @@ Ext.define('Traccar.view.NotificationsController', { }); }, - onBeforeCheckChange: function (column, rowIndex, checked, eOpts) { - var fields, record, data; - fields = column.dataIndex.split('\.', 2); + onCheckChange: function (column, rowIndex, checked, eOpts) { + var record, attributes; record = this.getView().getStore().getAt(rowIndex); - data = record.get(fields[0]); - if (!data[fields[1]]) { - data[fields[1]] = 'true'; - } else { - delete data[fields[1]]; + attributes = {}; + if (record.get('attributes.web')) { + attributes.web = 'true'; + } + if (record.get('attributes.mail')) { + attributes.mail = 'true'; } - record.set(fields[0], data); - record.commit(); - }, - - onCheckChange: function (column, rowIndex, checked, eOpts) { - var record = this.getView().getStore().getAt(rowIndex); Ext.Ajax.request({ scope: this, url: 'api/users/notifications', jsonData: { userId: this.userId, type: record.get('type'), - attributes: record.get('attributes') + attributes: attributes }, callback: function (options, success, response) { if (!success) { -- cgit v1.2.3