@platform/ui.datagrid
Version:
Isolated tabular DataGrid.
35 lines (34 loc) • 1.21 kB
JavaScript
import { coord, R } from './libs';
export function toSelectionValues(args) {
const { cells, selection } = args;
if (selection.all) {
return cells;
}
const res = {};
if (selection.cell) {
res[selection.cell] = cells[selection.cell];
}
const filterAxisRange = (field, start, end, coords) => {
return coords
.filter((cell) => cell[field] >= start && cell[field] <= end)
.map((cell) => cell.key);
};
let keys = [];
const all = Object.keys(cells).map((key) => coord.cell.toCell(key));
coord.range.union(selection.ranges).ranges.forEach((range) => {
if (coord.cell.isColumnRangeKey(range.key)) {
keys = [...keys, ...filterAxisRange('column', range.left.column, range.right.column, all)];
}
else if (coord.cell.isRowRangeKey(range.key)) {
keys = [...keys, ...filterAxisRange('row', range.left.row, range.right.row, all)];
}
else {
keys = [...keys, ...range.keys];
}
});
return R.uniq(keys).reduce((acc, key) => {
const value = cells[key] || { value: undefined };
acc[key] = value;
return acc;
}, res);
}