You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
4.3 KiB

{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport useNavigation from \"./useNavigation\";\nimport usePreventRemoveContext from \"./usePreventRemoveContext\";\nimport useRoute from \"./useRoute\";\nexport default function usePreventRemove(preventRemove, callback) {\n var _React$useState = React.useState(function () {\n return nanoid();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n id = _React$useState2[0];\n var navigation = useNavigation();\n var _useRoute = useRoute(),\n routeKey = _useRoute.key;\n var _usePreventRemoveCont = usePreventRemoveContext(),\n setPreventRemove = _usePreventRemoveCont.setPreventRemove;\n React.useEffect(function () {\n setPreventRemove(id, routeKey, preventRemove);\n return function () {\n setPreventRemove(id, routeKey, false);\n };\n }, [setPreventRemove, id, routeKey, preventRemove]);\n var beforeRemoveListener = useLatestCallback(function (e) {\n if (!preventRemove) {\n return;\n }\n e.preventDefault();\n callback({\n data: e.data\n });\n });\n React.useEffect(function () {\n return navigation === null || navigation === void 0 ? void 0 : navigation.addListener('beforeRemove', beforeRemoveListener);\n }, [navigation, beforeRemoveListener]);\n}","map":{"version":3,"sources":["usePreventRemove.tsx"],"names":["nanoid","React","useLatestCallback","useNavigation","usePreventRemoveContext","useRoute","usePreventRemove","preventRemove","callback","id","useState","navigation","key","routeKey","setPreventRemove","useEffect","beforeRemoveListener","e","preventDefault","data","addListener"],"mappings":";AACA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,OAAOC,iBAAiB,MAAM,qBAAqB;AAGnD,OAAOC,aAAa;AACpB,OAAOC,uBAAuB;AAC9B,OAAOC,QAAQ;AAQf,eAAe,SAASC,gBAAgB,CACtCC,aAAsB,EACtBC,QAAmE,EACnE;EACA,sBAAaP,KAAK,CAACS,QAAQ,CAAC;MAAA,OAAMV,MAAM,EAAE;IAAA,EAAC;IAAA;IAApCS,EAAE;EAET,IAAME,UAAU,GAAGR,aAAa,EAAE;EAClC,gBAA0BE,QAAQ,EAAE;IAAvBQ,QAAAA,aAALD,GAAG;EAEX,4BAA6BR,uBAAuB,EAAE;IAA9CU,gBAAAA,yBAAAA,gBAAAA;EAERb,KAAK,CAACc,SAAS,CAAC,YAAM;IACpBD,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC;IAC7C,OAAO,YAAM;MACXO,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAE,KAAK,CAAC;IACvC,CAAC;EACH,CAAC,EAAE,CAACC,gBAAgB,EAAEL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC,CAAC;EAEnD,IAAMS,oBAAoB,GAAGd,iBAAiB,CAE3Ce,UAAAA,CAAC,EAAK;IACP,IAAI,CAACV,aAAa,EAAE;MAClB;IACF;IAEAU,CAAC,CAACC,cAAc,EAAE;IAElBV,QAAQ,CAAC;MAAEW,IAAI,EAAEF,CAAC,CAACE;IAAK,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEFlB,KAAK,CAACc,SAAS,CACb;IAAA,OAAMJ,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAVA,UAAU,CAAES,WAAW,CAAC,cAAc,EAAEJ,oBAAoB,CAAC;EAAA,GACnE,CAACL,UAAU,EAAEK,oBAAoB,CAAC,CACnC;AACH","sourceRoot":"../../src","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\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(preventRemove, callback) {\n const [id] = React.useState(() => nanoid());\n const navigation = useNavigation();\n const {\n key: routeKey\n } = useRoute();\n const {\n setPreventRemove\n } = usePreventRemoveContext();\n React.useEffect(() => {\n setPreventRemove(id, routeKey, preventRemove);\n return () => {\n setPreventRemove(id, routeKey, false);\n };\n }, [setPreventRemove, id, routeKey, preventRemove]);\n const beforeRemoveListener = useLatestCallback(e => {\n if (!preventRemove) {\n return;\n }\n e.preventDefault();\n callback({\n data: e.data\n });\n });\n React.useEffect(() => navigation === null || navigation === void 0 ? void 0 : navigation.addListener('beforeRemove', beforeRemoveListener), [navigation, beforeRemoveListener]);\n}\n//# sourceMappingURL=usePreventRemove.js.map"]},"metadata":{},"sourceType":"module"}