{"ast":null,"code":"import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nvar _excluded = [\"get\", \"request\"];\nimport { useCallback, useEffect, useRef, useState } from 'react';\nfunction usePermission(methods, options) {\n var isMounted = useRef(true);\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n status = _useState2[0],\n setStatus = _useState2[1];\n var _ref = options || {},\n _ref$get = _ref.get,\n get = _ref$get === void 0 ? true : _ref$get,\n _ref$request = _ref.request,\n request = _ref$request === void 0 ? false : _ref$request,\n permissionOptions = _objectWithoutProperties(_ref, _excluded);\n var getPermission = useCallback(_asyncToGenerator(function* () {\n var response = yield methods.getMethod(Object.keys(permissionOptions).length > 0 ? permissionOptions : undefined);\n if (isMounted.current) setStatus(response);\n return response;\n }), [methods.getMethod]);\n var requestPermission = useCallback(_asyncToGenerator(function* () {\n var response = yield methods.requestMethod(Object.keys(permissionOptions).length > 0 ? permissionOptions : undefined);\n if (isMounted.current) setStatus(response);\n return response;\n }), [methods.requestMethod]);\n useEffect(function runMethods() {\n if (request) requestPermission();\n if (!request && get) getPermission();\n }, [get, request, requestPermission, getPermission]);\n useEffect(function didMount() {\n isMounted.current = true;\n return function () {\n isMounted.current = false;\n };\n }, []);\n return [status, requestPermission, getPermission];\n}\nexport function createPermissionHook(methods) {\n return function (options) {\n return usePermission(methods, options);\n };\n}","map":{"version":3,"sources":["../src/PermissionsHook.ts"],"names":[],"mappings":";;;;AAAA,SAAS,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,QAAQ,OAAO;AA6BhE,SAAS,aAAa,CACpB,OAAmD,EACnD,OAAwC,EAAA;EAExC,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;EAC9B,gBAA4B,QAAQ,CAAoB,IAAI,CAAC;IAAA;IAAtD,MAAM;IAAE,SAAS;EACxB,WAA8D,OAAO,IAAI,CAAA,CAAE;IAAA,gBAAnE,GAAG;IAAH,GAAG,yBAAG,IAAI;IAAA,oBAAE,OAAO;IAAP,OAAO,6BAAG,KAAK;IAAK,iBAAiB;EAEzD,IAAM,aAAa,GAAG,WAAW,mBAAC,aAAW;IAC3C,IAAM,QAAQ,SAAS,OAAO,CAAC,SAAS,CACtC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,GAAI,iBAA6B,GAAG,SAAS,CACvF;IACD,IAAI,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC;IAC1C,OAAO,QAAQ;EACjB,CAAC,GAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;EAEvB,IAAM,iBAAiB,GAAG,WAAW,mBAAC,aAAW;IAC/C,IAAM,QAAQ,SAAS,OAAO,CAAC,aAAa,CAC1C,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,GAAI,iBAA6B,GAAG,SAAS,CACvF;IACD,IAAI,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC;IAC1C,OAAO,QAAQ;EACjB,CAAC,GAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;EAE3B,SAAS,CACP,SAAS,UAAU,GAAA;IACjB,IAAI,OAAO,EAAE,iBAAiB,EAAE;IAChC,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,aAAa,EAAE;EACtC,CAAC,EACD,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,CAAC,CACjD;EAGD,SAAS,CAAC,SAAS,QAAQ,GAAA;IACzB,SAAS,CAAC,OAAO,GAAG,IAAI;IACxB,OAAO,YAAK;MACV,SAAS,CAAC,OAAO,GAAG,KAAK;IAC3B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC;AACnD;AAMA,OAAM,SAAU,oBAAoB,CAClC,OAAmD,EAAA;EAEnD,OAAO,UAAC,OAAwC;IAAA,OAC9C,aAAa,CAAsB,OAAO,EAAE,OAAO,CAAC;EAAA;AACxD","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { PermissionResponse } from './PermissionsInterface';\n\n// These types are identical, but improves the readability for suggestions in editors\ntype RequestPermissionMethod = () => Promise;\ntype GetPermissionMethod = () => Promise;\n\ninterface PermissionHookMethods {\n /** The permission method that requests the user to grant permission. */\n requestMethod: (options?: Options) => Promise;\n /** The permission method that only fetches the current permission status. */\n getMethod: (options?: Options) => Promise;\n}\n\ninterface PermissionHookBehavior {\n /** If the hook should automatically fetch the current permission status, without asking the user. */\n get?: boolean;\n /** If the hook should automatically request the user to grant permission. */\n request?: boolean;\n}\n\nexport type PermissionHookOptions = PermissionHookBehavior & Options;\n\n/**\n * Get or request permission for protected functionality within the app.\n * It uses separate permission requesters to interact with a single permission.\n * By default, the hook will only retrieve the permission status.\n */\nfunction usePermission(\n methods: PermissionHookMethods,\n options?: PermissionHookOptions\n): [Permission | null, RequestPermissionMethod, GetPermissionMethod] {\n const isMounted = useRef(true);\n const [status, setStatus] = useState(null);\n const { get = true, request = false, ...permissionOptions } = options || {};\n\n const getPermission = useCallback(async () => {\n const response = await methods.getMethod(\n Object.keys(permissionOptions).length > 0 ? (permissionOptions as Options) : undefined\n );\n if (isMounted.current) setStatus(response);\n return response;\n }, [methods.getMethod]);\n\n const requestPermission = useCallback(async () => {\n const response = await methods.requestMethod(\n Object.keys(permissionOptions).length > 0 ? (permissionOptions as Options) : undefined\n );\n if (isMounted.current) setStatus(response);\n return response;\n }, [methods.requestMethod]);\n\n useEffect(\n function runMethods() {\n if (request) requestPermission();\n if (!request && get) getPermission();\n },\n [get, request, requestPermission, getPermission]\n );\n\n // Workaround for unmounting components receiving state updates\n useEffect(function didMount() {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return [status, requestPermission, getPermission];\n}\n\n/**\n * Create a new permission hook with the permission methods built-in.\n * This can be used to quickly create specific permission hooks in every module.\n */\nexport function createPermissionHook(\n methods: PermissionHookMethods\n) {\n return (options?: PermissionHookOptions) =>\n usePermission(methods, options);\n}\n"],"sourceRoot":""},"metadata":{},"sourceType":"module"}