1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-21 22:05:38 -04:00

Convert select to SelectContext

This commit is contained in:
Mark McDowall
2025-10-26 08:56:28 -07:00
parent 910b85f37d
commit b5967425f1
32 changed files with 666 additions and 751 deletions
@@ -0,0 +1,65 @@
import React, { useCallback } from 'react';
import { useSelect } from 'App/Select/SelectContext';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableSelectCell from 'Components/Table/Cells/TableSelectCell';
import TableRowButton from 'Components/Table/TableRowButton';
import Episode from 'Episode/Episode';
import { SelectStateInputProps } from 'typings/props';
interface SelectEpisodeRowProps {
id: number;
episodeNumber: number;
absoluteEpisodeNumber: number | undefined;
title: string;
airDate: string;
isAnime: boolean;
isSelected?: boolean;
}
function SelectEpisodeRow({
id,
episodeNumber,
absoluteEpisodeNumber,
title,
airDate,
isAnime,
}: SelectEpisodeRowProps) {
const { toggleSelected, useIsSelected } = useSelect<Episode>();
const isSelected = useIsSelected(id);
const handleSelectedChange = useCallback(
({ id, value, shiftKey = false }: SelectStateInputProps) => {
toggleSelected({
id,
isSelected: value,
shiftKey,
});
},
[toggleSelected]
);
const handlePress = useCallback(() => {
handleSelectedChange({ id, value: !isSelected, shiftKey: false });
}, [id, isSelected, handleSelectedChange]);
return (
<TableRowButton onPress={handlePress}>
<TableSelectCell
id={id}
isSelected={isSelected}
onSelectedChange={handleSelectedChange}
/>
<TableRowCell>
{episodeNumber}
{isAnime ? ` (${absoluteEpisodeNumber})` : ''}
</TableRowCell>
<TableRowCell>{title}</TableRowCell>
<TableRowCell>{airDate}</TableRowCell>
</TableRowButton>
);
}
export default SelectEpisodeRow;