From a465c58bd83811302fe5477917a574f17b052976 Mon Sep 17 00:00:00 2001 From: Debora Crescenzo Date: Mon, 1 Jun 2026 16:08:40 +0100 Subject: [PATCH] MT#65163 Improve device page performance and handle missing preferences * Fix device detail form not rendering on page 2+ by adding a watcher for reactive data updates * Add loading spinner while device preferences are loading * Remove unused loadDevicePreferencesList call from list page mount Change-Id: Icc0318126303763d5eab3a39568817a2c41e88e8 (cherry picked from commit 554466657a9f98e2c6187b31644b289a0ce38110) (cherry picked from commit 0531235a667b0acba534d4a0c152ca36d6f33961) --- src/pages/CscPagePbxDeviceDetails.vue | 283 ++++++++++++++------------ src/pages/CscPagePbxDevices.vue | 8 +- 2 files changed, 154 insertions(+), 137 deletions(-) diff --git a/src/pages/CscPagePbxDeviceDetails.vue b/src/pages/CscPagePbxDeviceDetails.vue index 7914e46b..5893f1b1 100644 --- a/src/pages/CscPagePbxDeviceDetails.vue +++ b/src/pages/CscPagePbxDeviceDetails.vue @@ -42,132 +42,136 @@ v-if="selectedTab === 'preferences'" class="col-12 column" > -
- + +
- - - - + + - - - - - - + + - - - - - - + + - - - - + + - - - + + - - - - - - - - - - - + + + + + + + + + + + +
@@ -374,12 +378,17 @@ export default { $route: { async handler (to) { this.id = to.params.id + this.changes = null + this.collapseDevice() await this.getData(this.id) } }, deviceSelected () { this.changes = this.getDeviceData() }, + devicePreferencesSelected () { + this.changes = this.getDeviceData() + }, deviceUpdateState (state) { if (state === RequestState.succeeded) { showToast(this.getDeviceUpdateToastMessage) @@ -416,7 +425,8 @@ export default { methods: { ...mapMutations('pbxDevices', [ 'expandDevice', - 'expandDevicePreferences' + 'expandDevicePreferences', + 'collapseDevice' ]), ...mapActions('pbxDevices', [ 'setDeviceKeys', @@ -443,10 +453,15 @@ export default { await this.loadDevice(deviceId) } - const deviceProfileId = this.deviceMapById[deviceId].profile_id + const device = this.deviceMapById[deviceId] + if (!device) { + return + } + + const deviceProfileId = device.profile_id const deviceProfile = this.deviceProfileMap[deviceProfileId] - if (deviceProfile.device_id) { + if (deviceProfile && deviceProfile.device_id) { await this.loadDeviceModel({ type: 'all', deviceId: deviceProfile.device_id @@ -462,18 +477,20 @@ export default { this.loadSubscribers() }, getDeviceData () { - return (this.deviceSelected && this.devicePreferencesSelected) - ? { - station_name: this.deviceSelected.station_name, - identifier: this.deviceSelected.identifier, - profile_id: this.deviceSelected.profile_id, - admin_name: this.devicePreferencesSelected.admin_name ? this.devicePreferencesSelected.admin_name : undefined, - admin_pass: this.devicePreferencesSelected.admin_pass ? this.devicePreferencesSelected.admin_pass : undefined, - web_gui_dis: this.devicePreferencesSelected.web_gui_dis ? this.devicePreferencesSelected.web_gui_dis : false, - user_conf_priority: this.devicePreferencesSelected.user_conf_priority ? this.devicePreferencesSelected.user_conf_priority : false, - FW_upg_dis: this.devicePreferencesSelected.FW_upg_dis ? this.devicePreferencesSelected.FW_upg_dis : false - } - : null + if (!this.deviceSelected) { + return null + } + + return { + station_name: this.deviceSelected.station_name, + identifier: this.deviceSelected.identifier, + profile_id: this.deviceSelected.profile_id, + admin_name: this.devicePreferencesSelected?.admin_name || undefined, + admin_pass: this.devicePreferencesSelected?.admin_pass || undefined, + web_gui_dis: this.devicePreferencesSelected?.web_gui_dis || false, + user_conf_priority: this.devicePreferencesSelected?.user_conf_priority || false, + FW_upg_dis: this.devicePreferencesSelected?.FW_upg_dis || false + } }, resetStationName () { this.changes.station_name = this.deviceSelected?.station_name diff --git a/src/pages/CscPagePbxDevices.vue b/src/pages/CscPagePbxDevices.vue index 8785c620..0bb3e915 100644 --- a/src/pages/CscPagePbxDevices.vue +++ b/src/pages/CscPagePbxDevices.vue @@ -302,12 +302,13 @@ export default { } }, async created () { - await this.loadProfiles() + if (this.deviceProfileList.length === 0) { + await this.loadProfiles() + } }, mounted () { this.$scrollTo(this.$parent.$el) - this.loadDeviceListFiltered() - this.loadDevicePreferencesList() + this.loadDeviceListFiltered(this.deviceListCurrentPage || 1) }, methods: { ...mapActions('pbx', [ @@ -323,7 +324,6 @@ export default { ]), ...mapActions('pbxDevices', [ 'loadDeviceList', - 'loadDevicePreferencesList', 'createDevice', 'removeDevice' ]),