UNPKG

@keycloakify/keycloak-admin-ui

Version:
89 lines 6.05 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { AlertVariant, Button, ButtonVariant, ExpandableSection, FormGroup, Split, SplitItem, ToolbarItem, } from "@patternfly/react-core"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { HelpItem } from "../../ui-shared"; import { useAdminClient } from "../../admin-client"; import { useAlerts } from "../../ui-shared"; import { useConfirmDialog } from "../../components/confirm-dialog/ConfirmDialog"; import { FormAccess } from "../../components/form/FormAccess"; import { ListEmptyState } from "../../ui-shared"; import { KeycloakDataTable } from "../../ui-shared"; import { TimeSelectorForm } from "../../components/time-selector/TimeSelectorForm"; import useFormatDate, { FORMAT_DATE_AND_TIME } from "../../utils/useFormatDate"; import { AddHostDialog } from "../../clients/advanced/AddHostDialog"; import { parseResult } from "../../clients/AdvancedTab"; export const ClusteringPanel = ({ save, client: { id, registeredNodes, access }, }) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const { addAlert, addError } = useAlerts(); const formatDate = useFormatDate(); const [nodes, setNodes] = useState(registeredNodes || {}); const [expanded, setExpanded] = useState(false); const [selectedNode, setSelectedNode] = useState(""); const [addNodeOpen, setAddNodeOpen] = useState(false); const [key, setKey] = useState(0); const refresh = () => setKey(new Date().getTime()); const testCluster = async () => { const result = await adminClient.clients.testNodesAvailable({ id: id }); parseResult(result, "testCluster", addAlert, t); }; const [toggleDeleteNodeConfirm, DeleteNodeConfirm] = useConfirmDialog({ titleKey: "deleteNode", messageKey: t("deleteNodeBody", { node: selectedNode, }), continueButtonLabel: "delete", continueButtonVariant: ButtonVariant.danger, onConfirm: async () => { try { await adminClient.clients.deleteClusterNode({ id: id, node: selectedNode, }); setNodes({ ...Object.keys(nodes).reduce((object, key) => { if (key !== selectedNode) { object[key] = nodes[key]; } return object; }, {}), }); refresh(); addAlert(t("deleteNodeSuccess"), AlertVariant.success); } catch (error) { addError("deleteNodeFail", error); } }, }); return (_jsxs(_Fragment, { children: [_jsx(FormAccess, { role: "manage-clients", fineGrainedAccess: access === null || access === void 0 ? void 0 : access.configure, isHorizontal: true, children: _jsx(FormGroup, { label: t("nodeReRegistrationTimeout"), fieldId: "kc-node-reregistration-timeout", labelIcon: _jsx(HelpItem, { helpText: t("nodeReRegistrationTimeoutHelp"), fieldLabelId: "nodeReRegistrationTimeout" }), children: _jsxs(Split, { hasGutter: true, children: [_jsx(SplitItem, { children: _jsx(TimeSelectorForm, { name: "nodeReRegistrationTimeout" }) }), _jsx(SplitItem, { children: _jsx(Button, { variant: ButtonVariant.secondary, onClick: () => save(), children: t("save") }) })] }) }) }), _jsxs(_Fragment, { children: [_jsx(DeleteNodeConfirm, {}), _jsx(AddHostDialog, { clientId: id, isOpen: addNodeOpen, onAdded: (node) => { nodes[node] = Date.now() / 1000; refresh(); }, onClose: () => setAddNodeOpen(false) }), _jsx(ExpandableSection, { toggleText: t("registeredClusterNodes"), onToggle: (_event, val) => setExpanded(val), isExpanded: expanded, children: _jsx(KeycloakDataTable, { ariaLabelKey: "registeredClusterNodes", loader: () => Promise.resolve(Object.entries(nodes || {}).map((entry) => { return { host: entry[0], registration: entry[1] }; })), toolbarItem: _jsxs(_Fragment, { children: [_jsx(ToolbarItem, { children: _jsx(Button, { id: "testClusterAvailability", onClick: testCluster, variant: ButtonVariant.secondary, isDisabled: Object.keys(nodes).length === 0, children: t("testClusterAvailability") }) }), _jsx(ToolbarItem, { children: _jsx(Button, { id: "registerNodeManually", onClick: () => setAddNodeOpen(true), variant: ButtonVariant.tertiary, children: t("registerNodeManually") }) })] }), actions: [ { title: t("delete"), onRowClick: (node) => { setSelectedNode(node.host); toggleDeleteNodeConfirm(); }, }, ], columns: [ { name: "host", displayKey: "nodeHost", }, { name: "registration", displayKey: "lastRegistration", cellFormatters: [ (value) => value ? formatDate(new Date(parseInt(value.toString()) * 1000), FORMAT_DATE_AND_TIME) : "", ], }, ], emptyState: _jsx(ListEmptyState, { message: t("noNodes"), instructions: t("noNodesInstructions"), primaryActionText: t("registerNodeManually"), onPrimaryAction: () => setAddNodeOpen(true) }) }, key) })] })] })); }; //# sourceMappingURL=ClusteringPanel.js.map