expo-router
Version:
Expo Router is a file-based router for React Native and web applications.
113 lines (111 loc) • 3.48 kB
JavaScript
;
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