UNPKG

@kirz/react-native-toolkit

Version:

Toolkit to speed up React Native development

63 lines (60 loc) 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.usePermissions = usePermissions; var _react = require("react"); var _reactNativePermissions = require("react-native-permissions"); function usePermissions() { const checkPermissionStatus = (0, _react.useCallback)(async function (permission) { let request = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; const permissions = typeof permission === 'string' ? [permission] : permission; const statusesMap = await (0, _reactNativePermissions.checkMultiple)(permissions); const statuses = Object.entries(statusesMap).map(x => ({ permission: x[0], status: x[1] })); const grantedPermissions = statuses.filter(x => x.status === 'granted' || x.status === 'limited'); if (grantedPermissions.length === permissions.length) { return { status: 'granted' }; } const blockedPermissions = statuses.filter(x => x.status === 'blocked' || x.status === 'unavailable'); if (blockedPermissions.length) { return { status: 'blocked', permissions: blockedPermissions.map(x => x.permission) }; } const deniedPermissions = statuses.filter(x => x.status === 'denied'); if (!request) { return { status: 'blocked', permissions: deniedPermissions.map(x => x.permission) }; } const newStatusesMap = await (0, _reactNativePermissions.requestMultiple)(deniedPermissions.map(x => x.permission)); const newStatuses = Object.entries(newStatusesMap).map(x => ({ permission: x[0], status: x[1] })); const newGrantedPermissions = newStatuses.filter(x => x.status === 'granted' || x.status === 'limited'); // ToDo: await limited image picker here if (newGrantedPermissions.length === deniedPermissions.length) { return { status: 'granted' }; } const newBlockedPermissions = newStatuses.filter(x => x.status === 'blocked' || x.status === 'unavailable'); return { status: 'blocked', permissions: newBlockedPermissions.map(x => x.permission) }; }, []); return { checkPermissionStatus, openSettings: _reactNativePermissions.openSettings }; } //# sourceMappingURL=usePermissions.js.map