"use client";
import type { GroupSettingsViewModelState } from "@/features/groups/components/use-group-settings-view-model";
type GroupSettingsAuditCardProps = {
vm: GroupSettingsViewModelState;
};
export default function GroupSettingsAuditCard({ vm }: GroupSettingsAuditCardProps) {
if (!vm.canViewAudit) return null;
return (
Audit log
vm.setAuditOpen(prev => !prev)}
>
{vm.auditOpen ? "Collapse" : "Expand"}
{vm.auditOpen ? (
<>
Total logs
{vm.events.length}
Logs today
{vm.logsToday}
vm.mostActiveUser ? vm.setAuditQuery(vm.mostActiveUser.searchValue) : null}
disabled={!vm.mostActiveUser}
>
Most Active User ({vm.mostActiveCount})
{vm.mostActiveUser ? `${vm.mostActiveUser.name}` : "-"}
{([
{ key: "entries", label: "Entries" },
{ key: "members", label: "Members" },
{ key: "tags", label: "Tags" },
{ key: "settings", label: "Settings" }
] as const).map(filter => (
vm.setAuditFilters(prev => prev.includes(filter.key) ? prev.filter(item => item !== filter.key) : [...prev, filter.key])}
>
{filter.label}
))}
{!vm.filteredEvents.length ? (
No audit events match your filters.
) : (
{vm.filteredEvents.slice(0, vm.auditLimit).map(event => (
{event.eventType}
Actor: {vm.getMemberLabel(event.actorUserId)}
Role: {event.actorRole ?? "-"}
{new Date(event.createdAt).toLocaleString()}
))}
{vm.filteredEvents.length > vm.auditLimit ? (
vm.setAuditLimit(prev => prev + 10)}
>
Load more
) : null}
)}
>
) : (
Audit log is collapsed.
)}
);
}