UNPKG

@keycloakify/keycloak-admin-ui

Version:
109 lines 7.47 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { HelpItem, useFetch } from "../../ui-shared"; import { Card, CardBody, CardTitle, Form, FormGroup, PageSection, Switch, } from "@patternfly/react-core"; import { ActionsColumn, Table, Tbody, Td, Th, Thead, Tr, } from "@patternfly/react-table"; import { useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { Link, useNavigate } from "react-router-dom"; import { useAdminClient } from "../../admin-client"; import { toPermissionDetails } from "../../clients/routes/PermissionDetails"; import { KeycloakSpinner } from "../../ui-shared"; import { useRealm } from "../../context/realm-context/RealmContext"; import useLocaleSort from "../../utils/useLocaleSort"; import { useConfirmDialog } from "../../components/confirm-dialog/ConfirmDialog"; import "./permissions-tab.css"; export const PermissionsTab = ({ id, type }) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const navigate = useNavigate(); const { realm } = useRealm(); const [realmId, setRealmId] = useState(""); const [permission, setPermission] = useState(); const localeSort = useLocaleSort(); const togglePermissionEnabled = (enabled) => { switch (type) { case "clients": return adminClient.clients.updateFineGrainPermission({ id: id }, { enabled }); case "users": return adminClient.realms.updateUsersManagementPermissions({ realm, enabled, }); case "groups": return adminClient.groups.updatePermission({ id: id }, { enabled }); case "roles": return adminClient.roles.updatePermission({ id: id }, { enabled }); case "identityProviders": return adminClient.identityProviders.updatePermission({ alias: id }, { enabled }); } }; useFetch(() => Promise.all([ adminClient.clients.find({ search: true, clientId: realm === "master" ? "master-realm" : "realm-management", }), (() => { switch (type) { case "clients": return adminClient.clients.listFineGrainPermissions({ id: id }); case "users": return adminClient.realms.getUsersManagementPermissions({ realm, }); case "groups": return adminClient.groups.listPermissions({ id: id }); case "roles": return adminClient.roles.listPermissions({ id: id }); case "identityProviders": return adminClient.identityProviders.listPermissions({ alias: id, }); } })(), ]), ([clients, permission]) => { var _a; setRealmId((_a = clients[0]) === null || _a === void 0 ? void 0 : _a.id); setPermission(permission); }, [id]); const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({ titleKey: "permissionsDisable", messageKey: "permissionsDisableConfirm", continueButtonLabel: "confirm", onConfirm: async () => { const permission = await togglePermissionEnabled(false); setPermission(permission); }, }); if (!permission) { return _jsx(KeycloakSpinner, {}); } return (_jsxs(PageSection, { variant: "light", children: [_jsx(DisableConfirm, {}), _jsxs(Card, { isFlat: true, children: [_jsx(CardTitle, { children: t("permissions") }), _jsxs(CardBody, { children: [t(`${type}PermissionsHint`), _jsx(Form, { isHorizontal: true, className: "pf-v5-u-pt-md", children: _jsx(FormGroup, { hasNoPaddingTop: true, className: "permission-label", label: t("permissionsEnabled"), fieldId: "permissionsEnabled", labelIcon: _jsx(HelpItem, { helpText: t("permissionsEnabledHelp"), fieldLabelId: "permissionsEnabled" }), children: _jsx(Switch, { id: "permissionsEnabled", "data-testid": "permissionSwitch", label: t("on"), labelOff: t("off"), isChecked: permission.enabled, onChange: async (_event, enabled) => { if (enabled) { const permission = await togglePermissionEnabled(enabled); setPermission(permission); } else { toggleDisableDialog(); } }, "aria-label": t("permissionsEnabled") }) }) })] })] }), permission.enabled && (_jsxs(_Fragment, { children: [_jsxs(Card, { isFlat: true, className: "pf-v5-u-mt-lg", children: [_jsx(CardTitle, { children: t("permissionsList") }), _jsx(CardBody, { children: _jsxs(Trans, { i18nKey: "permissionsListIntro", children: [" ", _jsx("strong", { children: { realm: realm === "master" ? "master-realm" : "realm-management", } }), "."] }) })] }), _jsx(Card, { isFlat: true, className: "keycloak__permission__permission-table", children: _jsx(CardBody, { className: "pf-v5-u-p-0", children: _jsxs(Table, { "aria-label": t("permissionsList"), variant: "compact", children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { id: "permissionsScopeName", children: t("permissionsScopeName") }), _jsx(Th, { id: "description", children: t("description") })] }) }), _jsx(Tbody, { children: localeSort(Object.entries(permission.scopePermissions || {}), ([name]) => name).map(([name, id]) => (_jsxs(Tr, { children: [_jsx(Td, { children: _jsx(Link, { to: toPermissionDetails({ realm, id: realmId, permissionType: "scope", permissionId: id, }), children: name }) }), _jsx(Td, { children: t(`scopePermissions.${type}.${name}-description`) }), _jsx(Td, { isActionCell: true, children: _jsx(ActionsColumn, { items: [ { title: t("edit"), onClick() { navigate(toPermissionDetails({ realm, id: realmId, permissionType: "scope", permissionId: id, })); }, }, ] }) })] }, id))) })] }) }) })] }))] })); }; //# sourceMappingURL=PermissionTab.js.map