import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useSelector } from 'react-redux'; import AddSeries from 'AddSeries/AddSeries'; import { AddSeriesOptions, setAddSeriesOption, useAddSeriesOptions, } from 'AddSeries/addSeriesOptionsStore'; import SeriesMonitoringOptionsPopoverContent from 'AddSeries/SeriesMonitoringOptionsPopoverContent'; import SeriesTypePopoverContent from 'AddSeries/SeriesTypePopoverContent'; import CheckInput from 'Components/Form/CheckInput'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import Icon from 'Components/Icon'; import SpinnerButton from 'Components/Link/SpinnerButton'; import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import Popover from 'Components/Tooltip/Popover'; import { getValidationFailures } from 'Helpers/Hooks/useApiMutation'; import { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props'; import { SeriesType } from 'Series/Series'; import SeriesPoster from 'Series/SeriesPoster'; import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector'; import selectSettings from 'Store/Selectors/selectSettings'; import { useIsWindows } from 'System/Status/useSystemStatus'; import { InputChanged } from 'typings/inputs'; import translate from 'Utilities/String/translate'; import { useAddSeries } from './useAddSeries'; import styles from './AddNewSeriesModalContent.css'; export interface AddNewSeriesModalContentProps { series: AddSeries; initialSeriesType: SeriesType; onModalClose: () => void; } function AddNewSeriesModalContent({ series, initialSeriesType, onModalClose, }: AddNewSeriesModalContentProps) { const { title, year, overview, images, folder } = series; const options = useAddSeriesOptions(); const { isSmallScreen } = useSelector(createDimensionsSelector()); const isWindows = useIsWindows(); const { isAdding, addError, addSeries } = useAddSeries(); const { settings, validationErrors, validationWarnings } = useMemo(() => { return { ...selectSettings(options, {}), ...getValidationFailures(addError), }; }, [options, addError]); const [seriesType, setSeriesType] = useState( initialSeriesType === 'standard' ? settings.seriesType.value : initialSeriesType ); const { monitor, qualityProfileId, rootFolderPath, searchForCutoffUnmetEpisodes, searchForMissingEpisodes, seasonFolder, seriesType: seriesTypeSetting, tags, } = settings; const handleInputChange = useCallback( ({ name, value }: InputChanged) => { setAddSeriesOption(name as keyof AddSeriesOptions, value); }, [] ); const handleQualityProfileIdChange = useCallback( ({ value }: InputChanged) => { setAddSeriesOption('qualityProfileId', value as number); }, [] ); const handleAddSeriesPress = useCallback(() => { addSeries({ ...series, rootFolderPath: rootFolderPath.value, addOptions: { monitor: monitor.value, searchForMissingEpisodes: searchForMissingEpisodes.value, searchForCutoffUnmetEpisodes: searchForCutoffUnmetEpisodes.value, }, qualityProfileId: qualityProfileId.value, seriesType, seasonFolder: seasonFolder.value, tags: tags.value, }); }, [ series, seriesType, rootFolderPath, monitor, qualityProfileId, seasonFolder, searchForMissingEpisodes, searchForCutoffUnmetEpisodes, tags, addSeries, ]); useEffect(() => { setSeriesType(seriesTypeSetting.value); }, [seriesTypeSetting]); return ( {title} {!title.includes(String(year)) && year ? ( ({year}) ) : null}
{isSmallScreen ? null : (
)}
{overview ? (
{overview}
) : null}
{translate('RootFolder')} {translate('Monitor')} } title={translate('MonitoringOptions')} body={} position={tooltipPositions.RIGHT} /> {translate('QualityProfile')} {translate('SeriesType')} } title={translate('SeriesTypes')} body={} position={tooltipPositions.RIGHT} /> {translate('SeasonFolder')} {translate('Tags')}
{translate('AddSeriesWithTitle', { title })}
); } export default AddNewSeriesModalContent;