import { pageInfoMap, trackState } from '../global'; import configGlobal from '../config'; import Track from '../track'; import reactNavigationConfig from '../reactNavigation/reactNavigationConfig'; import getPageStack from '../reactNavigation/getPageStack'; import trackReactNavigationPagLeave from '../reactNavigation/trackPageLeave'; import pageTimer from '../global/pageTimer'; export default function trackPageLeave(rootTag: number) { if (!trackState.enable || !trackState.enablePageLeave) { return; } const pageInfo = pageInfoMap.get(rootTag); if (!pageInfo) { console.warn( `track pageleave failed: did not found pageInfo, rootTag: ${rootTag}` ); return; } if (configGlobal.getIgnorePageSet().has(pageInfo.moduleName)) { return; } // work with react navigation const navigationConfig = reactNavigationConfig.getReactNavigationConfig(); if (trackState.enableReactNavigation && navigationConfig.combineApp) { const currentReactNavigationPage = getPageStack( pageInfo.rootTag ).getCurrent(); if (currentReactNavigationPage) { trackReactNavigationPagLeave(currentReactNavigationPage); } } if (trackState.enableReactNavigation && navigationConfig.disableApp) { const currentReactNavigationPage = getPageStack( pageInfo.rootTag ).getCurrent(); if (currentReactNavigationPage) { return; } } pageInfo.timer.stop(); pageTimer.removePageTimer(pageInfo.timer); const params = { page_key: pageInfo.pageKey, page_title: pageInfo.pageTitle, page_manual_key: pageInfo.pageManualKey, page_path: pageInfo.pagePath, is_back: pageInfo.isBack, $rn_root_tag: rootTag, $page_duration: pageInfo.timer.getDurationSeconds(), }; Track.pageleave(params); // console.info('pageleave', rootTag) }