Skip to content

Commit

Permalink
refactor: enhancement code
Browse files Browse the repository at this point in the history
  • Loading branch information
RedJue committed Jul 17, 2023
1 parent e56c425 commit d470880
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 32 deletions.
59 changes: 28 additions & 31 deletions components/descriptions/hooks/useRow.ts
Expand Up @@ -26,41 +26,38 @@ function getFilledItem(
}

// Convert children into items
function transChildren2Items(items?: DescriptionsItemType[], childNodes?: React.ReactNode) {
if (Array.isArray(items)) {
return items;
}

return toArray(childNodes).map((node) => node?.props);
}
const transChildren2Items = (childNodes?: React.ReactNode) =>
toArray(childNodes).map((node) => node?.props);

// Calculate the sum of span in a row
function getCalcRows(rowItems: DescriptionsItemType[], mergedColumn: number) {
const rows: DescriptionsItemType[][] = [];
let tmpRow: DescriptionsItemType[] = [];
let rowRestCol = mergedColumn;

rowItems.forEach((rowItem, index) => {
const span = rowItem?.span;
const mergedSpan = span || 1;
rowItems
.filter((n) => n)
.forEach((rowItem, index) => {
const span = rowItem?.span;
const mergedSpan = span || 1;

// Additional handle last one
if (index === rowItems.length - 1) {
tmpRow.push(getFilledItem(rowItem, rowRestCol, span));
rows.push(tmpRow);
return;
}
// Additional handle last one
if (index === rowItems.length - 1) {
tmpRow.push(getFilledItem(rowItem, rowRestCol, span));
rows.push(tmpRow);
return;
}

if (mergedSpan < rowRestCol) {
rowRestCol -= mergedSpan;
tmpRow.push(rowItem);
} else {
tmpRow.push(getFilledItem(rowItem, rowRestCol, mergedSpan));
rows.push(tmpRow);
rowRestCol = mergedColumn;
tmpRow = [];
}
});
if (mergedSpan < rowRestCol) {
rowRestCol -= mergedSpan;
tmpRow.push(rowItem);
} else {
tmpRow.push(getFilledItem(rowItem, rowRestCol, mergedSpan));
rows.push(tmpRow);
rowRestCol = mergedColumn;
tmpRow = [];
}
});

return rows;
}
Expand All @@ -71,13 +68,13 @@ const useRow = (
children?: React.ReactNode,
) => {
const rows = useMemo(() => {
const rowItems = transChildren2Items(items, children)?.filter(
(n) => n,
) as DescriptionsItemType[];
return getCalcRows(rowItems, mergedColumn);
if (Array.isArray(items)) {
return getCalcRows(items, mergedColumn);
}
return getCalcRows(transChildren2Items(children), mergedColumn);
}, [items, children, mergedColumn]);

return [rows];
return rows;
};

export default useRow;
2 changes: 1 addition & 1 deletion components/descriptions/index.tsx
Expand Up @@ -94,7 +94,7 @@ const Descriptions: React.FC<DescriptionsProps> & CompoundedComponent = (props)
const mergedColumn = getColumn(column, screens);

const mergedSize = useSize(customizeSize);
const [rows] = useRow(mergedColumn, items, children);
const rows = useRow(mergedColumn, items, children);

const [wrapSSR, hashId] = useStyle(prefixCls);
const responsiveObserver = useResponsiveObserver();
Expand Down

0 comments on commit d470880

Please sign in to comment.