@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
47 lines • 1.48 kB
JavaScript
import React, { isValidElement, useMemo } from 'react';
import { useItem } from "../hooks/index.js";
import { convertJsxToString } from "../../../../shared/component-helper.js";
import withComponentMarkers from "../../../../shared/helpers/withComponentMarkers.js";
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
function ItemNo({
children
}) {
const {
index
} = useItem();
const processedChildren = useMemo(() => replaceItemNo(children, index), [children, index]);
return _jsx(_Fragment, {
children: processedChildren
});
}
export function replaceItemNo(node, index) {
if (node == null || node === false) {
return node;
}
if (typeof node === 'string' && node.includes('{itemNo}')) {
return node.replace('{itemNo}', String(index + 1));
}
if (Array.isArray(node)) {
return node.map((n, i) => _jsx(React.Fragment, {
children: replaceItemNo(n, index)
}, i));
}
if (isValidElement(node)) {
const {
children: childProps,
...rest
} = node.props || {};
const nextChildren = replaceItemNo(childProps, index);
return nextChildren === childProps ? node : React.createElement(node.type, rest, nextChildren);
}
const text = convertJsxToString(node);
if (text && text.includes('{itemNo}')) {
return replaceItemNo(text, index);
}
return node;
}
withComponentMarkers(ItemNo, {
_supportsSpacingProps: false
});
export default ItemNo;
//# sourceMappingURL=ItemNo.js.map