diff --git a/src/components/Discover/Conformance/ConformanceResults.vue b/src/components/Discover/Conformance/ConformanceResults.vue index 5bdf23d..9aa14bd 100644 --- a/src/components/Discover/Conformance/ConformanceResults.vue +++ b/src/components/Discover/Conformance/ConformanceResults.vue @@ -525,13 +525,14 @@ const openMore = async (no) => { // Use async/await to prevent errors caused by asynchronous data not being available yet issuesNo.value = no; await conformanceStore.getConformanceIssue(no); - traceId.value = await issueTraces.value[0].id; + if (issueTraces.value.length === 0) return; + traceId.value = issueTraces.value[0].id; firstCases.value = await conformanceStore.getConformanceTraceDetail( no, issueTraces.value[0].id, 0, ); - issuesModal.value = await true; + issuesModal.value = true; }; /** @@ -542,13 +543,14 @@ const openLoopMore = async (no) => { // Use async/await to prevent errors caused by asynchronous data not being available yet loopNo.value = no; await conformanceStore.getConformanceLoop(no); - looptraceId.value = await loopTraces.value[0].id; + if (loopTraces.value.length === 0) return; + looptraceId.value = loopTraces.value[0].id; loopFirstCases.value = await conformanceStore.getConformanceLoopsTraceDetail( no, loopTraces.value[0].id, 0, ); - loopModal.value = await true; + loopModal.value = true; }; /** diff --git a/src/stores/cytoscapeStore.ts b/src/stores/cytoscapeStore.ts index d75a756..470d54a 100644 --- a/src/stores/cytoscapeStore.ts +++ b/src/stores/cytoscapeStore.ts @@ -73,11 +73,17 @@ export const useCytoscapeStore = defineStore('cytoscapeStore', { * @param {string} direction - Layout direction ('TB' or 'LR'). */ loadPositionsFromStorage(direction: string) { - if (localStorage.getItem(SAVE_KEY_NAME) && - JSON.parse( - localStorage.getItem(SAVE_KEY_NAME))[this.currentGraphId]) { - this.nodePositions[this.currentGraphId][direction] = JSON.parse( - localStorage.getItem(SAVE_KEY_NAME))[this.currentGraphId][direction]; + try { + const raw = localStorage.getItem(SAVE_KEY_NAME); + if (raw) { + const parsed = JSON.parse(raw); + if (parsed[this.currentGraphId]) { + this.nodePositions[this.currentGraphId][direction] = + parsed[this.currentGraphId][direction]; + } + } + } catch { + // Corrupted localStorage data; ignore and use defaults } }, /** diff --git a/src/stores/files.ts b/src/stores/files.ts index 20dc478..009e841 100644 --- a/src/stores/files.ts +++ b/src/stores/files.ts @@ -174,8 +174,10 @@ export const useFilesStore = defineStore("filesStore", { // msg: 'not in UTF-8' | 'insufficient columns' | 'the csv file is empty' | 'the filename does not ends with .csv' // type: 'encoding' | 'insufficient_columns' | 'empty' | 'name_suffix' const detail = error.response.data.detail; - - uploadFailedFirst(detail[0].type, detail[0].msg, detail[0].loc[2]); + if (Array.isArray(detail) && detail.length > 0) { + const loc = detail[0].loc; + uploadFailedFirst(detail[0].type, detail[0].msg, Array.isArray(loc) && loc.length > 2 ? loc[2] : undefined); + } } else { Swal.close(); // Close the loading progress bar apiError(error, "Failed to upload the files."); diff --git a/src/stores/mapPathStore.ts b/src/stores/mapPathStore.ts index 3358a34..d65a406 100644 --- a/src/stores/mapPathStore.ts +++ b/src/stores/mapPathStore.ts @@ -192,7 +192,7 @@ export const useMapPathStore = defineStore('mapPathStore', { if (listIndex >= curButton.length) { // Bounds check to prevent out-of-range access return; // nodeIndex is the path index in the list after selecting one of the five buttons } - if (nodeIndex >= curButton[listIndex]) { // Bounds check to prevent out-of-range access + if (nodeIndex >= curButton[listIndex].length) { // Bounds check to prevent out-of-range access return; // The node index within this path in the list } // If `curPath` and `curButton[listIndex]` fully match