1import{j as e}from"./vendor-query-DCEy32gT.js";import{a as d}from"./vendor-react-DQQd_tv7.js";import{aE as i,aH as l,aK as L,aL as z,aM as u,aN as j,aF as o,aG as x,aO as m,aP as T,ad as U,h as w,bT as B,bn as p,bU as $,ac as F,ag as P,bm as I,aQ as R}from"./index-BLMWtrsz.js";import"./vendor-pdf-Bs2G1MsY.js";import"./vendor-charts-DQlLoY8T.js";import"./vendor-dnd-CEOzIhnA.js";import"./vendor-cmdk-DZOUNnSX.js";import"./vendor-date-DvNbr4u3.js";import"./vendor-canvas-BALaVOQn.js";import"./vendor-panels-BoPcG2Ma.js";function Z(){var N,v;const[A,C]=d.useState([]),[q,k]=d.useState(null),[c,g]=d.useState({entityType:"",actionType:""}),[O,S]=d.useState(!0),[r,D]=d.useState(null),[a,y]=d.useState(null);d.useEffect(()=>{(async()=>{try{const t=await w.auth.me(),n=await w.entities.Organization.filter({user_email:t.email},"-created_date",1);if(n.length>0){k(n[0]);const _=await new B(n[0].id).getOrganizationAuditTrail(1e3);C(_.audit_trails||[]),D(_.summary)}}catch(t){console.error("Error loading audit trail:",t)}finally{S(!1)}})()},[]);const f=s=>{switch(s){case"create":return e.jsx(p,{className:"w-4 h-4 text-green-600"});case"update":return e.jsx(p,{className:"w-4 h-4 text-blue-600"});case"delete":return e.jsx(R,{className:"w-4 h-4 text-red-600"});case"approve":return e.jsx(I,{className:"w-4 h-4 text-green-600"});case"reject":return e.jsx(P,{className:"w-4 h-4 text-red-600"});case"lock":return e.jsx(F,{className:"w-4 h-4 text-orange-600"});case"unlock":return e.jsx($,{className:"w-4 h-4 text-orange-600"});case"version_rollback":return e.jsx(p,{className:"w-4 h-4 text-purple-600"});default:return e.jsx(p,{className:"w-4 h-4"})}},E=s=>{switch(s){case"create":return"bg-green-100 text-green-800";case"delete":return"bg-red-100 text-red-800";case"approve":return"bg-green-100 text-green-800";case"reject":return"bg-red-100 text-red-800";case"version_rollback":return"bg-purple-100 text-purple-800";default:return"bg-blue-100 text-blue-800"}},h=A.filter(s=>!(c.entityType&&s.entity_type!==c.entityType||c.actionType&&s.action_type!==c.actionType));return O?e.jsx("div",{className:"flex items-center justify-center h-96",children:"Loading audit trail..."}):e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Audit Trail"}),e.jsx("p",{className:"text-muted-foreground mt-2",children:"Complete activity log of all changes in your organization"})]}),r&&e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsx(i,{children:e.jsxs(l,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Total Actions"}),e.jsx("p",{className:"text-3xl font-bold",children:r.total_actions})]})}),e.jsx(i,{children:e.jsxs(l,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Unique Users"}),e.jsx("p",{className:"text-3xl font-bold",children:Object.keys(r.actions_by_actor||{}).length})]})}),e.jsx(i,{children:e.jsxs(l,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Top Action"}),e.jsx("p",{className:"text-lg font-bold",children:Object.entries(r.actions_by_type||{}).length>0?Object.entries(r.actions_by_type).sort((s,t)=>t[1]-s[1])[0][0]:"N/A"})]})}),e.jsx(i,{children:e.jsxs(l,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Active Days"}),e.jsx("p",{className:"text-3xl font-bold",children:Object.keys(r.actions_by_date||{}).length})]})})]}),e.jsxs(L,{defaultValue:"timeline",className:"w-full",children:[e.jsxs(z,{className:"grid w-full grid-cols-3",children:[e.jsx(u,{value:"timeline",children:"Activity Timeline"}),e.jsx(u,{value:"byuser",children:"By User"}),e.jsx(u,{value:"byaction",children:"By Action"})]}),e.jsx(j,{value:"timeline",className:"space-y-4",children:e.jsxs(i,{children:[e.jsx(o,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(x,{children:"Activity Timeline"}),e.jsxs(m,{children:[h.length," actions shown"]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("select",{value:c.entityType,onCh
1ange:s=>g({...c,entityType:s.target.value}),className:"px-3 py-2 border rounded text-sm",children:[e.jsx("option",{value:"",children:"All entities"}),e.jsx("option",{value:"estimate",children:"Estimates"}),e.jsx("option",{value:"project",children:"Projects"}),e.jsx("option",{value:"pricing_standard",children:"Pricing"}),e.jsx("option",{value:"user",children:"Users"})]}),e.jsxs("select",{value:c.actionType,onChange:s=>g({...c,actionType:s.target.value}),className:"px-3 py-2 border rounded text-sm",children:[e.jsx("option",{value:"",children:"All actions"}),e.jsx("option",{value:"create",children:"Create"}),e.jsx("option",{value:"update",children:"Update"}),e.jsx("option",{value:"delete",children:"Delete"}),e.jsx("option",{value:"approve",children:"Approve"}),e.jsx("option",{value:"version_rollback",children:"Rollback"})]})]})]})}),e.jsx(l,{className:"space-y-3",children:h.length===0?e.jsx("p",{className:"text-muted-foreground",children:"No audit records found"}):h.slice(0,100).map((s,t)=>{var n;return e.jsxs("div",{className:"flex items-start gap-3 p-3 border rounded hover:bg-accent cursor-pointer",onClick:()=>y(s),children:[e.jsx("div",{className:"mt-1",children:f(s.action_type)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"font-medium truncate",children:((n=s.related_entity)==null?void 0:n.display_name)||s.entity_id}),e.jsx(T,{className:E(s.action_type),children:s.action_type}),e.jsx(T,{variant:"outline",children:s.entity_type})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s.change_summary}),e.jsxs("div",{className:"flex items-center justify-between mt-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[s.actor_name," (",s.actor_role,")"]}),e.jsx("span",{children:new Date(s.created_date).toLocaleString()})]})]})]},s.id)})})]})}),e.jsx(j,{value:"byuser",className:"space-y-4",children:e.jsxs(i,{children:[e.jsxs(o,{children:[e.jsx(x,{children:"Activity by User"}),e.jsx(m,{children:"Who made the most changes"})]}),e.jsx(l,{className:"space-y-4",children:r!=null&&r.actions_by_actor&&Object.entries(r.actions_by_actor).length>0?Object.entries(r.actions_by_actor).sort((s,t)=>t[1].count-s[1].count).map(([s,t])=>e.jsxs("div",{className:"flex items-center justify-between p-3 border rounded",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:t.name}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:Object.entries(t.action_types).map(([n,b])=>`${b} ${n}`).join(", ")})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("p",{className:"text-2xl font-bold",children:t.count}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"actions"})]})]},s)):e.jsx("p",{className:"text-muted-foreground",children:"No user activity data"})})]})}),e.jsx(j,{value:"byaction",className:"space-y-4",children:e.jsxs(i,{children:[e.jsxs(o,{children:[e.jsx(x,{children:"Activity by Action Type"}),e.jsx(m,{children:"Breakdown of change types"})]}),e.jsx(l,{className:"space-y-4",children:r!=null&&r.actions_by_type&&Object.entries(r.actions_by_type).length>0?Object.entries(r.actions_by_type).sort((s,t)=>t[1]-s[1]).map(([s,t])=>e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 w-24",children:[f(s),e.jsx("span",{className:"font-medium capitalize",children:s.replace(/_/g," ")})]}),e.jsx("div",{className:"flex-1 bg-secondary h-8 rounded flex items-center px-2",children:e.jsx("div",{className:"bg-primary h-6 rounded flex items-center justify-end px-2 text-xs font-bold text-primary-foreground",style:{width:`${t/r.total_actions*100}%`},children:t>20&&`${t}`})}),e.jsx("span",{className:"text-sm font-medium w-12 text-right",children:t})]},s)):e.jsx("p",{className:"text-muted-foreground",children:"No action data"})})]})})]}),a&&e.jsxs(i,{className:"border-primary",children:[e.jsx(o,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(x,{children:"Change Details"}),e.jsxs(m,{children:[a.entity_type," ⢠",a.action_type]})]}),e.jsx(U,{size:"sm",variant:"ghost",onClick:()=>y(null),children:"Ã"})]})}),e.jsxs(l,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Actor"}),e.jsx("p",{className:"font-medium",children:a.actor_name}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a.actor_email})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Time"}),e.jsx("p",{className:"font-medium",children:new Date(a.created_date).toLocaleStr
1ing()})]})]}),a.change_summary&&e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Summary"}),e.jsx("p",{children:a.change_summary})]}),a.impact_scope&&e.jsxs("div",{className:"p-3 bg-secondary rounded",children:[e.jsx("p",{className:"text-sm font-medium mb-2",children:"Impact Scope"}),e.jsxs("div",{className:"text-sm space-y-1",children:[a.impact_scope.cost_impact_dollars!==void 0&&e.jsxs("p",{children:["Cost Impact: $",(N=a.impact_scope.cost_impact_dollars)==null?void 0:N.toFixed(2),"(",(v=a.impact_scope.cost_impact_percent)==null?void 0:v.toFixed(1),"%)"]}),a.impact_scope.rooms_affected!==void 0&&e.jsxs("p",{children:["Rooms Affected: ",a.impact_scope.rooms_affected]}),a.impact_scope.trades_affected!==void 0&&e.jsxs("p",{children:["Trades Affected: ",a.impact_scope.trades_affected]})]})]}),a.notes&&e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Notes"}),e.jsx("p",{children:a.notes})]})]})]})]})}export{Z as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.