@itwin/itwinui-react
Version:
A react component library for iTwinUI
33 lines (32 loc) • 1.03 kB
JavaScript
import * as React from 'react';
export const useSubRowSelection = (hooks) => {
hooks.useInstance.push(useInstance);
};
let useInstance = (instance) => {
let selectedFlatRows = React.useMemo(() => {
let selectedFlatRows = [];
let setSelectionState = (row, selectedRowIds) => {
let isSomeSubRowsSelected = false;
row.initialSubRows.forEach((subRow) => {
setSelectionState(subRow, selectedRowIds);
if (subRow.isSelected || subRow.isSomeSelected)
isSomeSubRowsSelected = true;
});
if (selectedRowIds[row.id]) {
row.isSelected = true;
row.isSomeSelected = false;
selectedFlatRows.push(row);
} else {
row.isSelected = false;
row.isSomeSelected = isSomeSubRowsSelected;
}
};
instance.rows.forEach((row) =>
setSelectionState(row, instance.state.selectedRowIds),
);
return selectedFlatRows;
}, [instance.rows, instance.state.selectedRowIds]);
Object.assign(instance, {
selectedFlatRows,
});
};