From 59607f15f707a2f7c4174867cf70dd5c086be588 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Mon, 2 Sep 2024 12:10:30 +0200 Subject: [PATCH] Fix error handling in keyedCache and collectionEditView We were previously not showing error message at all if the user didn't have permissions to edit a collection (or fetching a collection has failed for another reason). --- .../Collections/common/CollectionEditView.vue | 29 +++++++++++++++---- .../CurrentCollection/CollectionPanel.vue | 8 ++++- client/src/composables/keyedCache.ts | 16 +++++++++- .../src/stores/collectionAttributesStore.ts | 5 ++-- client/src/stores/collectionElementsStore.ts | 15 +++++++++- 5 files changed, 62 insertions(+), 11 deletions(-) diff --git a/client/src/components/Collections/common/CollectionEditView.vue b/client/src/components/Collections/common/CollectionEditView.vue index 5f231903a451..de5fbd62a52c 100644 --- a/client/src/components/Collections/common/CollectionEditView.vue +++ b/client/src/components/Collections/common/CollectionEditView.vue @@ -55,9 +55,26 @@ const collectionChangeKey = ref(0); const attributesData = computed(() => { return collectionAttributesStore.getAttributes(props.collectionId); }); +const attributesLoadError = computed(() => + errorMessageAsString(collectionAttributesStore.hasItemLoadError(props.collectionId)) +); + const collection = computed(() => { return collectionStore.getCollectionById(props.collectionId); }); +const collectionLoadError = computed(() => { + if (collection.value) { + return errorMessageAsString(collectionStore.hasLoadingCollectionElementsError(collection.value)); + } + return ""; +}); +watch([attributesLoadError, collectionLoadError], () => { + if (attributesLoadError.value) { + errorMessage.value = attributesLoadError.value; + } else if (collectionLoadError.value) { + errorMessage.value = collectionLoadError.value; + } +}); const databaseKeyFromElements = computed(() => { return attributesData.value?.dbkey; }); @@ -101,7 +118,7 @@ async function clickedSave(attribute: string, newValue: any) { try { await copyCollection(props.collectionId, dbKey); } catch (err) { - errorMessage.value = errorMessageAsString(err, "History import failed."); + errorMessage.value = errorMessageAsString(err, `Changing ${attribute} failed`); } } @@ -119,7 +136,7 @@ async function clickedConvert(selectedConverter: any) { await axios.post(url, data).catch(handleError); successMessage.value = "Conversion started successfully."; } catch (err) { - errorMessage.value = errorMessageAsString(err, "History import failed."); + errorMessage.value = errorMessageAsString(err, "Conversion failed."); } } @@ -143,12 +160,12 @@ async function clickedDatatypeChange(selectedDatatype: any) { await updateHistoryItemsBulk(currentHistoryId.value ?? "", data); successMessage.value = "Datatype changed successfully."; } catch (err) { - errorMessage.value = errorMessageAsString(err, "History import failed."); + errorMessage.value = errorMessageAsString(err, "Datatype change failed."); } } function handleError(err: any) { - errorMessage.value = errorMessageAsString(err, "History import failed."); + errorMessage.value = errorMessageAsString(err, "Datatype conversion failed."); if (err?.data?.stderr) { jobError.value = err.data; @@ -191,14 +208,14 @@ async function saveAttrs() { {{ localize(infoMessage) }} - + {{ localize(errorMessage) }} {{ localize(successMessage) }} - +