@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
109 lines • 7.47 kB
JavaScript
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