Skip to main content

Hooks Reference

HostMetrics uses custom React hooks extensively for data fetching, state management, and business logic. All hooks live in src/hooks/.

Complete Hook Index

Data Fetching and CRUD Hooks

HookFilePurposeKey Returns
useKPIssrc/hooks/useKPIs.tsDashboard KPI calculationskpis, isLoading, error
useBookingssrc/hooks/useBookings.tsTrip data with filteringbookings, stats, filters
useCalendarBookingssrc/hooks/useCalendarBookings.tsCalendar view trip databookings, dateRange
useVehiclessrc/hooks/useVehicles.tsVehicle CRUD operationsvehicles, addVehicle, updateVehicle
useVehicle360src/hooks/useVehicle360.tsVehicle deep analyticsanalytics, trends
useVehicleDepreciationsrc/hooks/useVehicleDepreciation.tsDepreciation calculationsdepreciation, method
useVehiclePhotossrc/hooks/useVehiclePhotos.tsPhoto upload and managementphotos, upload, reorder
useVehicleInvestmentssrc/hooks/useVehicleInvestments.tsVehicle investment trackinginvestments
useExpensessrc/hooks/useExpenses.tsExpense managementexpenses, addExpense, deleteExpense
useMiscIncomesrc/hooks/useMiscIncome.tsNon-trip income trackingincomes, addIncome
useDocumentssrc/hooks/useDocuments.tsDocument managementdocuments, upload, delete
useProfilesrc/hooks/useProfile.tsUser profile dataprofile, updateProfile

Partner and Investor Hooks

HookFilePurposeKey Returns
useInvestorssrc/hooks/useInvestors.tsInvestor CRUDinvestors, addInvestor
useInvestorAgreementssrc/hooks/useInvestorAgreements.tsAgreement managementagreements, create, sign
useInvestorDetailModalssrc/hooks/useInvestorDetailModals.tsModal state managementmodalStates, open, close
useVehiclePayoutssrc/hooks/useVehiclePayouts.tsInvestor payout calculationspayouts, calculate
useAgreementTemplatesrc/hooks/useAgreementTemplate.tsAgreement templatestemplate, update

Financial and Analytics Hooks

HookFilePurposeKey Returns
useTollReconciliationsrc/hooks/useTollReconciliation.tsToll-to-trip matchingreconciliation, stats
useTollAccountssrc/hooks/useTollAccounts.tsToll account connectionsaccounts, connect, test
useEarningsDiscrepanciessrc/hooks/useEarningsDiscrepancies.tsUnmatched trip detectiondiscrepancies, resolve
useUtilizationsrc/hooks/useUtilization.tsFleet utilization metricsutilization, trends
useTaxDatasrc/hooks/useTaxData.tsTax document datataxData, generate1099
useBillingsrc/hooks/useBilling.tsSubscription and billingsubscription, plan, invoices

Infrastructure Hooks

HookFilePurposeKey Returns
useFundingRoundssrc/hooks/useFundingRounds.tsFunding round managementrounds, create
useFleetPagessrc/hooks/useFleetPages.tsFleet page CRUDpages, create, update
useFleetVehicleControlssrc/hooks/useFleetVehicleControls.tsFleet page vehicle controlscontrols
useNotificationssrc/hooks/useNotifications.tsNotification managementnotifications, markRead
usePortalAccessLogssrc/hooks/usePortalAccessLogs.tsPortal access audit logslogs

Common Usage Patterns

Basic Data Fetching

Most hooks follow the same pattern: fetch data on mount, expose loading/error states, and provide mutation functions.
'use client';

import { useAuth } from "@/components/auth/AuthProvider";
import { useKPIs } from "@/hooks/useKPIs";
import { useBookings } from "@/hooks/useBookings";
import { useVehicles } from "@/hooks/useVehicles";

export function DashboardPage() {
  const { user } = useAuth();
  const { kpis, isLoading: kpisLoading } = useKPIs();
  const { bookings, stats } = useBookings(filters);
  const { vehicles } = useVehicles();

  if (kpisLoading) return <LoadingSkeleton />;

  return (
    <div>
      <StatGrid kpis={kpis} />
      <TripTable bookings={bookings} />
    </div>
  );
}

Hooks with Filters

Some hooks accept filter parameters that trigger re-fetching when changed:
const [filters, setFilters] = useState({
  status: "completed",
  dateRange: { start: "2026-01-01", end: "2026-03-10" },
  vehicleId: null,
});

const { bookings, stats, isLoading } = useBookings(filters);

CRUD Operations

Hooks that support mutations return functions for create, update, and delete:
const { vehicles, addVehicle, updateVehicle, deleteVehicle } = useVehicles();

// Create
await addVehicle({ make: "Tesla", model: "Model 3", year: 2023 });

// Update
await updateVehicle(vehicleId, { status: "inactive" });

// Delete (soft delete)
await deleteVehicle(vehicleId);

Combining Multiple Hooks

Complex pages often compose several hooks together:
const { vehicles } = useVehicles();
const { expenses } = useExpenses({ vehicleId: selectedVehicle });
const { documents } = useDocuments({ vehicleId: selectedVehicle });
const { depreciation } = useVehicleDepreciation(selectedVehicle);

Hook Conventions

  • All hooks that fetch data include isLoading and error in their return value
  • Data is fetched on component mount via useEffect
  • Hooks call database modules from src/lib/db/ — they never call Supabase directly
  • Auth context (useAuth) provides the current user for all downstream queries
  • Hooks use useCallback for stable mutation function references