mirror of
https://github.com/arcan1s/ahriman.git
synced 2026-04-07 02:53:38 +00:00
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import type React from "react";
|
|
import { Box } from "@mui/material";
|
|
import { DataGrid, type GridColDef } from "@mui/x-data-grid";
|
|
import { useQuery } from "@tanstack/react-query";
|
|
import EventDurationLineChart from "components/charts/EventDurationLineChart";
|
|
import { Client } from "api/client/AhrimanClient";
|
|
import { QueryKeys } from "api/QueryKeys";
|
|
import { formatTimestamp } from "components/common/formatTimestamp";
|
|
import type { Event } from "api/types/Event";
|
|
import type { RepositoryId } from "api/types/RepositoryId";
|
|
|
|
interface EventsTabProps {
|
|
packageBase: string;
|
|
repo: RepositoryId;
|
|
}
|
|
|
|
interface EventRow {
|
|
id: number;
|
|
timestamp: string;
|
|
event: string;
|
|
message: string;
|
|
}
|
|
|
|
const columns: GridColDef<EventRow>[] = [
|
|
{ field: "timestamp", headerName: "date", width: 180, align: "right", headerAlign: "right" },
|
|
{ field: "event", headerName: "event", flex: 1 },
|
|
{ field: "message", headerName: "description", flex: 2 },
|
|
];
|
|
|
|
export default function EventsTab({ packageBase, repo }: EventsTabProps): React.JSX.Element {
|
|
const { data: events = [] } = useQuery<Event[]>({
|
|
queryKey: QueryKeys.events(repo, packageBase),
|
|
queryFn: () => Client.fetchEvents(repo, packageBase, 30),
|
|
enabled: !!packageBase,
|
|
});
|
|
|
|
const rows: EventRow[] = events.map((e, idx) => ({
|
|
id: idx,
|
|
timestamp: formatTimestamp(e.created),
|
|
event: e.event,
|
|
message: e.message ?? "",
|
|
}));
|
|
|
|
return (
|
|
<Box sx={{ mt: 1 }}>
|
|
<EventDurationLineChart events={events} />
|
|
<DataGrid
|
|
rows={rows}
|
|
columns={columns}
|
|
density="compact"
|
|
initialState={{
|
|
sorting: { sortModel: [{ field: "timestamp", sort: "desc" }] },
|
|
}}
|
|
pageSizeOptions={[10, 25]}
|
|
sx={{ height: 300, mt: 1 }}
|
|
disableRowSelectionOnClick
|
|
/>
|
|
</Box>
|
|
);
|
|
}
|