UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

36 lines (35 loc) 1.1 kB
"use client"; import { Children, Fragment, isValidElement, useCallback, useEffect, useRef } from 'react'; import { warn } from "../../../../shared/helpers.js"; export function useVerifyChildren({ children, message, messageInfo, ignoreTypes }) { const verifyCount = useRef(0); verifyCount.current = 0; const verifyChild = useCallback(() => { verifyCount.current += 1; }, []); useEffect(() => { if (process.env.NODE_ENV !== 'production') { const count = countChildren(children, ignoreTypes); if (count > 0 && count > verifyCount.current) { warn(message, messageInfo); } } }, [children, message]); return { verifyChild }; } export const countChildren = (children, ignoreTypes, count = 0) => { return Children.toArray(children).reduce((count, child) => { if (child?.['type'] === Fragment) { return countChildren(child['props']?.children, ignoreTypes, count); } return count + (isValidElement(child) && !ignoreTypes?.includes(child?.type?.['name']) ? 1 : 0); }, count); }; //# sourceMappingURL=useVerifyChildren.js.map