Radarr/frontend/src/Utilities/Table/toggleSelected.ts
Mark McDowall 8caa839d99 Convert Table to TypeScript
(cherry picked from commit 699120a8fd54be9e70fb9a83298f94c8cb6a80bb)
2025-04-27 20:29:10 +03:00

39 lines
959 B
TypeScript

import ModelBase from 'App/ModelBase';
import { SelectState } from 'Helpers/Hooks/useSelectState';
import areAllSelected from './areAllSelected';
import getToggledRange from './getToggledRange';
function toggleSelected<T extends ModelBase>(
selectState: SelectState,
items: T[],
id: number | string,
selected: boolean | null,
shiftKey: boolean
) {
const lastToggled = selectState.lastToggled;
const nextSelectedState = {
...selectState.selectedState,
};
if (selected == null) {
delete nextSelectedState[id];
} else {
nextSelectedState[id] = selected;
if (shiftKey && lastToggled) {
const { lower, upper } = getToggledRange(items, id, lastToggled);
for (let i = lower; i < upper; i++) {
nextSelectedState[items[i].id] = selected;
}
}
}
return {
...areAllSelected(nextSelectedState),
lastToggled: id,
selectedState: nextSelectedState,
};
}
export default toggleSelected;