@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
137 lines • 7.28 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { SearchInput, ToolbarItem } from "@patternfly/react-core";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Link, useLocation } from "react-router-dom";
import { useAdminClient } from "../admin-client";
import { ListEmptyState } from "../ui-shared";
import { KeycloakDataTable } from "../ui-shared";
import { useAccess } from "../context/access/Access";
import useToggle from "../utils/useToggle";
import { GroupsModal } from "../groups/GroupsModal";
import { useSubGroups } from "../groups/SubGroupsContext";
import { DeleteGroup } from "../groups/components/DeleteGroup";
import { GroupToolbar } from "../groups/components/GroupToolbar";
import { MoveDialog } from "../groups/components/MoveDialog";
import { getLastId } from "../groups/groupIdUtils";
export const GroupTable = ({ refresh: viewRefresh }) => {
var _a, _b, _c;
const { adminClient } = useAdminClient();
const { t } = useTranslation();
const [selectedRows, setSelectedRows] = useState([]);
const [rename, setRename] = useState();
const [isCreateModalOpen, toggleCreateOpen] = useToggle();
const [duplicateId, setDuplicateId] = useState();
const [showDelete, toggleShowDelete] = useToggle();
const [move, setMove] = useState();
const { currentGroup } = useSubGroups();
const [key, setKey] = useState(0);
const refresh = () => setKey(key + 1);
const [search, setSearch] = useState();
const location = useLocation();
const id = getLastId(location.pathname);
const { hasAccess } = useAccess();
const isManager = hasAccess("manage-users") || ((_b = (_a = currentGroup()) === null || _a === void 0 ? void 0 : _a.access) === null || _b === void 0 ? void 0 : _b.manage);
const loader = async (first, max) => {
let groupsData = undefined;
if (id) {
const args = {
search: search || "",
first: first,
max: max,
parentId: id,
};
groupsData = await adminClient.groups.listSubGroups(args);
}
else {
const args = {
search: search || "",
first: first || undefined,
max: max || undefined,
};
groupsData = await adminClient.groups.find(args);
}
return groupsData;
};
return (_jsxs(_Fragment, { children: [_jsx(DeleteGroup, { show: showDelete, toggleDialog: toggleShowDelete, selectedRows: selectedRows, refresh: () => {
refresh();
viewRefresh();
setSelectedRows([]);
} }), rename && (_jsx(GroupsModal, { id: rename.id, rename: rename, refresh: () => {
refresh();
viewRefresh();
}, handleModalToggle: () => setRename(undefined) })), isCreateModalOpen && (_jsx(GroupsModal, { id: ((_c = selectedRows[0]) === null || _c === void 0 ? void 0 : _c.id) || id, handleModalToggle: toggleCreateOpen, refresh: () => {
setSelectedRows([]);
refresh();
viewRefresh();
} })), duplicateId && (_jsx(GroupsModal, { id: duplicateId, duplicateId: duplicateId, refresh: () => {
refresh();
viewRefresh();
}, handleModalToggle: () => setDuplicateId(undefined) })), move && (_jsx(MoveDialog, { source: move, refresh: () => {
setMove(undefined);
refresh();
viewRefresh();
}, onClose: () => setMove(undefined) })), _jsx(KeycloakDataTable, { onSelect: (rows) => setSelectedRows([...rows]), canSelectAll: true, loader: loader, ariaLabelKey: "groups", isPaginated: true, isSearching: !!search, toolbarItem: _jsxs(_Fragment, { children: [_jsx(ToolbarItem, { children: _jsx(SearchInput, { "data-testid": "group-search", placeholder: t("filterGroups"), value: search, onChange: (_, value) => {
setSearch(value);
}, onSearch: refresh, onClear: () => {
setSearch("");
refresh();
} }) }), _jsx(GroupToolbar, { toggleCreate: toggleCreateOpen, toggleDelete: toggleShowDelete, kebabDisabled: selectedRows.length === 0 })] }), actions: !isManager
? []
: [
{
title: t("rename"),
onRowClick: async (group) => {
setRename(group);
return false;
},
},
{
title: t("moveTo"),
onRowClick: async (group) => {
setMove(group);
return false;
},
},
{
title: t("createChildGroup"),
onRowClick: async (group) => {
setSelectedRows([group]);
toggleCreateOpen();
return false;
},
},
...(!id
? [
{
title: t("duplicate"),
onRowClick: async (group) => {
setDuplicateId(group.id);
return false;
},
},
]
: []),
{
isSeparator: true,
},
{
title: t("delete"),
onRowClick: async (group) => {
setSelectedRows([group]);
toggleShowDelete();
return true;
},
},
], columns: [
{
name: "name",
displayKey: "groupName",
cellRenderer: (group) => {
var _a;
return ((_a = group.access) === null || _a === void 0 ? void 0 : _a.view) ? (_jsx(Link, { to: `${location.pathname}/${group.id}`, children: group.name }, group.id)) : (_jsx("span", { children: group.name }));
},
},
], emptyState: _jsx(ListEmptyState, { hasIcon: true, message: t(`noGroupsInThis${id ? "SubGroup" : "Realm"}`), instructions: t(`noGroupsInThis${id ? "SubGroup" : "Realm"}Instructions`), primaryActionText: t("createGroup"), onPrimaryAction: toggleCreateOpen }) }, `${id}${key}`)] }));
};
//# sourceMappingURL=GroupTable.js.map