From a5687fc461344e2c191f58cde5d67d2c2eb24588 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) --- 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 564021e0..a38c50b0 100644 --- a/src/pages/CscPagePbxDeviceDetails.vue +++ b/src/pages/CscPagePbxDeviceDetails.vue @@ -42,132 +42,136 @@ v-if="selectedTab === 'preferences'" class="col-12 column" > -
- + +
- - - - + + - - - - - - + + - - - - - - + + - - - - + + - - - + + - - - - - - - - - - - + + + + + + + + + + + +
@@ -377,12 +381,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) @@ -419,7 +428,8 @@ export default { methods: { ...mapMutations('pbxDevices', [ 'expandDevice', - 'expandDevicePreferences' + 'expandDevicePreferences', + 'collapseDevice' ]), ...mapActions('pbxDevices', [ 'setDeviceKeys', @@ -446,10 +456,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 @@ -465,18 +480,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 cdc518c6..ac556d74 100644 --- a/src/pages/CscPagePbxDevices.vue +++ b/src/pages/CscPagePbxDevices.vue @@ -308,12 +308,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', [ @@ -329,7 +330,6 @@ export default { ]), ...mapActions('pbxDevices', [ 'loadDeviceList', - 'loadDevicePreferencesList', 'createDevice', 'removeDevice' ]),