import React from 'react'; import { checkTrackClick } from '../click/trackClick'; import { injectPropsPress } from '../click/propsPress'; import { markTitle } from '../pageview/title'; import { trackState } from '../global'; import handleReactNavigation from '../reactNavigation/handleReactNavigation'; import type { ReactElement } from '../element/types'; export default function injectCreateElement() { React.createElement = new Proxy(React.createElement, { apply: (target, thisArgument, argumentsList) => { const element = Reflect.apply(target, thisArgument, argumentsList); return processElement(element) } }) // @ts-ignore global.applogJsxWithValidationMethodHooks = (element: ReactElement) => { return processElement(element) } } async function handleElementAsync(element:ReactElement){ try { console.log(`taskQueue.run call trackState.enableClick=${trackState.enableClick} trackState.enablePageView=${trackState.enablePageView} trackState.enablePageLeave=${trackState.enablePageLeave}`) // deal with click if (trackState.enableClick) { const node = checkTrackClick(element); if (node) { injectPropsPress(node); } } const enablePageView = trackState.enablePageView || trackState.enablePageLeave; // mark title element if (enablePageView) { markTitle(element); } console.log(`taskQueue enablePageView=${enablePageView} enableReactNavigation=${trackState.enableReactNavigation}`) // handle react navigation if (enablePageView && trackState.enableReactNavigation) { handleReactNavigation(element); } } catch (e: any) { console.warn(e.message); } } const processElement = (element:ReactElement):ReactElement=>{ if (!trackState.enable) { return element; } handleElementAsync(element); return element; }