import type { AutoTrackReactNavigation, AutoTrackReactNavigationScreen, } from '../config'; import config from '../config'; type ScreenNavigationEvent = ( route: any, eventData: any, config?: AutoTrackReactNavigationScreen ) => void; const defaultReactNavigationConfig: AutoTrackReactNavigation = { combineApp: true, disableApp: true, screens: [], }; function getReactNavigationConfig() { const reactNavigationConfig = config.getConfig().reactNavigation; return Object.assign( defaultReactNavigationConfig, reactNavigationConfig ?? {} ); } let screenConfigMap = new Map(); let ignoreScreenSet = new Set(); config.addListener(() => { const reactNavigationConfig = getReactNavigationConfig(); screenConfigMap = new Map(); ignoreScreenSet = new Set(); reactNavigationConfig.screens.map((screen) => { screenConfigMap.set(screen.screenName, screen); if (screen.ignore) { ignoreScreenSet.add(screen.screenName); } }); }); export default { getReactNavigationConfig, getScreenConfig( screenName: string | undefined ): AutoTrackReactNavigationScreen | undefined { if (!screenName) { return undefined; } return screenConfigMap.get(screenName); }, getIgnoreScreenSet(): Set { return ignoreScreenSet; }, getBeforeRemoveCallback(): ScreenNavigationEvent | undefined { const reactNavigationConfig = getReactNavigationConfig(); return reactNavigationConfig.beforeRemove; }, };