UNPKG

react-aria

Version:
78 lines (74 loc) 3.56 kB
import {useMemo as $fyoYl$useMemo, cloneElement as $fyoYl$cloneElement} from "react"; /* * Copyright 2024 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ function $91ad91478b215293$export$727c8fc270210f13(props) { let { children: children, items: items, idScope: idScope, addIdAndValue: addIdAndValue, dependencies: dependencies = [] } = props; // In development, invalidate when the children function updates (e.g. HMR). let childrenString = (0, $fyoYl$useMemo)(()=>process.env.NODE_ENV !== 'production' && typeof children === 'function' ? children.toString() : undefined, [ children ]); // Invalidate the cache whenever dependencies change. // eslint-disable-next-line react-hooks/exhaustive-deps let cache = (0, $fyoYl$useMemo)(()=>new WeakMap(), [ ...dependencies, childrenString ]); return (0, $fyoYl$useMemo)(()=>{ if (items && typeof children === 'function') { let res = []; for (let item of items){ let cacheKey = $91ad91478b215293$var$isWeakKey(item) ? item : null; let rendered = cacheKey ? cache.get(cacheKey) : null; if (!rendered) { rendered = children(item); var _rendered_props_id, _ref; // @ts-ignore let id = (_ref = (_rendered_props_id = rendered.props.id) !== null && _rendered_props_id !== void 0 ? _rendered_props_id : item === null || item === void 0 ? void 0 : item.key) !== null && _ref !== void 0 ? _ref : item === null || item === void 0 ? void 0 : item.id; if (idScope != null && rendered.props.id == null && id != null) id = idScope + ':' + id; // If no id is inferred from data, use the index as the React key. // An id will be generated by the collection document. let key = id !== null && id !== void 0 ? id : res.length; // Note: only works if wrapped Item passes through id... rendered = (0, $fyoYl$cloneElement)(rendered, addIdAndValue ? { key: key, id: id, value: item } : { key: key }); if (cacheKey) cache.set(cacheKey, rendered); } res.push(rendered); } return res; } else if (typeof children !== 'function') return children; }, [ children, items, cache, idScope, addIdAndValue ]); } function $91ad91478b215293$var$isWeakKey(value) { switch(typeof value){ case 'object': return value != null; case 'function': case 'symbol': return true; default: return false; } } export {$91ad91478b215293$export$727c8fc270210f13 as useCachedChildren}; //# sourceMappingURL=useCachedChildren.js.map