1import React from 'react'; 2import { NativeModules, requireNativeComponent } from 'react-native'; 3/** 4 * A drop-in replacement for `requireNativeComponent`. 5 */ 6export function requireNativeViewManager(viewName) { 7 const { viewManagersMetadata } = NativeModules.NativeUnimoduleProxy; 8 const viewManagerConfig = viewManagersMetadata?.[viewName]; 9 if (__DEV__ && !viewManagerConfig) { 10 const exportedViewManagerNames = Object.keys(viewManagersMetadata).join(', '); 11 console.warn(`The native view manager required by name (${viewName}) from NativeViewManagerAdapter isn't exported by expo-modules-core. Views of this type may not render correctly. Exported view managers: [${exportedViewManagerNames}].`); 12 } 13 // Set up the React Native native component, which is an adapter to the universal module's view 14 // manager 15 const reactNativeViewName = `ViewManagerAdapter_${viewName}`; 16 const ReactNativeComponent = requireNativeComponent(reactNativeViewName); 17 const proxiedPropsNames = viewManagerConfig?.propsNames ?? []; 18 // Define a component for universal-module authors to access their native view manager 19 function NativeComponentAdapter(props, ref) { 20 const nativeProps = omit(props, proxiedPropsNames); 21 const proxiedProps = pick(props, proxiedPropsNames); 22 return React.createElement(ReactNativeComponent, { ...nativeProps, proxiedProperties: proxiedProps, ref: ref }); 23 } 24 NativeComponentAdapter.displayName = `Adapter<${viewName}>`; 25 return React.forwardRef(NativeComponentAdapter); 26} 27function omit(props, propNames) { 28 const copied = { ...props }; 29 for (const propName of propNames) { 30 delete copied[propName]; 31 } 32 return copied; 33} 34function pick(props, propNames) { 35 return propNames.reduce((prev, curr) => { 36 if (curr in props) { 37 prev[curr] = props[curr]; 38 } 39 return prev; 40 }, {}); 41} 42//# sourceMappingURL=NativeViewManagerAdapter.native.js.map