UNPKG

@keycloakify/keycloak-admin-ui

Version:
137 lines 7.28 kB
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