@fullstory/react-native
Version:
The official FullStory React Native plugin
103 lines • 3.93 kB
JavaScript
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