'use client' import { useState, useEffect } from 'react' import { Spinner } from '@ciphera-net/ui' import { useAuth } from '@/lib/auth/context' import { getAuditLog, type AuditLogEntry } from '@/lib/api/audit' import { formatDateTimeShort } from '@/lib/utils/formatDate' const ACTION_LABELS: Record = { site_created: 'Created site', site_updated: 'Updated site', site_deleted: 'Deleted site', site_restored: 'Restored site', goal_created: 'Created goal', goal_updated: 'Updated goal', goal_deleted: 'Deleted goal', funnel_created: 'Created funnel', funnel_updated: 'Updated funnel', funnel_deleted: 'Deleted funnel', gsc_connected: 'Connected Google Search Console', gsc_disconnected: 'Disconnected Google Search Console', bunny_connected: 'Connected BunnyCDN', bunny_disconnected: 'Disconnected BunnyCDN', member_invited: 'Invited member', member_removed: 'Removed member', member_role_changed: 'Changed member role', org_updated: 'Updated organization', plan_changed: 'Changed plan', subscription_cancelled: 'Cancelled subscription', subscription_resumed: 'Resumed subscription', } export default function WorkspaceAuditTab() { const { user } = useAuth() const [entries, setEntries] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { if (!user?.org_id) return getAuditLog({ limit: 50 }) .then(data => setEntries(data.entries)) .catch(() => {}) .finally(() => setLoading(false)) }, [user?.org_id]) if (loading) return
return (

Audit Log

Track who made changes and when.

{entries.length === 0 ? (

No activity recorded yet.

) : (
{entries.map(entry => (

{entry.actor_email || 'System'} {' '} {ACTION_LABELS[entry.action] || entry.action}

{entry.payload && Object.keys(entry.payload).length > 0 && (

{JSON.stringify(entry.payload)}

)}

{formatDateTimeShort(new Date(entry.occurred_at))}

))}
)}
) }