From bd9b33422f3f706e763634f5756fd9d04ec95948 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Thu, 11 Sep 2025 09:31:02 -0500 Subject: [PATCH] Refine bulk updating experience --- src/admin/AdminPhotosUpdateClient.tsx | 24 ++++++++++++++++-------- src/admin/PhotoSyncButton.tsx | 5 ++++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/admin/AdminPhotosUpdateClient.tsx b/src/admin/AdminPhotosUpdateClient.tsx index 919aebfe..273bae4a 100644 --- a/src/admin/AdminPhotosUpdateClient.tsx +++ b/src/admin/AdminPhotosUpdateClient.tsx @@ -5,7 +5,7 @@ import AdminPhotosTable from '@/admin/AdminPhotosTable'; import Note from '@/components/Note'; import AdminChildPage from '@/components/AdminChildPage'; import { PATH_ADMIN_PHOTOS } from '@/app/path'; -import { useEffect, useMemo, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { syncPhotosAction } from '@/photo/actions'; import { useRouter } from 'next/navigation'; import ResponsiveText from '@/components/primitives/ResponsiveText'; @@ -32,16 +32,16 @@ export default function AdminPhotosUpdateClient({ const errorRef = useRef(undefined); // Use state for updating progress button and error UI + const [statusText, setStatusText] = + useState(getPhotosUpdateStatusText(photos)); const [photoIdsSyncing, setPhotoIdsSyncing] = useState([]); - const [error, setError] = useState(); const [progress, setProgress] = useState(0); + const [error, setError] = useState(); const arePhotoIdsSyncing = photoIdsSyncing.length > 0; const router = useRouter(); - const statusText = useMemo(() => getPhotosUpdateStatusText(photos), [photos]); - useEffect(() => { if (photos.length === 0 && !error && !errorRef.current) { router.push(PATH_ADMIN_PHOTOS); @@ -88,6 +88,8 @@ export default function AdminPhotosUpdateClient({ photoIdsToSync.current = photoIdsToSync.current.filter( id => !photoIds.includes(id), ); + setStatusText(getPhotosUpdateStatusText(photos + .filter(({ id }) => photoIdsToSync.current.includes(id)))); setProgress( (photos.length - photoIdsToSync.current.length) / photos.length, @@ -127,11 +129,17 @@ export default function AdminPhotosUpdateClient({ >
- Photo updates: {statusText} + {arePhotoIdsSyncing + ? <>Updating photos: {statusText} + : <>Photo updates: {statusText}}
- Sync to capture new EXIF fields, optimize image data, - {' '} - use AI to generate missing text (if configured) + {arePhotoIdsSyncing + ? <>Leave browser open until updates complete + : <> + Sync to capture new EXIF fields, optimize image data, + {' '} + use AI to generate missing text (if configured) + }
diff --git a/src/admin/PhotoSyncButton.tsx b/src/admin/PhotoSyncButton.tsx index b11d182f..6b25da1c 100644 --- a/src/admin/PhotoSyncButton.tsx +++ b/src/admin/PhotoSyncButton.tsx @@ -52,7 +52,10 @@ export default function PhotoSyncButton({ : 'Regenerate photo data'}> :