@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
46 lines (45 loc) • 1.59 kB
JavaScript
;
"use client";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.countChildren = void 0;
exports.useVerifyChildren = useVerifyChildren;
var _includes = _interopRequireDefault(require("core-js-pure/stable/instance/includes.js"));
var _react = require("react");
var _helpers = require("../../../../shared/helpers.js");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function useVerifyChildren({
children,
message,
messageInfo,
ignoreTypes
}) {
const verifyCount = (0, _react.useRef)(0);
verifyCount.current = 0;
const verifyChild = (0, _react.useCallback)(() => {
verifyCount.current += 1;
}, []);
(0, _react.useEffect)(() => {
if (process.env.NODE_ENV !== 'production') {
const count = countChildren(children, ignoreTypes);
if (count > 0 && count > verifyCount.current) {
(0, _helpers.warn)(message, messageInfo);
}
}
}, [children, message]);
return {
verifyChild
};
}
const countChildren = (children, ignoreTypes, count = 0) => {
return _react.Children.toArray(children).reduce((count, child) => {
var _context;
if (child?.['type'] === _react.Fragment) {
return countChildren(child['props']?.children, ignoreTypes, count);
}
return count + ((0, _react.isValidElement)(child) && !((_context = ignoreTypes) == null ? void 0 : Function.call.bind((0, _includes.default)(_context), _context))?.(child?.type?.['name']) ? 1 : 0);
}, count);
};
exports.countChildren = countChildren;
//# sourceMappingURL=useVerifyChildren.js.map