diff --git a/src/admin/AdminPhotosTable.tsx b/src/admin/AdminPhotosTable.tsx
index 1f193a57..ee1ec308 100644
--- a/src/admin/AdminPhotosTable.tsx
+++ b/src/admin/AdminPhotosTable.tsx
@@ -1,6 +1,6 @@
'use client';
-import { Photo, deleteConfirmationTextForPhoto, titleForPhoto } from '@/photo';
+import { Photo, titleForPhoto } from '@/photo';
import AdminTable from './AdminTable';
import { Fragment } from 'react';
import PhotoSmall from '@/photo/PhotoSmall';
@@ -9,13 +9,11 @@ import { pathForAdminPhotoEdit, pathForPhoto } from '@/site/paths';
import Link from 'next/link';
import { AiOutlineEyeInvisible } from 'react-icons/ai';
import PhotoDate from '@/photo/PhotoDate';
-import FormWithConfirm from '@/components/FormWithConfirm';
import EditButton from './EditButton';
-import DeleteButton from './DeleteButton';
-import { deletePhotoFormAction } from '@/photo/actions';
import { useAppState } from '@/state/AppState';
import { RevalidatePhoto } from '@/photo/InfinitePhotoScroll';
import PhotoSyncButton from './PhotoSyncButton';
+import DeletePhotoButton from './DeletePhotoButton';
export default function AdminPhotosTable({
photos,
@@ -113,15 +111,10 @@ export default function AdminPhotosTable({
shouldToast
/>
{canDelete &&
- revalidatePhoto?.(photo.id, true)}
- >
-
-
-
- }
+ revalidatePhoto?.(photo.id, true)}
+ />}
)}
diff --git a/src/admin/AdminTagTable.tsx b/src/admin/AdminTagTable.tsx
index e5eb7a1f..a5bdfc5d 100644
--- a/src/admin/AdminTagTable.tsx
+++ b/src/admin/AdminTagTable.tsx
@@ -2,7 +2,7 @@ import FormWithConfirm from '@/components/FormWithConfirm';
import { deletePhotoTagGloballyAction } from '@/photo/actions';
import AdminTable from '@/admin/AdminTable';
import { Fragment } from 'react';
-import DeleteButton from '@/admin/DeleteButton';
+import DeleteFormButton from '@/admin/DeleteFormButton';
import { photoQuantityText } from '@/photo';
import { Tags, formatTag, sortTagsObject } from '@/tag';
import EditButton from '@/admin/EditButton';
@@ -34,7 +34,7 @@ export default function AdminTagTable({
`Are you sure you want to remove "${formatTag(tag)}" from ${photoQuantityText(count, false).toLowerCase()}?`}
>
-
+
)}
diff --git a/src/admin/AdminUploadsTable.tsx b/src/admin/AdminUploadsTable.tsx
index 66dc9af8..f33104f9 100644
--- a/src/admin/AdminUploadsTable.tsx
+++ b/src/admin/AdminUploadsTable.tsx
@@ -9,7 +9,7 @@ import { pathForAdminUploadUrl } from '@/site/paths';
import AddButton from './AddButton';
import FormWithConfirm from '@/components/FormWithConfirm';
import { deleteBlobPhotoAction } from '@/photo/actions';
-import DeleteButton from './DeleteButton';
+import DeleteFormButton from './DeleteFormButton';
import { UrlAddStatus } from './AdminUploadsClient';
import ResponsiveDate from '@/components/ResponsiveDate';
@@ -102,7 +102,7 @@ export default function AdminUploadsTable({
value={url}
readOnly
/>
-
+
>}
diff --git a/src/admin/DeleteButton.tsx b/src/admin/DeleteFormButton.tsx
similarity index 96%
rename from src/admin/DeleteButton.tsx
rename to src/admin/DeleteFormButton.tsx
index 7c048beb..40ee4f2a 100644
--- a/src/admin/DeleteButton.tsx
+++ b/src/admin/DeleteFormButton.tsx
@@ -6,7 +6,7 @@ import { clsx } from 'clsx/lite';
import { ComponentProps, useCallback } from 'react';
import { BiTrash } from 'react-icons/bi';
-export default function DeleteButton (
+export default function DeleteFormButton (
props: ComponentProps & {
clearLocalState?: boolean
}
diff --git a/src/admin/DeletePhotoButton.tsx b/src/admin/DeletePhotoButton.tsx
new file mode 100644
index 00000000..fb0319c0
--- /dev/null
+++ b/src/admin/DeletePhotoButton.tsx
@@ -0,0 +1,21 @@
+'use client';
+
+import { deleteConfirmationTextForPhoto, Photo, titleForPhoto } from '@/photo';
+import DeletePhotosButton from './DeletePhotosButton';
+import { ComponentProps } from 'react';
+
+export default function DeletePhotoButton({
+ photo,
+ ...rest
+}: {
+ photo: Photo
+} & ComponentProps) {
+ return (
+
+ );
+}
diff --git a/src/admin/DeletePhotosButton.tsx b/src/admin/DeletePhotosButton.tsx
index 66133f2f..67422d4a 100644
--- a/src/admin/DeletePhotosButton.tsx
+++ b/src/admin/DeletePhotosButton.tsx
@@ -3,6 +3,7 @@
import LoaderButton from '@/components/primitives/LoaderButton';
import { photoQuantityText } from '@/photo';
import { deletePhotosAction } from '@/photo/actions';
+import { useAppState } from '@/state/AppState';
import { toastSuccess, toastWarning } from '@/toast';
import { clsx } from 'clsx/lite';
import { ComponentProps, useState } from 'react';
@@ -11,16 +12,23 @@ import { BiTrash } from 'react-icons/bi';
export default function DeletePhotosButton({
photoIds = [],
onDelete,
+ clearLocalState = true,
className,
+ confirmText,
+ toastText,
...rest
}: {
photoIds?: string[]
onDelete?: () => void
+ clearLocalState?: boolean
+ toastText?: string
} & ComponentProps) {
const [isLoading, setIsLoading] = useState(false);
const photosText = photoQuantityText(photoIds.length, false);
+ const { invalidateSwr, registerAdminUpdate } = useAppState();
+
return (
{
setIsLoading(true);
deletePhotosAction(photoIds)
.then(() => {
- toastSuccess(`${photosText} deleted`);
+ toastSuccess(toastText ?? `${photosText} deleted`);
+ if (clearLocalState) {
+ invalidateSwr?.();
+ registerAdminUpdate?.();
+ }
onDelete?.();
})
.catch(() => toastWarning(`Failed to delete ${photosText}`))
diff --git a/src/photo/actions.ts b/src/photo/actions.ts
index 35d29a21..aa5fa6e1 100644
--- a/src/photo/actions.ts
+++ b/src/photo/actions.ts
@@ -260,14 +260,6 @@ export const deletePhotoAction = async (
}
});
-export const deletePhotoFormAction = async (formData: FormData) =>
- runAuthenticatedAdminServerAction(() =>
- deletePhotoAction(
- formData.get('id') as string,
- formData.get('url') as string,
- )
- );
-
export const deletePhotoTagGloballyAction = async (formData: FormData) =>
runAuthenticatedAdminServerAction(async () => {
const tag = formData.get('tag') as string;