import React, { ReactNode, useContext, useState } from "react"; import { Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { Button, Modal, ModalVariant, ToolbarItem, Tooltip, } from "@patternfly/react-core"; import moment from "moment"; import { useAdminClient } from "../context/auth/AdminClient"; import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable"; import { RealmContext } from "../context/realm-context/RealmContext"; import { cellWidth, Table, TableBody, TableHeader, TableVariant, } from "@patternfly/react-table"; import AdminEventRepresentation from "keycloak-admin/lib/defs/adminEventRepresentation"; import { ListEmptyState } from "../components/list-empty-state/ListEmptyState"; type DisplayDialogProps = { titleKey: string; onClose: () => void; children: ReactNode; }; const DisplayDialog = ({ titleKey, onClose, children }: DisplayDialogProps) => { const { t } = useTranslation("events"); return ( {children} ); }; const MAX_TEXT_LENGTH = 38; const Truncate = ({ text, children, }: { text?: string; children: (text: string) => any; }) => { const definedText = text || ""; const needsTruncation = definedText.length > MAX_TEXT_LENGTH; const truncatedText = definedText.substr(0, MAX_TEXT_LENGTH); return ( <> {needsTruncation && ( {children(truncatedText + "...")} )} {!needsTruncation && <>{children(definedText)}} ); }; export const AdminEvents = () => { const { t } = useTranslation("events"); const adminClient = useAdminClient(); const { realm } = useContext(RealmContext); const [key, setKey] = useState(0); const refresh = () => setKey(new Date().getTime()); const [authEvent, setAuthEvent] = useState(); const [representationEvent, setRepresentationEvent] = useState< AdminEventRepresentation >(); const loader = async (first?: number, max?: number, search?: string) => { const params = { first: first!, max: max!, realm, }; if (search) { console.log("how to search?", search); } return await adminClient.realms.findAdminEvents({ ...params }); }; const LinkResource = (row: AdminEventRepresentation) => ( <> {(text) => ( <> {row.resourceType !== "COMPONENT" && ( {text} )} {row.resourceType === "COMPONENT" && {text}} )} ); return ( <> {authEvent && ( setAuthEvent(undefined)}>
)} {representationEvent && ( setRepresentationEvent(undefined)} > some json from the changed values )} } actions={[ { title: t("auth"), onRowClick: (event) => setAuthEvent(event), }, { title: t("representation"), onRowClick: (event) => setRepresentationEvent(event), }, ]} columns={[ { name: "time", displayKey: "events:time", cellRenderer: (row) => moment(row.time).fromNow(), }, { name: "resourcePath", displayKey: "events:resourcePath", cellRenderer: LinkResource, }, { name: "resourceType", displayKey: "events:resourceType", }, { name: "operationType", displayKey: "events:operationType", transforms: [cellWidth(10)], }, { name: "", displayKey: "events:user", cellRenderer: (event) => event.authDetails?.userId, }, ]} emptyState={ } /> ); };