import React, { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { createSelector } from 'reselect'; import { useSelect } from 'App/SelectContext'; import AppState from 'App/State/AppState'; import { ImportSeries } from 'App/State/ImportSeriesAppState'; import FormInputGroup from 'Components/Form/FormInputGroup'; import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell'; import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell'; import { inputTypes } from 'Helpers/Props'; import { setImportSeriesValue } from 'Store/Actions/importSeriesActions'; import createExistingSeriesSelector from 'Store/Selectors/createExistingSeriesSelector'; import { InputChanged } from 'typings/inputs'; import { SelectStateInputProps } from 'typings/props'; import ImportSeriesSelectSeries from './SelectSeries/ImportSeriesSelectSeries'; import styles from './ImportSeriesRow.css'; function createItemSelector(id: string) { return createSelector( (state: AppState) => state.importSeries.items, (items) => { return ( items.find((item) => { return item.id === id; }) || ({} as ImportSeries) ); } ); } interface ImportSeriesRowProps { id: string; } function ImportSeriesRow({ id }: ImportSeriesRowProps) { const dispatch = useDispatch(); const { relativePath, monitor, qualityProfileId, seasonFolder, seriesType, selectedSeries, } = useSelector(createItemSelector(id)); const isExistingSeries = useSelector( createExistingSeriesSelector(selectedSeries?.tvdbId) ); const [selectState, selectDispatch] = useSelect(); const handleInputChange = useCallback( ({ name, value }: InputChanged) => { dispatch( // @ts-expect-error - actions are not typed setImportSeriesValue({ id, [name]: value, }) ); }, [id, dispatch] ); const handleSelectedChange = useCallback( ({ id, value, shiftKey }: SelectStateInputProps) => { selectDispatch({ type: 'toggleSelected', id, isSelected: value, shiftKey, }); }, [selectDispatch] ); return ( <> {relativePath} ); } export default ImportSeriesRow;