import React, { useCallback, useState } from 'react'; import { useDispatch } from 'react-redux'; import IconButton from 'Components/Link/IconButton'; import RelativeDateCell from 'Components/Table/Cells/RelativeDateCell'; import TableRowCell from 'Components/Table/Cells/TableRowCell'; import TableSelectCell from 'Components/Table/Cells/TableSelectCell'; import Column from 'Components/Table/Column'; import TableRow from 'Components/Table/TableRow'; import EpisodeFormats from 'Episode/EpisodeFormats'; import EpisodeLanguages from 'Episode/EpisodeLanguages'; import EpisodeQuality from 'Episode/EpisodeQuality'; import { icons, kinds } from 'Helpers/Props'; import SeriesTitleLink from 'Series/SeriesTitleLink'; import useSeries from 'Series/useSeries'; import { removeBlocklistItem } from 'Store/Actions/blocklistActions'; import Blocklist from 'typings/Blocklist'; import { SelectStateInputProps } from 'typings/props'; import translate from 'Utilities/String/translate'; import BlocklistDetailsModal from './BlocklistDetailsModal'; import styles from './BlocklistRow.css'; interface BlocklistRowProps extends Blocklist { isSelected: boolean; columns: Column[]; onSelectedChange: (options: SelectStateInputProps) => void; } function BlocklistRow(props: BlocklistRowProps) { const { id, seriesId, sourceTitle, languages, quality, customFormats, date, protocol, indexer, message, isSelected, columns, onSelectedChange, } = props; const series = useSeries(seriesId); const dispatch = useDispatch(); const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false); const handleDetailsPress = useCallback(() => { setIsDetailsModalOpen(true); }, [setIsDetailsModalOpen]); const handleDetailsModalClose = useCallback(() => { setIsDetailsModalOpen(false); }, [setIsDetailsModalOpen]); const handleRemovePress = useCallback(() => { dispatch(removeBlocklistItem({ id })); }, [id, dispatch]); if (!series) { return null; } return ( {columns.map((column) => { const { name, isVisible } = column; if (!isVisible) { return null; } if (name === 'series.sortTitle') { return ( ); } if (name === 'sourceTitle') { return {sourceTitle}; } if (name === 'languages') { return ( ); } if (name === 'quality') { return ( ); } if (name === 'customFormats') { return ( ); } if (name === 'date') { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ts(2739) return ; } if (name === 'indexer') { return ( {indexer} ); } if (name === 'actions') { return ( ); } return null; })} ); } export default BlocklistRow;