@ra-libs/react-rbac
Version:
React admin RBAC front components and utils
42 lines • 2.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ShowActions = ShowActions;
const tslib_1 = require("tslib");
const ability_1 = require("@casl/ability");
const material_1 = require("@mui/material");
const react_1 = tslib_1.__importDefault(require("react"));
const react_admin_1 = require("react-admin");
const react_router_dom_1 = require("react-router-dom");
const config_1 = require("../../../config");
const contexts_1 = require("../../../contexts");
// Override ra-ui-materialui/src/detail/ShowActions.tsx
function ShowActions(props) {
const { useGoBackButton = false } = props;
const record = (0, react_admin_1.useRecordContext)();
const resource = (0, react_admin_1.useResourceContext)();
const translate = (0, react_admin_1.useTranslate)();
const navigate = (0, react_router_dom_1.useNavigate)();
const { hasEdit } = (0, react_admin_1.useResourceDefinition)();
const { ability } = (0, contexts_1.useCASL)();
if (!record || !resource)
return null;
let canDelete = false, canUpdate = false, canRead = false;
try {
canDelete = ability.can(config_1.CASLAction.Delete, (0, ability_1.subject)(resource, record));
canUpdate = ability.can(config_1.CASLAction.Update, (0, ability_1.subject)(resource, record));
canRead = ability.can(config_1.CASLAction.Read, (0, ability_1.subject)(resource, record));
}
catch (error) {
console.error(error);
}
return (react_1.default.createElement(react_admin_1.TopToolbar, { className: props.className },
react_1.default.createElement(material_1.Grid, { container: true, justifyContent: 'space-between' },
react_1.default.createElement(material_1.Grid, { item: true }, useGoBackButton && (react_1.default.createElement(react_admin_1.Button, { style: { alignSelf: 'flex-start' }, label: translate('buttons.go_back'), onClick: () => {
navigate(-1);
} }))),
react_1.default.createElement(material_1.Grid, { item: true },
hasEdit && canUpdate && react_1.default.createElement(react_admin_1.EditButton, { record: record }),
canDelete && react_1.default.createElement(react_admin_1.DeleteWithConfirmButton, { record: record }),
canRead && react_1.default.createElement(react_admin_1.RefreshButton, null)))));
}
//# sourceMappingURL=index.js.map