From e9b764b72f2b65f3c8ae731b6f26540d95dabaed Mon Sep 17 00:00:00 2001 From: arashsheyda Date: Wed, 26 Apr 2023 22:45:40 +0300 Subject: [PATCH] fix: handle errors --- client/components/DatabaseDetail.vue | 38 +++++++++------ src/server-rpc/database.ts | 71 +++++++++++++++++++++++----- src/server-rpc/resource.ts | 8 ++-- 3 files changed, 86 insertions(+), 31 deletions(-) diff --git a/client/components/DatabaseDetail.vue b/client/components/DatabaseDetail.vue index bf99cf9..e95cf43 100644 --- a/client/components/DatabaseDetail.vue +++ b/client/components/DatabaseDetail.vue @@ -78,19 +78,24 @@ function editDocument(document: any) { selectedDocument.value = { ...document } } -async function saveDocument(document: any) { - await rpc.createDocument(props.collection, document) - editing.value = false - selectedDocument.value = undefined - documents.value = await rpc.listDocuments(props.collection, pagination) -} +async function saveDocument(document: any, create = true) { + const method = create ? rpc.createDocument : rpc.updateDocument + const newDocument = await method(props.collection, document) + if (newDocument?.error) + return alert(newDocument.error.message) -async function updateDocument() { - // TODO: validate & show errors - await rpc.updateDocument(props.collection, selectedDocument.value) - editing.value = false - selectedDocument.value = undefined - documents.value = await rpc.listDocuments(props.collection, pagination) + if (create) { + if (!documents.value.length) { + documents.value = await rpc.listDocuments(props.collection, pagination) + return discardEditing() + } + documents.value.push({ _id: newDocument.insertedId, ...document }) + } + else { + const index = documents.value.findIndex((doc: any) => doc._id === newDocument.value._id) + documents.value[index] = document + } + discardEditing() } function discardEditing() { @@ -99,8 +104,11 @@ function discardEditing() { } async function deleteDocument(document: any) { - rpc.deleteDocument(props.collection, document._id) - documents.value = await rpc.listDocuments(props.collection, pagination) + const newDocument = await rpc.deleteDocument(props.collection, document._id) + if (newDocument.deletedCount === 0) + return alert('Failed to delete document') + + documents.value = documents.value.filter((doc: any) => doc._id !== document._id) } const copy = useCopy() @@ -163,7 +171,7 @@ const copy = useCopy()