added proper filtering and fixed onToggle (#39555)

fixes: #39538

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
This commit is contained in:
Erik Jan de Wit 2025-05-12 19:49:33 +02:00 committed by GitHub
parent 9273ac965a
commit d6ee2ed013
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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) => (
<SelectOption key={c.id} value={c.id}>
{c.id}
</SelectOption>
));
if (!components) {
return <KeycloakSpinner />;
}
const isNew = mapperId === "new";
const mapper = components.find((c) => c.id === mapperType);
return (
<>
<DeleteConfirm />
@ -268,10 +279,12 @@ export default function LdapMapperDetails() {
<KeycloakSelect
toggleId="kc-providerId"
typeAheadAriaLabel={t("mapperType")}
onToggle={() =>
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) => (
<SelectOption key={c.id} value={c.id}>
{c.id}
</SelectOption>
))}
{selectItems()}
</KeycloakSelect>
)}
></Controller>