import {useTrans} from '@common/i18n/use-trans'; import {useFormContext} from 'react-hook-form'; import React, {useState} from 'react'; import {useTitlesAutocomplete} from '@app/titles/requests/use-titles-autocomplete'; import {FormSelect} from '@common/ui/forms/select/select'; import {Trans} from '@common/i18n/trans'; import {message} from '@common/i18n/message'; import {Option} from '@common/ui/forms/combobox/combobox'; import {Avatar} from '@common/ui/images/avatar'; interface Props { name: string; seasonName?: string; episodeName?: string; disableTitleField?: boolean; className?: string; } export function TitleSelect({ name, seasonName, episodeName, disableTitleField, className, }: Props) { const {trans} = useTrans(); const form = useFormContext(); const selectedTitleId = form.watch(name); const [searchQuery, setSearchQuery] = useState(''); const selectedSeason = seasonName ? form.watch(seasonName) : undefined; const query = useTitlesAutocomplete({ searchQuery, selectedTitleId, seasonNumber: selectedSeason, }); const isLoading = query.isLoading || query.isPlaceholderData; const selectedTitle = query.data?.titles.find(t => t.id === selectedTitleId); const seasonCount = selectedTitle?.seasons_count || 0; const episodeNumbers = selectedTitle?.episode_numbers || []; return (
} placeholder={trans(message('Select a title'))} showSearchField searchPlaceholder={trans(message('Search titles'))} inputValue={searchQuery} onInputValueChange={setSearchQuery} isAsync isLoading={isLoading} required disabled={disableTitleField} > {query.data?.titles.map(title => ( ))} {seasonCount > 0 && seasonName && ( } > {[...new Array(seasonCount).keys()].map(i => { const number = i + 1; return ( ); })} )} {!!episodeNumbers.length && episodeName && ( } > {episodeNumbers.map(number => ( ))} )}
); }