diff --git a/src/photo/form/FieldsetPhotoChooser.tsx b/src/photo/form/FieldsetPhotoChooser.tsx index e3e003c6..2d5bcae7 100644 --- a/src/photo/form/FieldsetPhotoChooser.tsx +++ b/src/photo/form/FieldsetPhotoChooser.tsx @@ -6,8 +6,8 @@ import ImageMedium from '@/components/image/ImageMedium'; import { menuSurfaceStyles } from '@/components/primitives/surface'; import { GRID_SPACE_CLASSNAME } from '@/components'; import useDynamicPhoto from '../useDynamicPhoto'; -import { IoSearch } from 'react-icons/io5'; -import { useState } from 'react'; +import { IoClose, IoSearch } from 'react-icons/io5'; +import { useEffect, useRef, useState } from 'react'; import usePhotoQuery from '../usePhotoQuery'; import Spinner from '@/components/Spinner'; @@ -26,10 +26,15 @@ export default function FieldsetPhotoChooser({ 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 { @@ -40,6 +45,16 @@ export default function FieldsetPhotoChooser({ photoId: value, }); + useEffect(() => { + if (showQuery) { + inputRef.current?.focus(); + } else { + reset(); + // eslint-disable-next-line react-hooks/set-state-in-effect + setQuery(''); + } + }, [showQuery, reset]); + return ( <> @@ -82,19 +97,33 @@ export default function FieldsetPhotoChooser({
Choose photo
- {isLoading ? : } + {isLoading + ? + : showQuery + ? setShowQuery(false)} + /> + : setShowQuery(true)} + />} - -
- {(photosQuery.length > 0 ? photosQuery : photos).map(photo => ( + {showQuery && + setQuery(e.target.value)} + />} +
+ {(showQuery && query ? photosQuery : photos).map(photo => (