UNPKG

expo-router

Version:

Expo Router is a file-based router for React Native and web applications.

113 lines (111 loc) • 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { convertComponentSrcToImageSource: null, convertIconColorPropToObject: null, useAwaitedScreensIcon: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: Object.getOwnPropertyDescriptor(all, name).get }); } _export(exports, { get convertComponentSrcToImageSource () { return convertComponentSrcToImageSource; }, get convertIconColorPropToObject () { return convertIconColorPropToObject; }, get useAwaitedScreensIcon () { return useAwaitedScreensIcon; } }); function _react() { const data = require("react"); _react = function() { return data; }; return data; } const _children = require("../../utils/children"); const _elements = require("../common/elements"); function convertIconColorPropToObject(iconColor) { if (iconColor) { if (typeof iconColor === 'object' && ('default' in iconColor || 'selected' in iconColor)) { return iconColor; } return { default: iconColor }; } return {}; } function useAwaitedScreensIcon(icon) { const src = icon && typeof icon === 'object' && 'src' in icon ? icon.src : undefined; const renderingMode = icon && typeof icon === 'object' && 'renderingMode' in icon ? icon.renderingMode : undefined; const [awaitedIcon, setAwaitedIcon] = (0, _react().useState)(undefined); (0, _react().useEffect)(()=>{ const loadIcon = async ()=>{ if (src && src instanceof Promise) { const awaitedSrc = await src; if (awaitedSrc) { setAwaitedIcon({ src: awaitedSrc }); } } }; loadIcon(); // Checking `src` rather than icon here, to avoid unnecessary re-renders // The icon object can be recreated, while src should stay the same // In this case as we control `VectorIcon`, it will only change if `family` or `name` props change // So we should be safe with promise resolving }, [ src ]); return (0, _react().useMemo)(()=>{ const resolved = isAwaitedIcon(icon) ? icon : awaitedIcon; if (resolved && renderingMode && 'src' in resolved) { return { ...resolved, renderingMode }; } return resolved; }, [ awaitedIcon, icon, renderingMode ]); } function isAwaitedIcon(icon) { return !icon || !('src' in icon && icon.src instanceof Promise); } function convertComponentSrcToImageSource(src, renderingMode) { let result; if ((0, _children.isChildOfType)(src, _elements.NativeTabsTriggerVectorIcon)) { const props = src.props; result = { src: props.family.getImageSource(props.name, 24, 'white') }; } else if ((0, _children.isChildOfType)(src, _elements.NativeTabsTriggerPromiseIcon)) { result = { src: src.props.loader() }; } else { console.warn('Only VectorIcon is supported as a React element in Icon.src'); return undefined; } if (renderingMode) { result = { ...result, renderingMode }; } return result; } //# sourceMappingURL=icon.js.map