diff --git a/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx b/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx index f2da7813630..297cfd905ac 100644 --- a/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx +++ b/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx @@ -4,6 +4,7 @@ import { DirectionType } from "@keycloak/keycloak-admin-client/lib/resources/use import { HelpItem, KeycloakSelect, + KeycloakSpinner, SelectVariant, TextControl, useAlerts, @@ -30,7 +31,6 @@ import { DynamicComponents, } from "../../../components/dynamic/DynamicComponents"; import { FormAccess } from "../../../components/form/FormAccess"; -import { KeycloakSpinner } from "@keycloak/keycloak-ui-shared"; import { ViewHeader } from "../../../components/view-header/ViewHeader"; import { useRealm } from "../../../context/realm-context/RealmContext"; import { convertFormValuesToObject, convertToFormValues } from "../../../util"; @@ -52,6 +52,7 @@ export default function LdapMapperDetails() { const { addAlert, addError } = useAlerts(); const [isMapperDropdownOpen, setIsMapperDropdownOpen] = useState(false); + const [mapperTypeFilter, setMapperTypeFilter] = useState(""); const [key, setKey] = useState(0); const refresh = () => setKey(key + 1); @@ -164,12 +165,22 @@ export default function LdapMapperDetails() { name: "providerId", }); + const selectItems = () => + (components || []) + .filter((c) => c.id.includes(mapperTypeFilter)) + .map((c) => ( + + {c.id} + + )); + if (!components) { return ; } const isNew = mapperId === "new"; const mapper = components.find((c) => c.id === mapperType); + return ( <> @@ -268,10 +279,12 @@ export default function LdapMapperDetails() { - setIsMapperDropdownOpen(!isMapperDropdownOpen) - } + onToggle={setIsMapperDropdownOpen} isOpen={isMapperDropdownOpen} + onFilter={(search) => { + setMapperTypeFilter(search); + return selectItems(); + }} onSelect={(value) => { setupForm({ providerId: value as string, @@ -285,17 +298,12 @@ export default function LdapMapperDetails() { ]) || [], ), }); - setIsMapperDropdownOpen(false); }} selections={field.value} variant={SelectVariant.typeahead} aria-label={t("selectMapperType")} > - {components.map((c) => ( - - {c.id} - - ))} + {selectItems()} )} >