import type { UserProfileGroup } from "@keycloak/keycloak-admin-client/lib/defs/userProfileConfig"; import { Button, ButtonVariant, PageSection, ToolbarItem, } from "@patternfly/react-core"; import { useEffect, useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { Link, useNavigate } from "react-router-dom"; import { useConfirmDialog } from "../../components/confirm-dialog/ConfirmDialog"; import { ListEmptyState } from "../../components/list-empty-state/ListEmptyState"; import { Action, KeycloakDataTable, } from "../../components/table-toolbar/KeycloakDataTable"; import { useRealm } from "../../context/realm-context/RealmContext"; import { toEditAttributesGroup } from "../routes/EditAttributesGroup"; import { toNewAttributesGroup } from "../routes/NewAttributesGroup"; import { useUserProfile } from "./UserProfileContext"; export const AttributesGroupTab = () => { const { config, save } = useUserProfile(); const { t } = useTranslation(); const navigate = useNavigate(); const { realm } = useRealm(); const [key, setKey] = useState(0); const [groupToDelete, setGroupToDelete] = useState(); // Refresh data in table when config changes. useEffect(() => setKey((value) => value + 1), [config]); async function loader() { return config?.groups ?? []; } const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({ titleKey: "realm-settings:deleteDialogTitle", children: ( {" "} {{ group: groupToDelete?.name }}. ), continueButtonLabel: "delete", continueButtonVariant: ButtonVariant.danger, onConfirm() { const groups = (config?.groups ?? []).filter( (group) => group !== groupToDelete, ); save( { ...config, groups }, { successMessageKey: "realm-settings:deleteSuccess", errorMessageKey: "realm-settings:deleteAttributeGroupError", }, ); }, }); function deleteAttributeGroup(group: UserProfileGroup) { setGroupToDelete(group); toggleDeleteDialog(); } return ( } columns={[ { name: "name", displayKey: "realm-settings:columnName", cellRenderer: (group) => ( {group.name} ), }, { name: "displayHeader", displayKey: "realm-settings:columnDisplayName", }, { name: "displayDescription", displayKey: "realm-settings:columnDisplayDescription", }, ]} actions={[ { title: t("delete"), onRowClick: deleteAttributeGroup, } as Action, ]} emptyState={ navigate(toNewAttributesGroup({ realm }))} /> } /> ); };