1- import { Card , CardContent } from '@/Components/ui/card' ;
2- import { Tabs , TabsContent , TabsList , TabsTrigger } from '@/Components/ui/tabs' ;
31import { Carrier } from '@/types' ;
4- import { Clock , Table } from 'lucide-react' ;
5- import { useEffect , useState } from 'react' ;
6- import AuditTable from './AuditTable' ;
7- import AuditTimeline from './AuditTimeline' ;
8-
9- interface AuditChange {
10- field : string ;
11- field_name : string ;
12- old_value : unknown ;
13- new_value : unknown ;
14- }
15-
16- interface AuditEntry {
17- id : number ;
18- event : string ;
19- user : {
20- id : number ;
21- name : string ;
22- email : string ;
23- } | null ;
24- old_values : Record < string , unknown > ;
25- new_values : Record < string , unknown > ;
26- changes : AuditChange [ ] ;
27- created_at : string ;
28- created_at_human : string ;
29- ip_address ?: string ;
30- user_agent ?: string ;
31- }
2+ import AuditHistory from './AuditHistory' ;
323
334interface CarrierAuditHistoryProps {
345 carrier : Carrier ;
@@ -37,86 +8,11 @@ interface CarrierAuditHistoryProps {
378export default function CarrierAuditHistory ( {
389 carrier,
3910} : CarrierAuditHistoryProps ) {
40- const [ audits , setAudits ] = useState < AuditEntry [ ] > ( [ ] ) ;
41- const [ loading , setLoading ] = useState ( true ) ;
42- const [ error , setError ] = useState < string | null > ( null ) ;
43- const [ activeTab , setActiveTab ] = useState ( 'timeline' ) ;
44-
45- useEffect ( ( ) => {
46- const fetchAudits = async ( ) => {
47- try {
48- setLoading ( true ) ;
49- const response = await fetch (
50- route ( 'carriers.audit-history' , carrier . id ) ,
51- ) ;
52-
53- if ( ! response . ok ) {
54- throw new Error ( 'Failed to fetch audit history' ) ;
55- }
56-
57- const data = await response . json ( ) ;
58- setAudits ( data . audits || [ ] ) ;
59- } catch ( err ) {
60- setError (
61- err instanceof Error ? err . message : 'An error occurred' ,
62- ) ;
63- } finally {
64- setLoading ( false ) ;
65- }
66- } ;
67-
68- if ( carrier . id ) {
69- fetchAudits ( ) ;
70- }
71- } , [ carrier . id ] ) ;
72-
73- if ( error ) {
74- return (
75- < Card >
76- < CardContent className = "p-6" >
77- < div className = "py-8 text-center" >
78- < div className = "mb-2 text-red-500" >
79- Error loading audit history
80- </ div >
81- < div className = "text-sm text-gray-500" > { error } </ div >
82- </ div >
83- </ CardContent >
84- </ Card >
85- ) ;
86- }
87-
8811 return (
89- < div className = "space-y-6" >
90- < Tabs
91- value = { activeTab }
92- onValueChange = { setActiveTab }
93- className = "w-full"
94- >
95- < TabsList className = "w-full" >
96- < TabsTrigger
97- value = "timeline"
98- className = "flex items-center gap-2"
99- >
100- < Clock className = "h-4 w-4" />
101- Audit Timeline
102- </ TabsTrigger >
103- < TabsTrigger
104- value = "table"
105- className = "flex items-center gap-2"
106- >
107- < Table className = "h-4 w-4" />
108- Audit Table
109- </ TabsTrigger >
110- </ TabsList >
111-
112- < TabsContent value = "timeline" className = "mt-6" >
113- < AuditTimeline audits = { audits } loading = { loading } />
114- </ TabsContent >
115-
116- < TabsContent value = "table" className = "mt-6" >
117- < AuditTable audits = { audits } loading = { loading } />
118- </ TabsContent >
119- </ Tabs >
120- </ div >
12+ < AuditHistory
13+ entityId = { carrier . id }
14+ routeName = "carriers.audit-history"
15+ showTabs = { true }
16+ />
12117 ) ;
12218}
0 commit comments