/* eslint-disable */ // @ts-nocheck import type GroupRepresentation from "@keycloak/keycloak-admin-client/lib/defs/groupRepresentation"; import { Action, KeycloakDataTable, KeycloakSpinner, ListEmptyState, useAlerts, useFetch, useHelp, } from "../../shared/keycloak-ui-shared"; import { AlertVariant, Button, ButtonVariant, Dropdown, DropdownItem, DropdownList, MenuToggle, Popover, Text, TextContent, ToolbarItem, } from "../../shared/@patternfly/react-core"; import { EllipsisVIcon, QuestionCircleIcon } from "../../shared/@patternfly/react-icons"; import { useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import { useAdminClient } from "../admin-client"; import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog"; import { GroupPickerDialog } from "../components/group/GroupPickerDialog"; import { useAccess } from "../context/access/Access"; import { GroupResourceContext } from "../context/group-resource/GroupResourceContext"; import { useRealm } from "../context/realm-context/RealmContext"; import { toUserFederation } from "../user-federation/routes/UserFederation"; import useToggle from "../utils/useToggle"; export const DefaultsGroupsTab = () => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const [isKebabOpen, toggleKebab] = useToggle(); const [isGroupPickerOpen, toggleGroupPicker] = useToggle(); const [defaultGroups, setDefaultGroups] = useState(); const [selectedRows, setSelectedRows] = useState([]); const [key, setKey] = useState(0); const [load, setLoad] = useState(0); const reload = () => setLoad(load + 1); const { realm } = useRealm(); const { addAlert, addError } = useAlerts(); const { enabled } = useHelp(); const { hasAccess } = useAccess(); const canAddOrRemoveGroups = hasAccess("view-users", "manage-realm"); useFetch( () => adminClient.realms.getDefaultGroups({ realm }), (groups) => { setDefaultGroups(groups); setKey(key + 1); }, [load], ); const loader = () => Promise.resolve(defaultGroups!); const removeGroup = async () => { try { await Promise.all( selectedRows.map((group) => adminClient.realms.removeDefaultGroup({ realm, id: group.id!, }), ), ); addAlert( t("groupRemove", { count: selectedRows.length }), AlertVariant.success, ); setSelectedRows([]); } catch (error) { addError("groupRemoveError", error); } reload(); }; const addGroups = async (groups: GroupRepresentation[]) => { try { await Promise.all( groups.map((group) => adminClient.realms.addDefaultGroup({ realm, id: group.id!, }), ), ); addAlert( t("defaultGroupAdded", { count: groups.length }), AlertVariant.success, ); } catch (error) { addError("defaultGroupAddedError", error); } reload(); }; const [toggleRemoveDialog, RemoveDialog] = useConfirmDialog({ titleKey: t("removeConfirmTitle", { count: selectedRows.length }), messageKey: t("removeConfirm", { count: selectedRows.length }), continueButtonLabel: "delete", continueButtonVariant: ButtonVariant.danger, onConfirm: removeGroup, }); if (!defaultGroups) { return ; } return ( {isGroupPickerOpen && ( { await addGroups(groups || []); toggleGroupPicker(); }} onClose={toggleGroupPicker} /> )} {enabled && ( {" "} . } > {t("whatIsDefaultGroups")} )} setSelectedRows([...rows])} loader={loader} ariaLabelKey="defaultGroups" searchPlaceholderKey="searchForGroups" toolbarItem={ canAddOrRemoveGroups && ( <> ( )} isOpen={isKebabOpen} shouldFocusToggleOnSelect > { toggleRemoveDialog(); toggleKebab(); }} > {t("remove")} ) } actions={ canAddOrRemoveGroups ? [ { title: t("remove"), onRowClick: (group) => { setSelectedRows([group]); toggleRemoveDialog(); return Promise.resolve(false); }, } as Action, ] : [] } columns={[ { name: "name", displayKey: "groupName", }, { name: "path", displayKey: "path", }, ]} emptyState={ {" "} Add groups... } primaryActionText={canAddOrRemoveGroups ? t("addGroups") : ""} onPrimaryAction={toggleGroupPicker} /> } /> ); };