UNPKG

react-native-ios-utilities

Version:

Utilities for react-native + iOS and wrappers for using swift together with fabric/paper + JSI

98 lines (97 loc) 4.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RNIDetachedView = void 0; var React = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _RNIDetachedNativeView = require("./RNIDetachedNativeView.js"); var _DetachedSubviewsMap = require("./DetachedSubviewsMap.js"); var _Helpers = require("../../misc/Helpers.js"); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } const RNIDetachedView = exports.RNIDetachedView = /*#__PURE__*/React.forwardRef((props, ref) => { const [viewID, setViewID] = React.useState(); const [reactTag, setReactTag] = React.useState(); const [isDetachedInNative, setIsDetachedInNative] = React.useState(false); const [detachedSubviewsMap, setDetachedSubviewsMap] = React.useState({}); React.useImperativeHandle(ref, () => ({ getReactTag: () => { return reactTag; }, getViewID: () => { return viewID; }, getDetachedSubviewsMap: () => { return detachedSubviewsMap; }, attachToWindow: async commandArgs => { if (viewID == null) return; const module = _Helpers.Helpers.getRNIUtilitiesModule(); setIsDetachedInNative(true); await module.viewCommandRequest(/* viewID : */viewID, /* commandName: */'attachToWindow', /* commandArgs: */commandArgs); }, presentInModal: async commandArgs => { if (viewID == null) return; const module = _Helpers.Helpers.getRNIUtilitiesModule(); setIsDetachedInNative(true); await module.viewCommandRequest(/* viewID : */viewID, /* commandName: */'presentInModal', /* commandArgs: */commandArgs); } })); const shouldEnableDebugBackgroundColors = props.shouldEnableDebugBackgroundColors ?? false; const shouldImmediatelyDetach = props.shouldImmediatelyDetach ?? false; const isDetached = shouldImmediatelyDetach || isDetachedInNative; const reactChildrenCount = React.Children.count(props.children); const children = React.Children.map(props.children, child => { if (/*#__PURE__*/React.isValidElement(child) && child.type === React.Fragment) { return child; } return /*#__PURE__*/React.cloneElement(child, { isParentDetached: isDetached, shouldEnableDebugBackgroundColors, detachedSubviewsMap }); }); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RNIDetachedNativeView.RNIDetachedNativeView, { ...props, style: [isDetached && styles.detachedView, shouldEnableDebugBackgroundColors && styles.detachedViewDebug, props.style], reactChildrenCount: reactChildrenCount, onDidSetViewID: event => { setViewID(event.nativeEvent.viewID); setReactTag(event.nativeEvent.reactTag); props.onDidSetViewID?.(event); event.stopPropagation(); }, onViewDidDetachFromParent: event => { props.onViewDidDetachFromParent?.(event); event.stopPropagation(); setIsDetachedInNative(true); }, onContentViewDidDetach: event => { props.onContentViewDidDetach?.(event); event.stopPropagation(); const detachedSubviewViewID = event.nativeEvent.viewID; const prevEntry = detachedSubviewsMap[detachedSubviewViewID]; setDetachedSubviewsMap({ ...detachedSubviewsMap, [detachedSubviewViewID]: { ..._DetachedSubviewsMap.DEFAULT_DETACHED_SUBVIEW_ENTRY, ...prevEntry, didDetachFromOriginalParent: true } }); }, children: children }); }); const styles = _reactNative.StyleSheet.create({ detachedView: { position: 'absolute', pointerEvents: 'none', opacity: 0 }, detachedViewDebug: { backgroundColor: 'rgba(255,0,0,0.3)' } }); //# sourceMappingURL=RNIDetachedView.js.map