@kirz/react-native-toolkit
Version:
Toolkit to speed up React Native development
63 lines (60 loc) • 2.3 kB
JavaScript
;
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