@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
51 lines • 5.33 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
import { Button, ButtonVariant, Divider, Form, InputGroup, PageSection, TextInput, Toolbar, ToolbarGroup, ToolbarItem, InputGroupItem, Select, MenuToggle, SelectList, SelectOption, } from "@patternfly/react-core";
import { SearchIcon } from "@patternfly/react-icons";
import { Table, Th, Thead, Tr } from "@patternfly/react-table";
import { useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { FixedButtonsGroup } from "../../../components/form/FixedButtonGroup";
import { ListEmptyState } from "../../../ui-shared";
import useToggle from "../../../utils/useToggle";
import { AuthorizationDataModal } from "../../../clients/authorization/AuthorizationDataModal";
import { AuthorizationEvaluateResource } from "../../../clients/authorization/AuthorizationEvaluateResource";
var ResultsFilter;
(function (ResultsFilter) {
ResultsFilter["All"] = "ALL";
ResultsFilter["StatusDenied"] = "STATUS_DENIED";
ResultsFilter["StatusPermitted"] = "STATUS_PERMITTED";
})(ResultsFilter || (ResultsFilter = {}));
function filterResults(results, filter) {
switch (filter) {
case ResultsFilter.StatusPermitted:
return results.filter(({ status }) => status === "PERMIT");
case ResultsFilter.StatusDenied:
return results.filter(({ status }) => status === "DENY");
default:
return results;
}
}
export const Results = ({ evaluateResult, refresh, back }) => {
const { t } = useTranslation();
const [filterDropdownOpen, toggleFilterDropdown] = useToggle();
const [filter, setFilter] = useState(ResultsFilter.All);
const [searchQuery, setSearchQuery] = useState("");
const [searchInput, setSearchInput] = useState("");
const confirmSearchQuery = () => {
setSearchQuery(searchInput);
};
const handleKeyDown = (e) => {
if (e.key === "Enter") {
confirmSearchQuery();
}
};
const filteredResources = useMemo(() => filterResults(evaluateResult.results, filter).filter(({ resource }) => { var _a, _b; return (_b = (_a = resource === null || resource === void 0 ? void 0 : resource.name) === null || _a === void 0 ? void 0 : _a.includes(searchQuery)) !== null && _b !== void 0 ? _b : false; }), [evaluateResult.results, filter, searchQuery]);
const noEvaluatedData = evaluateResult.results.length === 0;
const noFilteredData = filteredResources.length === 0;
return (_jsxs(PageSection, { children: [_jsx(Toolbar, { children: _jsxs(ToolbarGroup, { className: "providers-toolbar", children: [_jsx(ToolbarItem, { children: _jsxs(InputGroup, { children: [_jsx(InputGroupItem, { isFill: true, children: _jsx(TextInput, { name: "inputGroupName", id: "inputGroupName", type: "search", "aria-label": t("search"), placeholder: t("search"), onChange: (_event, val) => setSearchInput(val), onKeyDown: handleKeyDown }) }), _jsx(InputGroupItem, { children: _jsx(Button, { variant: ButtonVariant.control, "aria-label": t("search"), onClick: () => confirmSearchQuery(), children: _jsx(SearchIcon, {}) }) })] }) }), _jsx(ToolbarItem, { children: _jsx(Select, { "data-testid": "filter-type-select", isOpen: filterDropdownOpen, className: "kc-filter-type-select", toggle: (ref) => (_jsx(MenuToggle, { ref: ref, onClick: toggleFilterDropdown, isExpanded: filterDropdownOpen, style: { width: "300px" }, children: filter })), onSelect: (_, value) => {
setFilter(value);
toggleFilterDropdown();
refresh();
}, selected: filter, children: _jsxs(SelectList, { children: [_jsx(SelectOption, { "data-testid": "all-results-option", value: ResultsFilter.All, children: t("allResults") }), _jsx(SelectOption, { "data-testid": "result-permit-option", value: ResultsFilter.StatusPermitted, children: t("resultPermit") }), _jsx(SelectOption, { "data-testid": "result-deny-option", value: ResultsFilter.StatusDenied, children: t("resultDeny") })] }) }) })] }) }), !noFilteredData && (_jsxs(Table, { "aria-label": t("evaluationResults"), children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { "aria-hidden": "true" }), _jsx(Th, { children: t("resource") }), _jsx(Th, { children: t("overallResults") }), _jsx(Th, { children: t("scopes") }), _jsx(Th, { "aria-hidden": "true" })] }) }), filteredResources.map((resource, rowIndex) => (_jsx(AuthorizationEvaluateResource, { rowIndex: rowIndex, resource: resource, evaluateResults: evaluateResult.results }, rowIndex)))] })), (noFilteredData || noEvaluatedData) && (_jsxs(_Fragment, { children: [_jsx(Divider, {}), _jsx(ListEmptyState, { isSearchVariant: true, message: t("noSearchResults"), instructions: t("noSearchResultsInstructions") })] })), _jsx(Form, { children: _jsxs(FixedButtonsGroup, { name: "authorization", children: [_jsx(Button, { "data-testid": "authorization-eval", id: "back-btn", onClick: back, children: t("back") }), " ", _jsx(Button, { "data-testid": "authorization-reevaluate", id: "reevaluate-btn", variant: "secondary", onClick: refresh, children: t("reevaluate") }), " ", _jsx(AuthorizationDataModal, { data: evaluateResult.rpt })] }) })] }));
};
//# sourceMappingURL=Results.js.map