import { buildPage, ReactNavigationPageInfo } from './getPageStack'; import { NativePageInfo, pageInfoAsync, pageviewListener, trackState, } from '../global'; import pageTimer from '../global/pageTimer'; import reactNavigationConfig from './reactNavigationConfig'; import Track from '../track'; export default function trackPageView( info: ReactNavigationPageInfo, refer?: ReactNavigationPageInfo, nativePageInfo?: NativePageInfo ) { if ( !trackState.enable || !trackState.enableReactNavigation || (!trackState.enablePageView && !trackState.enablePageLeave) ) { return; } info.timer = pageTimer.buildPageTimer(); info.timer.start(); if (!trackState.enablePageView) { return; } const params = { ...buildPage(info), $rn_root_tag: info.rootTag, refer_page_key: '', refer_page_title: '', refer_page_manual_key: '', referrer_page_path: '', }; pageviewListener.trigger({ reactNavigation: info }); // use native refer when combineApp is on if (!refer && reactNavigationConfig.getReactNavigationConfig().combineApp) { if (nativePageInfo) { Object.assign(params, { refer_page_key: nativePageInfo.refer_page_key ?? '', refer_page_title: nativePageInfo.refer_page_title ?? '', refer_page_manual_key: nativePageInfo.refer_page_manual_key ?? '', referrer_page_path: nativePageInfo.referrer_page_path ?? '', }); Track.pageview(params); return; } else { pageInfoAsync.getPageInfo(info.rootTag).then((pageInfo) => { Object.assign(params, { refer_page_key: pageInfo?.pageKey ?? '', refer_page_title: pageInfo?.pageTitle ?? '', refer_page_manual_key: pageInfo?.pageManualKey ?? '', referrer_page_path: pageInfo?.pagePath ?? '', }); Track.pageview(params); }); } return; } const referConfig = reactNavigationConfig.getScreenConfig(refer?.screenName); Object.assign(params, { refer_page_key: refer?.screenName ?? '', refer_page_title: refer?.title ?? refer?.screenName ?? '', refer_page_manual_key: referConfig?.pageID ?? '', referrer_page_path: refer?.path ?? referConfig?.pagePath ?? '', }); Track.pageview(params); }