From af6f75fa0b89f560248159df5cbd492ed580b7b8 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Sun, 1 Mar 2026 20:48:32 -0600 Subject: [PATCH] Refine photo chooser behavior --- src/about/AdminAboutEditPage.tsx | 54 +++++------------------ src/photo/form/FieldsetPhotoChooser.tsx | 58 +++++++++++++++---------- 2 files changed, 45 insertions(+), 67 deletions(-) diff --git a/src/about/AdminAboutEditPage.tsx b/src/about/AdminAboutEditPage.tsx index 739c3f3f..fde27874 100644 --- a/src/about/AdminAboutEditPage.tsx +++ b/src/about/AdminAboutEditPage.tsx @@ -9,17 +9,13 @@ import AdminChildPage from '@/components/AdminChildPage'; import { updateAboutAction } from './actions'; import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus'; import { Photo } from '@/photo'; -import PhotoAvatar from '@/photo/PhotoAvatar'; -import PhotoMedium from '@/photo/PhotoMedium'; -import clsx from 'clsx/lite'; -import useDynamicPhoto from '@/photo/useDynamicPhoto'; import { useAppText } from '@/i18n/state/client'; import FieldsetPhotoChooser from '@/photo/form/FieldsetPhotoChooser'; export default function AdminAboutEditPage({ about, - photoAvatar: _photoAvatar, - photoHero: _photoHero, + photoAvatar, + photoHero, photos, photosCount, photosFavs, @@ -36,22 +32,6 @@ export default function AdminAboutEditPage({ const [aboutForm, setAboutForm] = useState>(about ?? {}); - const { - photo: photoAvatar, - isLoading: isLoadingPhotoAvatar, - } = useDynamicPhoto({ - initialPhoto: _photoAvatar, - photoId: aboutForm?.photoIdAvatar, - }); - - const { - photo: photoHero, - isLoading: isLoadingPhotoHero, - } = useDynamicPhoto({ - initialPhoto: _photoHero, - photoId: aboutForm?.photoIdHero, - }); - const convertUrlToPhotoId = (url?: string) => url?.split('/').pop(); return ( @@ -66,7 +46,8 @@ export default function AdminAboutEditPage({ >
setAboutForm(form => ({ ...form, photoIdAvatar }))} @@ -75,16 +56,6 @@ export default function AdminAboutEditPage({ photosCount={photosCount} photosFavs={photosFavs} /> - - setAboutForm(form => - ({ ...form, photoIdAvatar: convertUrlToPhotoId(photoIdAvatar) }))} - loading={isLoadingPhotoAvatar} - /> setAboutForm(form => ({ ...form, description }))} /> - setAboutForm(form => ({ ...form, photoIdHero: convertUrlToPhotoId(photoIdHero) }))} - loading={isLoadingPhotoHero} + photo={photoHero} + photos={photos} + photosCount={photosCount} + photosFavs={photosFavs} /> - {photoHero && -
- -
}
/>; export default function FieldsetPhotoChooser({ - label, - value, - onChange, photo: _photo, photos = [], photosCount, photosFavs, + ...props }: { - label: string - value: string - onChange: (photoId: string) => void photo?: Photo photos: Photo[] photosCount: number photosFavs: Photo[] -}) { +} & ComponentProps) { const [isOpen, setIsOpen] = useState(false); const [photo, setPhoto] = useState(_photo); @@ -58,7 +60,8 @@ export default function FieldsetPhotoChooser({ const showQuery = mode === 'search'; - const inputRef = useRef(null); + const refContainer = useRef(null); + const refInput = useRef(null); const [query, setQuery] = useState(''); const { @@ -74,11 +77,6 @@ export default function FieldsetPhotoChooser({ if (resetMenu) { setMode('all'); } }, [resetPhotoQuery]); - // Focus input on query mode - useEffect(() => { - if (showQuery) { inputRef.current?.focus(); } - }, [showQuery]); - // Reset menu when closed useEffect(() => { if (!isOpen) { reset(true); } @@ -94,7 +92,7 @@ export default function FieldsetPhotoChooser({ )} onClick={() => { setPhoto(photo); - onChange(photo.id); + props.onChange?.(photo.id); setIsOpen(false); }} > @@ -113,7 +111,7 @@ export default function FieldsetPhotoChooser({ return ( <> - + @@ -176,13 +182,19 @@ export default function FieldsetPhotoChooser({ setMode(mode); if (mode !== 'search') { reset(); + } else { + refContainer.current?.scrollTo({ top: 0 }); + refInput.current?.focus(); } }} /> -
+