UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

47 lines 1.48 kB
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