UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

43 lines 1.44 kB
import React, { isValidElement, useMemo } from 'react'; import { useItem } from "../hooks/index.js"; import { convertJsxToString } from "../../../../shared/component-helper.js"; function ItemNo({ children }) { const { index } = useItem(); const processedChildren = useMemo(() => replaceItemNo(children, index), [children, index]); return React.createElement(React.Fragment, null, processedChildren); } const TOKEN_REGEX = /\{itemN(r|o)\}/g; export function replaceItemNo(children, index) { const replaceIn = node => { if (node == null || node === false) return node; if (typeof node === 'string') { return TOKEN_REGEX.test(node) ? node.replace(TOKEN_REGEX, String(index + 1)) : node; } if (Array.isArray(node)) { return node.map((n, i) => React.createElement(React.Fragment, { key: i }, replaceIn(n))); } if (isValidElement(node)) { const { children: childProps, ...rest } = node.props || {}; const nextChildren = replaceIn(childProps); return nextChildren === childProps ? node : React.cloneElement(node, rest, nextChildren); } const text = convertJsxToString(node); if (text && text.includes('{itemN')) { return text.replace(TOKEN_REGEX, String(index + 1)); } return node; }; return replaceIn(children); } ItemNo._supportsSpacingProps = false; export default ItemNo; //# sourceMappingURL=ItemNo.js.map