diff --git a/server/i18n/locales/en_us.json b/server/i18n/locales/en_us.json index 715020dd..6275655e 100644 --- a/server/i18n/locales/en_us.json +++ b/server/i18n/locales/en_us.json @@ -547,6 +547,9 @@ "sources": { "create": "Create source", "createDesc": "Drop will use this source to access your game library, and make them available.", + "deleteButton": "Delete source", + "deleteDesc": "Deleting \"{0}\" will cascade delete the library, all of its games, all of their versions, and all of their metadata. This action cannot be undone.", + "deleteTitle": "Delete library source?", "desc": "Configure your library sources, where Drop will look for new games and versions to import.", "documentationLink": "Documentation {arrow}", "edit": "Edit source", diff --git a/server/pages/admin/library/sources/index.vue b/server/pages/admin/library/sources/index.vue index 20fce8a7..9e3878e0 100644 --- a/server/pages/admin/library/sources/index.vue +++ b/server/pages/admin/library/sources/index.vue @@ -347,30 +347,45 @@ function edit(index: number) { actionSourceOpen.value = true; } -async function deleteSource(index: number) { +function deleteSource(index: number) { const source = sources.value[index]; if (!source) return; - try { - await $dropFetch("/api/v1/admin/library/sources", { - method: "DELETE", - body: { id: source.id }, - headers, - }); - } catch (e) { - createModal( - ModalType.Notification, - { - title: t("errors.library.source.delete.title"), - description: t("errors.library.source.delete.desc", [ - // @ts-expect-error attempt to display statusMessage on error - e?.statusMessage ?? t("errors.unknown"), - ]), - }, - (_, c) => c(), - ); - } + createModal( + ModalType.Confirmation, + { + title: t("library.admin.sources.deleteTitle"), + description: t("library.admin.sources.deleteDesc", [source.name]), + buttonText: t("library.admin.sources.deleteButton"), + }, + async (event, close) => { + if (event !== "confirm") return close(); - sources.value.splice(index, 1); + try { + await $dropFetch("/api/v1/admin/library/sources", { + method: "DELETE", + body: { id: source.id }, + headers, + }); + } catch (e) { + createModal( + ModalType.Notification, + { + title: t("errors.library.source.delete.title"), + description: t("errors.library.source.delete.desc", [ + // @ts-expect-error attempt to display statusMessage on error + e?.statusMessage ?? t("errors.unknown"), + ]), + }, + (_, c) => c(), + ); + return close(); + } + + const currentIndex = sources.value.findIndex((s) => s.id === source.id); + if (currentIndex !== -1) sources.value.splice(currentIndex, 1); + close(); + }, + ); }