import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { Controller, useFormContext } from "react-hook-form"; import { Button, Chip, ChipGroup, FormGroup, TextInput, } from "@patternfly/react-core"; import { HelpItem } from "../help-enabler/HelpItem"; import type { ComponentProps } from "./components"; import { AddScopeDialog } from "../../clients/scopes/AddScopeDialog"; import { useAdminClient, useFetch } from "../../context/auth/AdminClient"; import type ClientScopeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientScopeRepresentation"; import { useParams } from "react-router"; import type { EditClientPolicyConditionParams } from "../../realm-settings/routes/EditCondition"; import { GroupPickerDialog } from "../group/GroupPickerDialog"; import type GroupRepresentation from "@keycloak/keycloak-admin-client/lib/defs/groupRepresentation"; export const MultivaluedChipsComponent = ({ defaultValue, name, }: ComponentProps) => { const { t } = useTranslation("dynamic"); const { control } = useFormContext(); const { conditionName } = useParams(); const adminClient = useAdminClient(); const [open, setOpen] = useState(false); const [clientScopes, setClientScopes] = useState( [] ); const [selectedGroups, setSelectedGroups] = useState( [] ); useFetch( () => adminClient.clientScopes.find(), (clientScopes) => { setClientScopes(clientScopes); }, [] ); const toggleModal = () => { setOpen(!open); }; return ( } fieldId={name!} > { return ( <> {open && name === "scopes" && ( !value.includes(scope.name!) )} isClientScopesConditionType open={open} toggleDialog={() => setOpen(!open)} onAdd={(scopes) => { onChange([ ...value, ...scopes .map((scope) => scope.scope) .map((item) => item.name!), ]); }} /> )} {open && name === "groups" && ( { onChange([...value, ...groups.map((group) => group.name)]); setSelectedGroups([...selectedGroups!, ...groups]); setOpen(false); }} onClose={() => { setOpen(false); }} filterGroups={value} /> )} {value.length === 0 && !conditionName && ( )} { onChange([]); if (name === "groups") { setSelectedGroups([]); } }} > {value.map((currentChip: string) => ( { onChange( value.filter((item: string) => item !== currentChip) ); if (name === "groups") { setSelectedGroups( value.filter((item: string) => item !== currentChip) ); } }} > {currentChip} ))} ); }} /> ); };