import React, { useCallback, useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import AppState from 'App/State/AppState'; import Alert from 'Components/Alert'; import TextInput from 'Components/Form/TextInput'; import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; import Link from 'Components/Link/Link'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; import useDebounce from 'Helpers/Hooks/useDebounce'; import useQueryParams from 'Helpers/Hooks/useQueryParams'; import { icons, kinds } from 'Helpers/Props'; import { InputChanged } from 'typings/inputs'; import getErrorMessage from 'Utilities/Object/getErrorMessage'; import translate from 'Utilities/String/translate'; import AddNewSeriesSearchResult from './AddNewSeriesSearchResult'; import { useLookupSeries } from './useAddSeries'; import styles from './AddNewSeries.css'; function AddNewSeries() { const { term: initialTerm = '' } = useQueryParams<{ term: string }>(); const seriesCount = useSelector( (state: AppState) => state.series.items.length ); const [term, setTerm] = useState(initialTerm); const [isFetching, setIsFetching] = useState(false); const query = useDebounce(term, term ? 300 : 0); const handleSearchInputChange = useCallback( ({ value }: InputChanged) => { setTerm(value); setIsFetching(!!value.trim()); }, [] ); const handleClearSeriesLookupPress = useCallback(() => { setTerm(''); setIsFetching(false); }, []); const { isFetching: isFetchingApi, error, data = [], } = useLookupSeries(query); useEffect(() => { setIsFetching(isFetchingApi); }, [isFetchingApi]); useEffect(() => { setTerm(initialTerm); }, [initialTerm]); return (
{isFetching ? : null} {!isFetching && !!error ? (
{translate('AddNewSeriesError')}
{getErrorMessage(error)}
) : null} {!isFetching && !error && !!data.length ? (
{data.map((item) => { return ( ); })}
) : null} {!isFetching && !error && !data.length && term ? (
{translate('CouldNotFindResults', { term })}
{translate('SearchByTvdbId')}
{translate('WhyCantIFindMyShow')}
) : null} {term ? null : (
{translate('AddNewSeriesHelpText')}
{translate('SearchByTvdbId')}
)} {!term && !seriesCount ? (
{translate('NoSeriesHaveBeenAdded')}
) : null}
); } export default AddNewSeries;