import type ClientProfileRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientProfileRepresentation"; import type RoleRepresentation from "@keycloak/keycloak-admin-client/lib/defs/roleRepresentation"; import { Button, Label, Modal, ModalVariant } from "@patternfly/react-core"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { adminClient } from "../admin-client"; import { KeycloakSpinner } from "../components/keycloak-spinner/KeycloakSpinner"; import { ListEmptyState } from "../components/list-empty-state/ListEmptyState"; import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable"; import { useFetch } from "../utils/useFetch"; type ClientProfile = ClientProfileRepresentation & { global: boolean; }; const AliasRenderer = ({ name, global }: ClientProfile) => { const { t } = useTranslation(); return ( <> {name} {global && } ); }; export type AddClientProfileModalProps = { open: boolean; toggleDialog: () => void; onConfirm: (newReps: RoleRepresentation[]) => void; allProfiles: string[]; }; export const AddClientProfileModal = (props: AddClientProfileModalProps) => { const { t } = useTranslation(); const [selectedRows, setSelectedRows] = useState([]); const [tableProfiles, setTableProfiles] = useState(); useFetch( () => adminClient.clientPolicies.listProfiles({ includeGlobalProfiles: true, }), (allProfiles) => { const globalProfiles = allProfiles.globalProfiles?.map( (globalProfiles) => ({ ...globalProfiles, global: true, }), ); const profiles = allProfiles.profiles?.map((profiles) => ({ ...profiles, global: false, })); setTableProfiles([...(globalProfiles ?? []), ...(profiles ?? [])]); }, [], ); const loader = async () => tableProfiles?.filter((item) => !props.allProfiles.includes(item.name!)) ?? []; if (!tableProfiles) { return ; } return ( { props.toggleDialog(); props.onConfirm(selectedRows); }} > {t("add")} , , ]} > { setSelectedRows([...rows]); }} columns={[ { name: "name", displayKey: "clientProfileName", cellRenderer: AliasRenderer, }, { name: "description", displayKey: "description", }, ]} emptyState={ } /> ); };