@native-html/heuristic-table-plugin
Version:
🔠A 100% native component using heuristics to render tables in react-native-render-html
46 lines (41 loc) • 1.43 kB
JavaScript
import groupBy from 'ramda/src/groupBy';
import prop from 'ramda/src/prop';
import pipe from 'ramda/src/pipe';
import reduce from 'ramda/src/reduce';
import map from 'ramda/src/map';
import flatten from 'ramda/src/flatten';
import values from 'ramda/src/values';
import mapObjIndexed from 'ramda/src/mapObjIndexed';
const getColumnMetrics = pipe(map(prop('constraints')), reduce((columnConstraints, cellConstraints) => {
return {
minWidth: Math.max(columnConstraints.minWidth, cellConstraints.minWidth),
contentDensity: columnConstraints.contentDensity + cellConstraints.contentDensity,
spread: Math.max(columnConstraints.spread, cellConstraints.contentDensity)
};
}, {
minWidth: 0,
spread: 0,
contentDensity: 0
}));
function splitColspanCells(cell) {
if (cell.lenX > 1) {
const cells = [];
for (let i = 0; i < cell.lenX; i++) {
cells[i] = {
lenX: 1,
lenY: cell.lenY,
constraints: {
minWidth: cell.constraints.minWidth / cell.lenX,
contentDensity: cell.constraints.contentDensity / cell.lenX
},
x: cell.x + i,
y: cell.y
};
}
return cells;
}
return cell;
}
const reduceColumnConstraints = pipe(pipe(map(splitColspanCells), flatten), groupBy(pipe(prop('x'), String)), mapObjIndexed(getColumnMetrics), values);
export default reduceColumnConstraints;
//# sourceMappingURL=reduceColumnConstraints.js.map