UNPKG

@fullstory/react-native

Version:
103 lines 3.93 kB
import { NativeModules, Platform } from 'react-native'; import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; import { isTurboModuleEnabled } from './utils'; import { LogLevel } from './fullstoryInterface'; const FullStory = isTurboModuleEnabled ? require('./NativeFullStory').default : NativeModules.FullStory; const { anonymize, identify, setUserVars, onReady, getCurrentSession, getCurrentSessionURL, consent, event, shutdown, restart, log, resetIdleTimer } = FullStory; const FullStoryPrivate = isTurboModuleEnabled ? require('./NativeFullStoryPrivate').default : NativeModules.FullStoryPrivate; const identifyWithProperties = (uid, userVars = {}) => identify(uid, userVars); export { FSPage } from './FSPage'; /* Calling these commands sequentially will *not* lead to an intermediate state where views have incomplete attribute values. React's rendering phases protects against this race condition. See DOC-1863 for more information. */ const SUPPORTED_FS_ATTRIBUTES = ['fsClass', 'fsAttribute', 'fsTagName', 'dataElement', 'dataComponent', 'dataSourceFile']; const Commands = codegenNativeCommands({ supportedCommands: SUPPORTED_FS_ATTRIBUTES }); let getInternalInstanceHandleFromPublicInstance; try { getInternalInstanceHandleFromPublicInstance = require('react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance').getInternalInstanceHandleFromPublicInstance; } catch (e) {} export function applyFSPropertiesWithRef(existingRef) { return function (element) { if (isTurboModuleEnabled && Platform.OS === 'ios') { let currentProps; if (getInternalInstanceHandleFromPublicInstance && element) { var _getInternalInstanceH; currentProps = (_getInternalInstanceH = getInternalInstanceHandleFromPublicInstance(element)) === null || _getInternalInstanceH === void 0 || (_getInternalInstanceH = _getInternalInstanceH.stateNode) === null || _getInternalInstanceH === void 0 ? void 0 : _getInternalInstanceH.canonical.currentProps; } else { // https://github.com/facebook/react-native/blob/87d2ea9c364c7ea393d11718c195dfe580c916ef/packages/react-native/Libraries/Components/TextInput/TextInputState.js#L109C23-L109C67 // @ts-expect-error `currentProps` is missing in `NativeMethods` currentProps = element === null || element === void 0 ? void 0 : element.currentProps; } if (currentProps) { const fsClass = currentProps.fsClass; if (fsClass) { Commands.fsClass(element, fsClass); } const fsAttribute = currentProps.fsAttribute; if (fsAttribute) { Commands.fsAttribute(element, fsAttribute); } const fsTagName = currentProps.fsTagName; if (fsTagName) { Commands.fsTagName(element, fsTagName); } const dataElement = currentProps.dataElement; if (dataElement) { Commands.dataElement(element, dataElement); } const dataComponent = currentProps.dataComponent; if (dataComponent) { Commands.dataComponent(element, dataComponent); } const dataSourceFile = currentProps.dataSourceFile; if (dataSourceFile) { Commands.dataSourceFile(element, dataSourceFile); } } } if (existingRef) { if (existingRef instanceof Function) { existingRef(element); } else { existingRef.current = element; } } }; } const FullstoryAPI = { anonymize, identify: identifyWithProperties, setUserVars, onReady, getCurrentSession, getCurrentSessionURL, consent, event, shutdown, restart, log, resetIdleTimer, LogLevel }; export const PrivateInterface = Platform.OS === 'android' ? { onFSPressForward: FullStoryPrivate.onFSPressForward } : {}; export default FullstoryAPI; //# sourceMappingURL=index.js.map