ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
55 lines • 2.15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCanAccessCallback = void 0;
const react_query_1 = require("@tanstack/react-query");
const useAuthProvider_1 = __importDefault(require("./useAuthProvider.cjs"));
const react_1 = require("react");
/**
* A hook that returns a function you can call to determine whether user has access to the given resource
*
* @example
* import { Datagrid, List, TextField, useCanAccessCallback } from 'react-admin';
*
* const UserList = () => {
* const checkAccess = useCanAccessCallback();
*
* const handleRowClick = (id: Identifier, resource: string, record: Record) => {
* try {
* const canAccess = checkAccess({ resource: 'users', action: 'edit', record });
* return canAccess ? "edit" : "show";
* } catch (error) {
* console.error(error);
* }
* };
*
* return (
* <List>
* <Datagrid onClick={handleRowClick}>
* <TextField source="id" />
* <TextField source="name" />
* <TextField source="email" />
* </Datagrid>
* </List>
* );
* };
*/
const useCanAccessCallback = (options = {}) => {
const authProvider = (0, useAuthProvider_1.default)();
const authProviderHasCanAccess = !!authProvider?.canAccess;
const { mutateAsync } = (0, react_query_1.useMutation)({
mutationFn: async (params) => {
if (!authProvider || !authProvider.canAccess) {
return true;
}
return authProvider.canAccess(params);
},
retry: false,
...options,
});
return (0, react_1.useMemo)(() => (authProviderHasCanAccess ? mutateAsync : () => true), [authProviderHasCanAccess, mutateAsync]);
};
exports.useCanAccessCallback = useCanAccessCallback;
//# sourceMappingURL=useCanAccessCallback.js.map