UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

41 lines (40 loc) 1.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.usePermission = void 0; var react_1 = require("react"); var __1 = require(".."); var misc_1 = require("../util/misc"); /** * Tracks a permission state. * * @param descriptor Permission request descriptor that passed to `navigator.permissions.query` */ function usePermission(descriptor) { var _a = (0, __1.useSafeState)('not-requested'), state = _a[0], setState = _a[1]; (0, react_1.useEffect)(function () { var unmount = { current: null }; setState('requested'); // eslint-disable-next-line @typescript-eslint/no-floating-promises,promise/catch-or-return navigator.permissions .query(descriptor) // eslint-disable-next-line promise/always-return .then(function (status) { var handleChange = function () { setState(status.state); }; setState(status.state); (0, misc_1.on)(status, 'change', handleChange, { passive: true }); unmount.current = function () { (0, misc_1.off)(status, 'change', handleChange); }; }); return function () { if (unmount.current) { unmount.current(); } }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [descriptor.name]); return state; } exports.usePermission = usePermission;