@native-html/heuristic-table-plugin
Version:
🔠A 100% native component using heuristics to render tables in react-native-render-html
71 lines (49 loc) • 3.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = computeColumnWidths;
var _pipe = _interopRequireDefault(require("ramda/src/pipe"));
var _map = _interopRequireDefault(require("ramda/src/map"));
var _prop = _interopRequireDefault(require("ramda/src/prop"));
var _sum = _interopRequireDefault(require("ramda/src/sum"));
var _min = _interopRequireDefault(require("ramda/src/min"));
var _reduce = _interopRequireDefault(require("ramda/src/reduce"));
var _converge = _interopRequireDefault(require("ramda/src/converge"));
var _subtract = _interopRequireDefault(require("ramda/src/subtract"));
var _partialRight = _interopRequireDefault(require("ramda/src/partialRight"));
var _divide = _interopRequireDefault(require("ramda/src/divide"));
var _add = _interopRequireDefault(require("ramda/src/add"));
var _zip = _interopRequireDefault(require("ramda/src/zip"));
var _multiply = _interopRequireDefault(require("ramda/src/multiply"));
var _identity = _interopRequireDefault(require("ramda/src/identity"));
var _reduceColumnConstraints = _interopRequireDefault(require("./reduceColumnConstraints"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const mapMinWidths = (0, _map.default)((0, _prop.default)('minWidth'));
const mapspreads = (0, _map.default)((0, _prop.default)('spread')); // Compute the normal content density for each column,
// that is content density with the zero reference as
// the shortest column.
const mapNormalContentDensity = (0, _converge.default)((m, list) => {
return (0, _map.default)((0, _partialRight.default)(_subtract.default, [m]))(list);
}, [(0, _reduce.default)(_min.default, Infinity), _identity.default]);
const weightContentDensity = (0, _converge.default)((s, list) => {
return (0, _map.default)((0, _partialRight.default)(_divide.default, [s]))(list);
}, [_sum.default, _identity.default]);
const mapWeightedColumnCoeffs = (0, _pipe.default)((0, _map.default)((0, _prop.default)('contentDensity')), mapNormalContentDensity, weightContentDensity);
const totalMinWidths = (0, _pipe.default)(mapMinWidths, _sum.default);
function computeColumnWidths(display) {
const contentWidth = display.contentWidth;
let shouldClampWidth = !display.forceStretch;
const columnConstraints = (0, _reduceColumnConstraints.default)(display.cells);
const minWidths = mapMinWidths(columnConstraints);
const spreads = mapspreads(columnConstraints);
const sumOfMinWidths = totalMinWidths(columnConstraints);
if (contentWidth < sumOfMinWidths) {
return minWidths;
}
const widthToAssign = contentWidth - sumOfMinWidths;
const clampWidths = (0, _pipe.default)((0, _zip.default)(spreads), (0, _map.default)((0, _reduce.default)(_min.default, Infinity)));
const columns = (0, _pipe.default)(mapWeightedColumnCoeffs, (0, _map.default)((0, _multiply.default)(widthToAssign)), (0, _zip.default)(minWidths), (0, _map.default)((0, _reduce.default)(_add.default, 0)), shouldClampWidth ? clampWidths : _identity.default)(columnConstraints);
return columns;
}
//# sourceMappingURL=computeColumnWidths.js.map