You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
import areAllSelected from './areAllSelected';
|
|
|
|
import getToggledRange from './getToggledRange';
|
|
|
|
|
|
|
|
function toggleSelected(state, items, id, selected, shiftKey) {
|
|
|
|
const lastToggled = state.lastToggled;
|
|
|
|
const selectedState = {
|
|
|
|
...state.selectedState,
|
|
|
|
[id]: selected
|
|
|
|
};
|
|
|
|
|
|
|
|
if (selected == null) {
|
|
|
|
delete selectedState[id];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (shiftKey && lastToggled) {
|
|
|
|
const { lower, upper } = getToggledRange(items, id, lastToggled);
|
|
|
|
|
|
|
|
for (let i = lower; i < upper; i++) {
|
|
|
|
selectedState[items[i].id] = selected;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
...areAllSelected(selectedState),
|
|
|
|
lastToggled: id,
|
|
|
|
selectedState
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export default toggleSelected;
|