From d8fea567a345ec22e9f0f7596bc578db334fb08f Mon Sep 17 00:00:00 2001
From: paulr34 <64710345+paulr34@users.noreply.github.com>
Date: Mon, 17 Apr 2023 16:50:49 -0400
Subject: [PATCH] Error message fix for loading new ZAP file (#997)

* Fixing error message when loading a .zap file meant for a newer version of ZAP

* 1.) Adding button which allows the user to close the notification. 2.)Editing the code so the notification only shows for the relevant session. 3.) Taking out Notification button color changing because it needs to be redesigned
---
 src-electron/ide-integration/studio-rest-api.ts | 16 +++++++++-------
 src-electron/rest/file-ops.js                   |  4 +++-
 src-electron/server/http-server.js              |  2 +-
 src/boot/ws.js                                  |  4 ++--
 src/layouts/ZclConfiguratorLayout.vue           | 17 -----------------
 5 files changed, 15 insertions(+), 28 deletions(-)

diff --git a/src-electron/ide-integration/studio-rest-api.ts b/src-electron/ide-integration/studio-rest-api.ts
index 56a6fe5b..e79bc4db 100644
--- a/src-electron/ide-integration/studio-rest-api.ts
+++ b/src-electron/ide-integration/studio-rest-api.ts
@@ -295,18 +295,20 @@ async function sendUcComponentStateReport(db: dbTypes.DbType) {
  * Notify front-end that current session failed to load.
  * @param {} err
  */
-function sendSessionCreationErrorStatus(db: dbTypes.DbType, err: string) {
+function sendSessionCreationErrorStatus(db: dbTypes.DbType, err: string, sessionId: number) {
   // TODO: delegate type declaration to actual function
   querySession
     .getAllSessions(db)
     .then((sessions: dbMappingTypes.SessionType[]) =>
       sessions.forEach((session) => {
-        let socket = wsServer.clientSocket(session.sessionKey)
-        if (socket) {
-          wsServer.sendWebSocketMessage(socket, {
-            category: dbEnum.wsCategory.sessionCreationError,
-            payload: err,
-          })
+        if(session.sessionId == sessionId){
+          let socket = wsServer.clientSocket(session.sessionKey)
+          if (socket) {
+            wsServer.sendWebSocketMessage(socket, {
+              category: dbEnum.wsCategory.sessionCreationError,
+              payload: err,
+            })
+          }
         }
       })
     )
diff --git a/src-electron/rest/file-ops.js b/src-electron/rest/file-ops.js
index f34ebb8b..47fb9084 100644
--- a/src-electron/rest/file-ops.js
+++ b/src-electron/rest/file-ops.js
@@ -28,6 +28,7 @@ const exportJs = require('../importexport/export.js')
 const path = require('path')
 const { StatusCodes } = require('http-status-codes')
 const querySession = require('../db/query-session.js')
+const queryNotification = require('../db/query-notification.js')
 const dbEnum = require('../../src-shared/db-enum.js')
 const studio = require('../ide-integration/studio-rest-api')
 
@@ -81,7 +82,8 @@ function httpPostFileOpen(db) {
           message: e.message,
           stack: e.stack,
         }
-        studio.sendSessionCreationErrorStatus(db, errMsg)
+        queryNotification.setNotification(db, "ERROR", errMsg.message, req.zapSessionId, 1)
+        studio.sendSessionCreationErrorStatus(db, errMsg.message, req.zapSessionId)
         env.logError(e.message)
         res.status(StatusCodes.INTERNAL_SERVER_ERROR).json(errMsg)
       }
diff --git a/src-electron/server/http-server.js b/src-electron/server/http-server.js
index f81f0223..7bac22fc 100644
--- a/src-electron/server/http-server.js
+++ b/src-electron/server/http-server.js
@@ -229,7 +229,7 @@ function userSessionHandler(db, options) {
             error: 'Could not create session: ' + err.message,
             errorMessage: err,
           }
-          studio.sendSessionCreationErrorStatus(db, resp)
+          studio.sendSessionCreationErrorStatus(db, resp, zapSessionId)
           env.logError(resp)
         })
     }
diff --git a/src/boot/ws.js b/src/boot/ws.js
index 67bfd716..802e5ae8 100644
--- a/src/boot/ws.js
+++ b/src/boot/ws.js
@@ -120,9 +120,8 @@ onWebSocket(dbEnum.wsCategory.dirtyFlag, (data) => {
 
 onWebSocket(dbEnum.wsCategory.sessionCreationError, (data) => {
   let html = `<center>
-  <strong>${data.error}</strong>
+  <strong>${data}</strong>
   <br>
-  ${data.errorMessage}
   </center>`
   Notify.create({
     message: html,
@@ -130,6 +129,7 @@ onWebSocket(dbEnum.wsCategory.sessionCreationError, (data) => {
     position: 'top',
     html: true,
     timeout: 0,
+    actions: [{ icon: 'close', color: 'white' }],
   })
 
   console.log(`sessionCreationError: ${JSON.stringify(data)}`)
diff --git a/src/layouts/ZclConfiguratorLayout.vue b/src/layouts/ZclConfiguratorLayout.vue
index 61a35d92..598b9a20 100644
--- a/src/layouts/ZclConfiguratorLayout.vue
+++ b/src/layouts/ZclConfiguratorLayout.vue
@@ -139,17 +139,6 @@ export default {
         this.miniState = true
       }
     },
-    getNotifications() {
-      this.$serverGet(restApi.uri.notification)
-        .then((resp) => {
-          if (resp.data[0] != undefined) {
-            this.notification = 'red'
-          }
-        })
-        .catch((err) => {
-          console.log(err)
-        })
-    },
     setSelectedEndpoint(value) {
       this.$store.dispatch('zap/updateSelectedEndpointType', {
         endpointType: this.endpointType[value],
@@ -274,12 +263,6 @@ export default {
       notification: '',
     }
   },
-  created() {
-    if (this.$serverGet != null) {
-      this.notification = ''
-      this.getNotifications()
-    }
-  },
 
   components: {
     ZclGeneralOptionsBar,
-- 
GitLab