UNPKG

2.94 kBSource Map (JSON)View Raw
1{"version":3,"names":["usePreventRemove","preventRemove","callback","id","React","useState","nanoid","navigation","useNavigation","key","routeKey","useRoute","setPreventRemove","usePreventRemoveContext","useEffect","beforeRemoveListener","useLatestCallback","e","preventDefault","data","addListener"],"sources":["usePreventRemove.tsx"],"sourcesContent":["import type { NavigationAction } from '@react-navigation/routers';\nimport { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\n\nimport type { EventListenerCallback, EventMapCore } from './types';\nimport useNavigation from './useNavigation';\nimport usePreventRemoveContext from './usePreventRemoveContext';\nimport useRoute from './useRoute';\n\n/**\n * Hook to prevent screen from being removed. Can be used to prevent users from leaving the screen.\n *\n * @param preventRemove Boolean indicating whether to prevent screen from being removed.\n * @param callback Function which is executed when screen was prevented from being removed.\n */\nexport default function usePreventRemove(\n preventRemove: boolean,\n callback: (options: { data: { action: NavigationAction } }) => void\n) {\n const [id] = React.useState(() => nanoid());\n\n const navigation = useNavigation();\n const { key: routeKey } = useRoute();\n\n const { setPreventRemove } = usePreventRemoveContext();\n\n React.useEffect(() => {\n setPreventRemove(id, routeKey, preventRemove);\n return () => {\n setPreventRemove(id, routeKey, false);\n };\n }, [setPreventRemove, id, routeKey, preventRemove]);\n\n const beforeRemoveListener = useLatestCallback<\n EventListenerCallback<EventMapCore<any>, 'beforeRemove'>\n >((e) => {\n if (!preventRemove) {\n return;\n }\n\n e.preventDefault();\n\n callback({ data: e.data });\n });\n\n React.useEffect(\n () => navigation?.addListener('beforeRemove', beforeRemoveListener),\n [navigation, beforeRemoveListener]\n );\n}\n"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,gBAAT,CACbC,aADa,EAEbC,QAFa,EAGb;EACA,MAAM,CAACC,EAAD,IAAOC,KAAK,CAACC,QAAN,CAAe,MAAM,IAAAC,iBAAA,GAArB,CAAb;EAEA,MAAMC,UAAU,GAAG,IAAAC,sBAAA,GAAnB;EACA,MAAM;IAAEC,GAAG,EAAEC;EAAP,IAAoB,IAAAC,iBAAA,GAA1B;EAEA,MAAM;IAAEC;EAAF,IAAuB,IAAAC,gCAAA,GAA7B;EAEAT,KAAK,CAACU,SAAN,CAAgB,MAAM;IACpBF,gBAAgB,CAACT,EAAD,EAAKO,QAAL,EAAeT,aAAf,CAAhB;IACA,OAAO,MAAM;MACXW,gBAAgB,CAACT,EAAD,EAAKO,QAAL,EAAe,KAAf,CAAhB;IACD,CAFD;EAGD,CALD,EAKG,CAACE,gBAAD,EAAmBT,EAAnB,EAAuBO,QAAvB,EAAiCT,aAAjC,CALH;EAOA,MAAMc,oBAAoB,GAAG,IAAAC,0BAAA,EAE1BC,CAAD,IAAO;IACP,IAAI,CAAChB,aAAL,EAAoB;MAClB;IACD;;IAEDgB,CAAC,CAACC,cAAF;IAEAhB,QAAQ,CAAC;MAAEiB,IAAI,EAAEF,CAAC,CAACE;IAAV,CAAD,CAAR;EACD,CAV4B,CAA7B;EAYAf,KAAK,CAACU,SAAN,CACE,MAAMP,UAAN,aAAMA,UAAN,uBAAMA,UAAU,CAAEa,WAAZ,CAAwB,cAAxB,EAAwCL,oBAAxC,CADR,EAEE,CAACR,UAAD,EAAaQ,oBAAb,CAFF;AAID"}
\No newline at end of file