@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
75 lines • 4.12 kB
JavaScript
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