From 4aa72eb1a37aafb274c4594cea0decbc5b55ccf8 Mon Sep 17 00:00:00 2001 From: Owen Date: Mon, 11 May 2026 11:49:51 -0700 Subject: [PATCH] Confirm delete of share links --- messages/en-US.json | 4 ++++ src/components/ShareLinksTable.tsx | 34 +++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/messages/en-US.json b/messages/en-US.json index 9995d3af5..e095ee662 100644 --- a/messages/en-US.json +++ b/messages/en-US.json @@ -156,6 +156,10 @@ "shareErrorDeleteMessage": "An error occurred deleting link", "shareDeleted": "Link deleted", "shareDeletedDescription": "The link has been deleted", + "shareDelete": "Delete Share Link", + "shareDeleteConfirm": "Confirm Delete Share Link", + "shareQuestionRemove": "Are you sure you want to delete this share link?", + "shareMessageRemove": "Once deleted, the link will no longer work and anyone using it will lose access to the resource.", "shareTokenDescription": "The access token can be passed in two ways: as a query parameter or in the request headers. These must be passed from the client on every request for authenticated access.", "accessToken": "Access Token", "usageExamples": "Usage Examples", diff --git a/src/components/ShareLinksTable.tsx b/src/components/ShareLinksTable.tsx index 333cee03f..239a12cc8 100644 --- a/src/components/ShareLinksTable.tsx +++ b/src/components/ShareLinksTable.tsx @@ -61,6 +61,8 @@ export default function ShareLinksTable({ const api = createApiClient(useEnvContext()); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + const [selectedLink, setSelectedLink] = useState(null); const [rows, setRows] = useState(shareLinks); const [isRefreshing, setIsRefreshing] = useState(false); @@ -92,6 +94,7 @@ export default function ShareLinksTable({ title: t("shareErrorDelete"), description: formatAxiosError(e, t("shareErrorDeleteMessage")) }); + throw e; }); const newRows = rows.filter((r) => r.accessTokenId !== id); @@ -293,9 +296,10 @@ export default function ShareLinksTable({ {/* */} @@ -307,6 +311,30 @@ export default function ShareLinksTable({ return ( <> + {selectedLink && ( + { + setIsDeleteModalOpen(val); + if (!val) setSelectedLink(null); + }} + dialog={ +
+

{t("shareQuestionRemove")}

+

{t("shareMessageRemove")}

+
+ } + buttonText={t("shareDeleteConfirm")} + onConfirm={async () => + deleteSharelink(selectedLink.accessTokenId) + } + string={ + selectedLink.title || selectedLink.resourceName + } + title={t("shareDelete")} + /> + )} +