import { useState, useCallback } from 'react'; import { audit } from '../services/audit.service'; import { AuditEventQuery, AuditEventResult, EventFilters } from '../types'; export function useAuditSearch() { const [result, setResult] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [filters, setFilters] = useState({}); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(50); const search = useCallback(async (query?: AuditEventQuery) => { setLoading(true); setError(null); try { const searchQuery: AuditEventQuery = query || { filters, pagination: { page, limit: pageSize, }, }; const searchResult = await audit.query(searchQuery); setResult(searchResult); } catch (err: any) { setError(err); } finally { setLoading(false); } }, [filters, page, pageSize]); const updateFilters = useCallback((newFilters: Partial) => { setFilters(prev => ({ ...prev, ...newFilters })); setPage(1); // Reset to first page when filters change }, []); const clearFilters = useCallback(() => { setFilters({}); setPage(1); }, []); const nextPage = useCallback(() => { if (result && result.hasMore) { setPage(prev => prev + 1); } }, [result]); const previousPage = useCallback(() => { if (page > 1) { setPage(prev => prev - 1); } }, [page]); const goToPage = useCallback((pageNumber: number) => { if (pageNumber >= 1) { setPage(pageNumber); } }, []); const changePageSize = useCallback((size: number) => { setPageSize(size); setPage(1); // Reset to first page when page size changes }, []); return { result, loading, error, filters, page, pageSize, search, updateFilters, clearFilters, nextPage, previousPage, goToPage, changePageSize, }; }