amis-rpc-design/node_modules/antd/es/descriptions/hooks/useRow.js
2023-10-07 19:42:30 +08:00

53 lines
1.7 KiB
JavaScript

import { useMemo } from 'react';
import { devUseWarning } from '../../_util/warning';
function getFilledItem(rowItem, rowRestCol, span) {
let clone = rowItem;
let exceed = false;
if (span === undefined || span > rowRestCol) {
clone = Object.assign(Object.assign({}, rowItem), {
span: rowRestCol
});
exceed = span !== undefined;
}
return [clone, exceed];
}
// Calculate the sum of span in a row
function getCalcRows(rowItems, mergedColumn) {
const rows = [];
let tmpRow = [];
let rowRestCol = mergedColumn;
let exceed = false;
rowItems.filter(n => n).forEach((rowItem, index) => {
const span = rowItem === null || rowItem === void 0 ? void 0 : rowItem.span;
const mergedSpan = span || 1;
// Additional handle last one
if (index === rowItems.length - 1) {
const [item, itemExceed] = getFilledItem(rowItem, rowRestCol, span);
exceed = exceed || itemExceed;
tmpRow.push(item);
rows.push(tmpRow);
return;
}
if (mergedSpan < rowRestCol) {
rowRestCol -= mergedSpan;
tmpRow.push(rowItem);
} else {
const [item, itemExceed] = getFilledItem(rowItem, rowRestCol, mergedSpan);
exceed = exceed || itemExceed;
tmpRow.push(item);
rows.push(tmpRow);
rowRestCol = mergedColumn;
tmpRow = [];
}
});
return [rows, exceed];
}
const useRow = (mergedColumn, items) => {
const [rows, exceed] = useMemo(() => getCalcRows(items, mergedColumn), [items, mergedColumn]);
if (process.env.NODE_ENV !== 'production') {
const warning = devUseWarning('Descriptions');
process.env.NODE_ENV !== "production" ? warning(!exceed, 'usage', 'Sum of column `span` in a line not match `column` of Descriptions.') : void 0;
}
return rows;
};
export default useRow;