You've already forked nginx-proxy-manager
mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-10-30 18:05:34 +03:00
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
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>
|
|
);
|
|
}
|