| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { IconArrowsCross, IconBolt, IconBoltOff, IconDisc, IconLock, IconShield, IconUser } from "@tabler/icons-react";
- import cn from "classnames";
- import type { AuditLog } from "src/api/backend";
- import { DateTimeFormat, T } from "src/locale";
- const getEventValue = (event: AuditLog) => {
- switch (event.objectType) {
- case "access-list":
- case "user":
- return event.meta?.name;
- case "proxy-host":
- case "redirection-host":
- case "dead-host":
- return event.meta?.domainNames?.join(", ") || "N/A";
- case "stream":
- return event.meta?.incomingPort || "N/A";
- case "certificate":
- return event.meta?.domainNames?.join(", ") || event.meta?.niceName || "N/A";
- default:
- return `UNKNOWN EVENT TYPE: ${event.objectType}`;
- }
- };
- const getColorForAction = (action: string) => {
- switch (action) {
- case "created":
- return "text-lime";
- case "deleted":
- return "text-red";
- default:
- return "text-blue";
- }
- };
- const getIcon = (row: AuditLog) => {
- const c = cn(getColorForAction(row.action), "me-1");
- let ico = null;
- switch (row.objectType) {
- case "user":
- ico = <IconUser size={16} className={c} />;
- break;
- case "proxy-host":
- ico = <IconBolt size={16} className={c} />;
- break;
- case "redirection-host":
- ico = <IconArrowsCross size={16} className={c} />;
- break;
- case "dead-host":
- ico = <IconBoltOff size={16} className={c} />;
- break;
- case "stream":
- ico = <IconDisc size={16} className={c} />;
- break;
- case "access-list":
- ico = <IconLock size={16} className={c} />;
- break;
- case "certificate":
- ico = <IconShield size={16} className={c} />;
- break;
- }
- return ico;
- };
- interface Props {
- row: AuditLog;
- }
- export function EventFormatter({ row }: Props) {
- return (
- <div className="flex-fill">
- <div className="font-weight-medium">
- {getIcon(row)}
- <T id={`object.event.${row.action}`} tData={{ object: row.objectType }} />
- — <span className="badge">{getEventValue(row)}</span>
- </div>
- <div className="text-secondary mt-1">{DateTimeFormat(row.createdOn)}</div>
- </div>
- );
- }
|