diff --git a/src/app/admin/uploads/[uploadPath]/page.tsx b/src/app/admin/uploads/[uploadPath]/page.tsx
index 9dca170b..b59ccc45 100644
--- a/src/app/admin/uploads/[uploadPath]/page.tsx
+++ b/src/app/admin/uploads/[uploadPath]/page.tsx
@@ -1,9 +1,8 @@
-import PhotoForm from '@/photo/form/PhotoForm';
-import AdminChildPage from '@/components/AdminChildPage';
-import { PATH_ADMIN, PATH_ADMIN_UPLOADS } from '@/site/paths';
+import { PATH_ADMIN } from '@/site/paths';
import { extractExifDataFromBlobPath } from '@/photo/server';
import { redirect } from 'next/navigation';
import { getUniqueTagsCached } from '@/photo/cache';
+import UploadPageClient from '@/photo/UploadPageClient';
interface Params {
params: { uploadPath: string }
@@ -20,15 +19,6 @@ export default async function UploadPage({ params: { uploadPath } }: Params) {
if (!photoFormExif) { redirect(PATH_ADMIN); }
return (
-
-
-
+
);
};
diff --git a/src/components/AdminChildPage.tsx b/src/components/AdminChildPage.tsx
index 3b6b906e..d5afc963 100644
--- a/src/components/AdminChildPage.tsx
+++ b/src/components/AdminChildPage.tsx
@@ -4,18 +4,21 @@ import { FiArrowLeft } from 'react-icons/fi';
import SiteGrid from './SiteGrid';
import { clsx } from 'clsx/lite';
import Badge from './Badge';
+import Spinner from './Spinner';
function AdminChildPage({
backPath,
backLabel,
breadcrumb,
accessory,
+ isLoading,
children,
}: {
backPath?: string
backLabel?: string
breadcrumb?: ReactNode
accessory?: ReactNode
+ isLoading?: boolean
children: ReactNode,
}) {
return (
@@ -42,10 +45,14 @@ function AdminChildPage({
{breadcrumb &&
<>
/
-
- {breadcrumb}
-
+
+
+ {breadcrumb}
+
+
>}
+ {isLoading &&
+ }
{accessory &&
{accessory}
}
diff --git a/src/components/SubmitButtonWithStatus.tsx b/src/components/SubmitButtonWithStatus.tsx
index ef6cd05e..7bd2e551 100644
--- a/src/components/SubmitButtonWithStatus.tsx
+++ b/src/components/SubmitButtonWithStatus.tsx
@@ -10,6 +10,7 @@ interface Props extends HTMLProps {
icon?: JSX.Element
styleAsLink?: boolean
spinnerColor?: SpinnerColor
+ onFormStatusChange?: (pending: boolean) => void
onFormSubmitToastMessage?: string
}
@@ -17,6 +18,7 @@ export default function SubmitButtonWithStatus({
icon,
styleAsLink,
spinnerColor,
+ onFormStatusChange,
onFormSubmitToastMessage,
children,
disabled,
@@ -24,8 +26,8 @@ export default function SubmitButtonWithStatus({
type: _type,
...buttonProps
}: Props) {
-
const { pending } = useFormStatus();
+
const pendingPrevious = useRef(pending);
useEffect(() => {
@@ -39,6 +41,10 @@ export default function SubmitButtonWithStatus({
pendingPrevious.current = pending;
}, [pending, onFormSubmitToastMessage]);
+ useEffect(() => {
+ onFormStatusChange?.(pending);
+ }, [onFormStatusChange, pending]);
+
return (