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 (