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 { icons, kinds } from 'Helpers/Props'; import MovieFormats from 'Movie/MovieFormats'; import MovieLanguages from 'Movie/MovieLanguages'; import MovieQuality from 'Movie/MovieQuality'; import MovieTitleLink from 'Movie/MovieTitleLink'; import useMovie from 'Movie/useMovie'; 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, movieId, sourceTitle, languages, quality, customFormats, date, protocol, indexer, message, isSelected, columns, onSelectedChange, } = props; const movie = useMovie(movieId); 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 (!movie) { return null; } return ( {columns.map((column) => { const { name, isVisible } = column; if (!isVisible) { return null; } if (name === 'movieMetadata.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;