mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 07:43:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { IconArrowsCross, IconBolt, IconBoltOff, IconDisc, IconLock, IconUser } from "@tabler/icons-react";
 | |
| 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";
 | |
| 		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 = getColorForAction(row.action);
 | |
| 	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;
 | |
| 	}
 | |
| 
 | |
| 	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>
 | |
| 	);
 | |
| }
 |