import { SearchInput } from '@/components/inputs/SearchInput' import { InputSubmitContent } from '@/types' import { isMobile } from '@/utils/isMobileSignal' import { isDefined, isNotEmpty, isSvgSrc } from '@indite.io/lib/utils' import { PictureChoiceBlock } from '@indite.io/schemas/features/blocks/inputs/pictureChoice' import { For, Show, createEffect, createSignal, onMount } from 'solid-js' type Props = { defaultItems: PictureChoiceBlock['items'] options: PictureChoiceBlock['options'] onSubmit: (value: InputSubmitContent) => void onTransitionEnd: () => void } export const SinglePictureChoice = (props: Props) => { let inputRef: HTMLInputElement | undefined const [filteredItems, setFilteredItems] = createSignal(props.defaultItems) const [totalLoadedImages, setTotalLoadedImages] = createSignal(0) onMount(() => { if (!isMobile() && inputRef) inputRef.focus({ preventScroll: true }) }) const handleClick = (itemIndex: number) => { const item = filteredItems()[itemIndex] return props.onSubmit({ type: 'text', label: isNotEmpty(item.title) ? item.title : item.pictureSrc ?? item.id, value: item.id, }) } const filterItems = (inputValue: string) => { setFilteredItems( props.defaultItems.filter( (item) => item.title ?.toLowerCase() .includes((inputValue ?? '').toLowerCase()) || item.description ?.toLowerCase() .includes((inputValue ?? '').toLowerCase()) ) ) } createEffect(() => { if ( totalLoadedImages() === props.defaultItems.filter((item) => isDefined(item.pictureSrc)).length ) props.onTransitionEnd() }) const onImageLoad = () => { setTotalLoadedImages((acc) => acc + 1) } return (
setFilteredItems(props.defaultItems)} />
{(item, index) => ( )}
) }