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={
}
/>
);
};