UNPKG

@keycloakify/keycloak-admin-ui

Version:
75 lines 4.12 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import { useServerInfo } from "../../context/server-info/ServerInfoProvider"; import { ListEmptyState } from "../../ui-shared"; import { AddMapperDialog } from "../../client-scopes/add/MapperDialog"; import { KeycloakDataTable } from "../../ui-shared"; import { Dropdown, DropdownItem, DropdownList, MenuToggle, } from "@patternfly/react-core"; const MapperLink = ({ id, name, detailLink }) => (_jsx(Link, { to: detailLink(id), children: name })); export const MapperList = ({ model, onAdd, onDelete, detailLink, }) => { 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) => { 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 (_jsxs(_Fragment, { children: [_jsx(AddMapperDialog, { protocol: model.protocol, filter: filter, onConfirm: onAdd, open: addMapperDialogOpen, toggleDialog: () => setAddMapperDialogOpen(!addMapperDialogOpen) }), _jsx(KeycloakDataTable, { loader: loader, ariaLabelKey: "clientScopeList", searchPlaceholderKey: "searchForMapper", toolbarItem: _jsx(Dropdown, { onSelect: () => setMapperAction(false), onOpenChange: (isOpen) => setMapperAction(isOpen), toggle: (ref) => (_jsx(MenuToggle, { ref: ref, variant: "primary", id: "mapperAction", onClick: () => setMapperAction(!mapperAction), children: t("addMapper") })), isOpen: mapperAction, children: _jsxs(DropdownList, { children: [_jsx(DropdownItem, { onClick: () => toggleAddMapperDialog(true), children: t("fromPredefinedMapper") }), _jsx(DropdownItem, { onClick: () => toggleAddMapperDialog(false), children: t("byConfiguration") })] }) }), actions: [ { title: t("delete"), onRowClick: onDelete, }, ], columns: [ { name: "name", cellRenderer: (row) => (_jsx(MapperLink, { ...row, detailLink: detailLink })), }, { name: "category" }, { name: "type", }, { name: "priority", }, ], emptyState: _jsx(ListEmptyState, { message: t("emptyMappers"), instructions: t("emptyMappersInstructions"), secondaryActions: [ { text: t("emptyPrimaryAction"), onClick: () => toggleAddMapperDialog(true), }, { text: t("emptySecondaryAction"), onClick: () => toggleAddMapperDialog(false), }, ] }) }, key)] })); }; //# sourceMappingURL=MapperList.js.map