import React, { useCallback, useState } from 'react'; import { useSelect } from 'App/Select/SelectContext'; 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 { useSingleSeries } from 'Series/useSeries'; import Blocklist from 'typings/Blocklist'; import { SelectStateInputProps } from 'typings/props'; import translate from 'Utilities/String/translate'; import BlocklistDetailsModal from './BlocklistDetailsModal'; import { useRemoveBlocklistItem } from './useBlocklist'; import styles from './BlocklistRow.css'; interface BlocklistRowProps extends Blocklist { columns: Column[]; } function BlocklistRow({ id, seriesId, sourceTitle, languages, quality, customFormats, date, protocol, indexer, message, source, columns, }: BlocklistRowProps) { const series = useSingleSeries(seriesId); const { isRemoving, removeBlocklistItem } = useRemoveBlocklistItem(id); const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false); const { toggleSelected, useIsSelected } = useSelect(); const isSelected = useIsSelected(id); const handleSelectedChange = useCallback( ({ id, value, shiftKey = false }: SelectStateInputProps) => { toggleSelected({ id, isSelected: value, shiftKey }); }, [toggleSelected] ); const handleDetailsPress = useCallback(() => { setIsDetailsModalOpen(true); }, [setIsDetailsModalOpen]); const handleDetailsModalClose = useCallback(() => { setIsDetailsModalOpen(false); }, [setIsDetailsModalOpen]); const handleRemovePress = useCallback(() => { removeBlocklistItem(); }, [removeBlocklistItem]); 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;