UNPKG

5.88 kBSource Map (JSON)View Raw
1{"version":3,"names":["PrivateValueStore","useNavigationHelpers","id","navigatorId","onAction","getState","emitter","router","onUnhandledAction","React","useContext","UnhandledActionContext","parentNavigationHelpers","NavigationContext","useMemo","dispatch","op","action","handled","actions","actionCreators","CommonActions","helpers","Object","keys","reduce","acc","name","navigationHelpers","emit","isFocused","canGoBack","state","getStateForAction","goBack","routeNames","routeParamList","routeGetIdList","getId","getParent","undefined","current"],"sources":["useNavigationHelpers.tsx"],"sourcesContent":["import {\n CommonActions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationContext from './NavigationContext';\nimport { NavigationHelpers, PrivateValueStore } from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n\ntype Options<State extends NavigationState, Action extends NavigationAction> = {\n id: string | undefined;\n onAction: (action: NavigationAction) => boolean;\n getState: () => State;\n emitter: NavigationEventEmitter<any>;\n router: Router<State, Action>;\n};\n\n/**\n * Navigation object with helper methods to be used by a navigator.\n * This object includes methods for common actions as well as methods the parent screen's navigation object.\n */\nexport default function useNavigationHelpers<\n State extends NavigationState,\n ActionHelpers extends Record<string, () => void>,\n Action extends NavigationAction,\n EventMap extends Record<string, any>\n>({\n id: navigatorId,\n onAction,\n getState,\n emitter,\n router,\n}: Options<State, Action>) {\n const onUnhandledAction = React.useContext(UnhandledActionContext);\n const parentNavigationHelpers = React.useContext(NavigationContext);\n\n return React.useMemo(() => {\n const dispatch = (op: Action | ((state: State) => Action)) => {\n const action = typeof op === 'function' ? op(getState()) : op;\n\n const handled = onAction(action);\n\n if (!handled) {\n onUnhandledAction?.(action);\n }\n };\n\n const actions = {\n ...router.actionCreators,\n ...CommonActions,\n };\n\n const helpers = Object.keys(actions).reduce((acc, name) => {\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n acc[name] = (...args: any) => dispatch(actions[name](...args));\n return acc;\n }, {} as ActionHelpers);\n\n const navigationHelpers = {\n ...parentNavigationHelpers,\n ...helpers,\n dispatch,\n emit: emitter.emit,\n isFocused: parentNavigationHelpers\n ? parentNavigationHelpers.isFocused\n : () => true,\n canGoBack: () => {\n const state = getState();\n\n return (\n router.getStateForAction(state, CommonActions.goBack() as Action, {\n routeNames: state.routeNames,\n routeParamList: {},\n routeGetIdList: {},\n }) !== null ||\n parentNavigationHelpers?.canGoBack() ||\n false\n );\n },\n getId: () => navigatorId,\n getParent: (id?: string) => {\n if (id !== undefined) {\n let current = navigationHelpers;\n\n while (current && id !== current.getId()) {\n current = current.getParent();\n }\n\n return current;\n }\n\n return parentNavigationHelpers;\n },\n getState,\n } as NavigationHelpers<ParamListBase, EventMap> & ActionHelpers;\n\n return navigationHelpers;\n }, [\n navigatorId,\n emitter.emit,\n getState,\n onAction,\n onUnhandledAction,\n parentNavigationHelpers,\n router,\n ]);\n}\n"],"mappings":";;;;;;;AAAA;;AAOA;;AAEA;;AACA;;AACA;;;;;;;;AAGA;AACA;AACAA,wBAAA;;AAUA;AACA;AACA;AACA;AACe,SAASC,oBAAT,OAWY;EAAA,IANzB;IACAC,EAAE,EAAEC,WADJ;IAEAC,QAFA;IAGAC,QAHA;IAIAC,OAJA;IAKAC;EALA,CAMyB;EACzB,MAAMC,iBAAiB,GAAGC,KAAK,CAACC,UAAN,CAAiBC,+BAAjB,CAA1B;EACA,MAAMC,uBAAuB,GAAGH,KAAK,CAACC,UAAN,CAAiBG,0BAAjB,CAAhC;EAEA,OAAOJ,KAAK,CAACK,OAAN,CAAc,MAAM;IACzB,MAAMC,QAAQ,GAAIC,EAAD,IAA6C;MAC5D,MAAMC,MAAM,GAAG,OAAOD,EAAP,KAAc,UAAd,GAA2BA,EAAE,CAACX,QAAQ,EAAT,CAA7B,GAA4CW,EAA3D;MAEA,MAAME,OAAO,GAAGd,QAAQ,CAACa,MAAD,CAAxB;;MAEA,IAAI,CAACC,OAAL,EAAc;QACZV,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAGS,MAAH,CAAjB;MACD;IACF,CARD;;IAUA,MAAME,OAAO,GAAG,EACd,GAAGZ,MAAM,CAACa,cADI;MAEd,GAAGC;IAFW,CAAhB;IAKA,MAAMC,OAAO,GAAGC,MAAM,CAACC,IAAP,CAAYL,OAAZ,EAAqBM,MAArB,CAA4B,CAACC,GAAD,EAAMC,IAAN,KAAe;MACzD;MACAD,GAAG,CAACC,IAAD,CAAH,GAAY;QAAA,OAAkBZ,QAAQ,CAACI,OAAO,CAACQ,IAAD,CAAP,CAAc,YAAd,CAAD,CAA1B;MAAA,CAAZ;;MACA,OAAOD,GAAP;IACD,CAJe,EAIb,EAJa,CAAhB;IAMA,MAAME,iBAAiB,GAAG,EACxB,GAAGhB,uBADqB;MAExB,GAAGU,OAFqB;MAGxBP,QAHwB;MAIxBc,IAAI,EAAEvB,OAAO,CAACuB,IAJU;MAKxBC,SAAS,EAAElB,uBAAuB,GAC9BA,uBAAuB,CAACkB,SADM,GAE9B,MAAM,IAPc;MAQxBC,SAAS,EAAE,MAAM;QACf,MAAMC,KAAK,GAAG3B,QAAQ,EAAtB;QAEA,OACEE,MAAM,CAAC0B,iBAAP,CAAyBD,KAAzB,EAAgCX,sBAAA,CAAca,MAAd,EAAhC,EAAkE;UAChEC,UAAU,EAAEH,KAAK,CAACG,UAD8C;UAEhEC,cAAc,EAAE,EAFgD;UAGhEC,cAAc,EAAE;QAHgD,CAAlE,MAIO,IAJP,KAKAzB,uBALA,aAKAA,uBALA,uBAKAA,uBAAuB,CAAEmB,SAAzB,EALA,KAMA,KAPF;MASD,CApBuB;MAqBxBO,KAAK,EAAE,MAAMnC,WArBW;MAsBxBoC,SAAS,EAAGrC,EAAD,IAAiB;QAC1B,IAAIA,EAAE,KAAKsC,SAAX,EAAsB;UACpB,IAAIC,OAAO,GAAGb,iBAAd;;UAEA,OAAOa,OAAO,IAAIvC,EAAE,KAAKuC,OAAO,CAACH,KAAR,EAAzB,EAA0C;YACxCG,OAAO,GAAGA,OAAO,CAACF,SAAR,EAAV;UACD;;UAED,OAAOE,OAAP;QACD;;QAED,OAAO7B,uBAAP;MACD,CAlCuB;MAmCxBP;IAnCwB,CAA1B;IAsCA,OAAOuB,iBAAP;EACD,CA7DM,EA6DJ,CACDzB,WADC,EAEDG,OAAO,CAACuB,IAFP,EAGDxB,QAHC,EAIDD,QAJC,EAKDI,iBALC,EAMDI,uBANC,EAODL,MAPC,CA7DI,CAAP;AAsED"}
\No newline at end of file