@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
44 lines (43 loc) • 1.58 kB
JavaScript
import { getNearestRow, getRowIndexFromEl } from "@1771technologies/lytenyte-shared";
export const makeRowHandleSelect = (grid) => {
return (e) => {
const mode = grid.state.rowSelectionMode.get();
if (mode === "none")
return;
const rowEl = getNearestRow(grid.state.gridId.get(), e.target);
if (!rowEl)
return;
const row = grid.api.rowByIndex(getRowIndexFromEl(rowEl));
if (!row)
return;
if (mode === "single") {
grid.api.rowSelect({
selected: row.id,
deselect: grid.state.rowSelectedIds.get().has(row.id),
});
return;
}
if (mode === "multiple") {
// We are doing an additive select
if (e.shiftKey) {
const isDeselect = grid.internal.rowSelectionLastWasDeselect.get();
grid.api.rowSelect({
selected: row.id,
deselect: isDeselect,
selectBetweenPivot: true,
selectChildren: grid.state.rowSelectChildren.get(),
});
}
else {
const isDeselect = grid.state.rowSelectedIds.get().has(row.id);
grid.api.rowSelect({
selected: row.id,
deselect: isDeselect,
pivot: row.id,
selectBetweenPivot: false,
selectChildren: grid.state.rowSelectChildren.get(),
});
}
}
};
};