/* eslint-disable */
// @ts-nocheck
import type RoleRepresentation from "@keycloak/keycloak-admin-client/lib/defs/roleRepresentation";
import { HelpItem, useAlerts } from "../../../shared/keycloak-ui-shared";
import { AlertVariant, Button, ButtonVariant } from "../../../shared/@patternfly/react-core";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Link, To, useNavigate } from "react-router-dom";
import { useAdminClient } from "../../admin-client";
import { useAccess } from "../../context/access/Access";
import { useRealm } from "../../context/realm-context/RealmContext";
import { toRealmSettings } from "../../realm-settings/routes/RealmSettings";
import { emptyFormatter, upperCaseFormatter } from "../../util";
import { translationFormatter } from "../../utils/translationFormatter";
import { useConfirmDialog } from "../confirm-dialog/ConfirmDialog";
import { ListEmptyState } from "../../../shared/keycloak-ui-shared";
import { Action, KeycloakDataTable } from "../../../shared/keycloak-ui-shared";
import "./RolesList.css";
type RoleDetailLinkProps = RoleRepresentation & {
defaultRoleName?: string;
toDetail: (roleId: string) => To;
messageBundle?: string;
};
const RoleDetailLink = ({
defaultRoleName,
toDetail,
...role
}: RoleDetailLinkProps) => {
const { t } = useTranslation();
const { realm } = useRealm();
const { hasAccess, hasSomeAccess } = useAccess();
const canViewUserRegistration =
hasAccess("view-realm") && hasSomeAccess("view-clients", "manage-clients");
return role.name !== defaultRoleName ? (
{role.name}
) : (
<>
{canViewUserRegistration ? (
{role.name}
) : (
{role.name}
)}{" "}
>
);
};
type RolesListProps = {
paginated?: boolean;
parentRoleId?: string;
messageBundle?: string;
isReadOnly: boolean;
toCreate: To;
toDetail: (roleId: string) => To;
loader?: (
first?: number,
max?: number,
search?: string,
) => Promise;
};
export const RolesList = ({
loader,
paginated = true,
parentRoleId,
messageBundle = "roles",
toCreate,
toDetail,
isReadOnly,
}: RolesListProps) => {
const { adminClient } = useAdminClient();
const { t } = useTranslation();
const navigate = useNavigate();
const { addAlert, addError } = useAlerts();
const { realmRepresentation: realm } = useRealm();
const [selectedRole, setSelectedRole] = useState();
const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({
titleKey: "roleDeleteConfirm",
messageKey: t("roleDeleteConfirmDialog", {
selectedRoleName: selectedRole ? selectedRole!.name : "",
}),
continueButtonLabel: "delete",
continueButtonVariant: ButtonVariant.danger,
onConfirm: async () => {
try {
if (!parentRoleId) {
await adminClient.roles.delById({
id: selectedRole!.id!,
});
} else {
await adminClient.roles.delCompositeRoles({ id: parentRoleId }, [
selectedRole!,
]);
}
setSelectedRole(undefined);
addAlert(t("roleDeletedSuccess"), AlertVariant.success);
} catch (error) {
addError("roleDeleteError", error);
}
},
});
return (
<>
}
>
{t("createRole")}
)
}
actions={
isReadOnly
? undefined
: [
{
title: t("delete"),
onRowClick: (role) => {
setSelectedRole(role);
if (
realm.defaultRole &&
role.name === realm!.defaultRole!.name
) {
addAlert(
t("defaultRoleDeleteError"),
AlertVariant.danger,
);
} else toggleDeleteDialog();
},
} as Action,
]
}
columns={[
{
name: "name",
displayKey: "roleName",
cellRenderer: (row) => (
),
},
{
name: "composite",
displayKey: "composite",
cellFormatters: [upperCaseFormatter(), emptyFormatter()],
},
{
name: "description",
cellFormatters: [translationFormatter(t)],
},
]}
emptyState={
navigate(toCreate)}
/>
}
/>
>
);
};