import FieldsetWithStatus from '@/components/FieldsetWithStatus'; import { altTextForPhoto, doesPhotoNeedBlurCompatibility, Photo } from '..'; import clsx from 'clsx/lite'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import ImageMedium from '@/components/image/ImageMedium'; import { menuSurfaceStyles } from '@/components/primitives/surface'; import { GRID_SPACE_CLASSNAME } from '@/components'; import useDynamicPhoto from '../useDynamicPhoto'; import { IoClose, IoSearch } from 'react-icons/io5'; import { useEffect, useRef, useState } from 'react'; import usePhotoQuery from '../usePhotoQuery'; import Spinner from '@/components/Spinner'; export default function FieldsetPhotoChooser({ label, value, onChange, photo, photos = [], }: { label: string value: string onChange: (value: string) => void photo?: Photo photos?: Photo[] photosCount?: number photosHidden?: Photo[] }) { const inputRef = useRef(null); const [showQuery, setShowQuery] = useState(true); // TODO: Move query into hook const [query, setQuery] = useState(''); const { photos: photosQuery, isLoading, reset, } = usePhotoQuery(query); const { photo: photoAvatar, isLoading: isLoadingPhotoAvatar, } = useDynamicPhoto({ initialPhoto: photo, photoId: value, }); useEffect(() => { if (showQuery) { inputRef.current?.focus(); } else { reset(); // eslint-disable-next-line react-hooks/set-state-in-effect setQuery(''); } }, [showQuery, reset]); return ( <> e.preventDefault()} align="start" sideOffset={10} className={menuSurfaceStyles('z-20 px-1.5 py-1.5')} >
Choose photo
{isLoading ? : showQuery ? setShowQuery(false)} /> : setShowQuery(true)} />}
{showQuery && setQuery(e.target.value)} />}
{(showQuery && query ? photosQuery : photos).map(photo => ( onChange(photo.id)} /> ))}
); }