mirror of
https://github.com/Radarr/Radarr
synced 2025-12-06 08:28:50 +01:00
39 lines
959 B
TypeScript
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;
|