/* eslint-disable */ // @ts-nocheck import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import type { Path } from "react-router-dom"; import { Link } from "react-router-dom"; import type ClientRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientRepresentation"; import type ClientScopeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientScopeRepresentation"; import type ProtocolMapperRepresentation from "@keycloak/keycloak-admin-client/lib/defs/protocolMapperRepresentation"; import type { ProtocolMapperTypeRepresentation } from "@keycloak/keycloak-admin-client/lib/defs/serverInfoRepesentation"; import { useServerInfo } from "../../context/server-info/ServerInfoProvider"; import { ListEmptyState } from "../../../shared/keycloak-ui-shared"; import { AddMapperDialog } from "../add/MapperDialog"; import { Action, KeycloakDataTable } from "../../../shared/keycloak-ui-shared"; import { Dropdown, DropdownItem, DropdownList, MenuToggle, } from "../../../shared/@patternfly/react-core"; type MapperListProps = { model: ClientScopeRepresentation | ClientRepresentation; onAdd: ( mappers: ProtocolMapperTypeRepresentation | ProtocolMapperRepresentation[], ) => void; onDelete: (mapper: ProtocolMapperRepresentation) => void; detailLink: (id: string) => Partial; }; type Row = ProtocolMapperRepresentation & { category: string; type: string; priority: number; }; type MapperLinkProps = Row & { detailLink: (id: string) => Partial; }; const MapperLink = ({ id, name, detailLink }: MapperLinkProps) => ( {name} ); export const MapperList = ({ model, onAdd, onDelete, detailLink, }: MapperListProps) => { const { t } = useTranslation(); const [mapperAction, setMapperAction] = useState(false); const mapperList = model.protocolMappers; const mapperTypes = useServerInfo().protocolMapperTypes![model.protocol!]; const [key, setKey] = useState(0); useEffect(() => setKey(key + 1), [mapperList]); const [addMapperDialogOpen, setAddMapperDialogOpen] = useState(false); const [filter, setFilter] = useState(model.protocolMappers); const toggleAddMapperDialog = (buildIn: boolean) => { if (buildIn) { setFilter(mapperList || []); } else { setFilter(undefined); } setAddMapperDialogOpen(!addMapperDialogOpen); }; const loader = async () => { if (!mapperList) { return []; } const list = mapperList.reduce((rows, mapper) => { const mapperType = mapperTypes.find( ({ id }) => id === mapper.protocolMapper, ); if (!mapperType) { return rows; } return rows.concat({ ...mapper, category: mapperType.category, type: mapperType.name, priority: mapperType.priority, }); }, []); return list.sort((a, b) => a.priority - b.priority); }; return ( <> setAddMapperDialogOpen(!addMapperDialogOpen)} /> setMapperAction(false)} onOpenChange={(isOpen) => setMapperAction(isOpen)} toggle={(ref) => ( setMapperAction(!mapperAction)} > {t("addMapper")} )} isOpen={mapperAction} > toggleAddMapperDialog(true)}> {t("fromPredefinedMapper")} toggleAddMapperDialog(false)}> {t("byConfiguration")} } actions={[ { title: t("delete"), onRowClick: onDelete, } as Action, ]} columns={[ { name: "name", cellRenderer: (row) => ( ), }, { name: "category" }, { name: "type", }, { name: "priority", }, ]} emptyState={ toggleAddMapperDialog(true), }, { text: t("emptySecondaryAction"), onClick: () => toggleAddMapperDialog(false), }, ]} /> } /> ); };