Hooks
38 custom hooks in frontend/src/hooks/ (29 top-level + 7 in url-state/ + 2 in property-mappings/, as of 2026-06), providing reusable stateful logic for forms, calculations, UI interactions, authentication, and URL state management. Feature-specific useFooState hooks live co-located with their components/pages per the Component Decomposition pattern and are not counted here.
Core Hooks
| Hook | File | Purpose |
|---|---|---|
useEntityForm | useEntityForm.ts | Generic entity CRUD form state management |
useFinancialDocumentForm | useFinancialDocumentForm.ts | Shared form logic for Quotes and Invoices |
useAmountCalculation | useAmountCalculation.ts | Line item amount/tax calculations |
useLineItemsTable | useLineItemsTable.ts | Line item table add/edit/remove state |
useDialogManager | useDialogManager.ts | Coordinated dialog open/close state |
useInlineEdit | useInlineEdit.ts | Click-to-edit inline field editing |
useInlineQuotes / useInlineInvoices / useInlineDocuments | useInline*.ts | Inline embedded lists for quotes, invoices, documents |
useResizableColumns | useResizableColumns.ts | Drag-to-resize table column state |
useCleanupTimeout | useCleanupTimeout.ts | Safe setTimeout with auto-cleanup on unmount (ESLint warns on raw setTimeout with window.* calls) |
useDebounce | useDebounce.ts | Debounced value updates |
useDocumentTitle | useDocumentTitle.ts | Route-aware document title |
Auth & Permissions
| Hook | Purpose |
|---|---|
useAuthInit | Bootstrap authentication state on app load |
usePermissions | Check RBAC Authorization permissions for current user |
useSessionStorage | Typed session storage wrapper |
See Authentication for the full auth flow.
Domain-Specific Hooks
| Hook | Domain | Related |
|---|---|---|
useUValueCalculation | Thermal U-value calculations | Energy Calculations, Building Components |
useGeocoding | Address geolocation lookup | Buildings |
useContactLookup | Contact search/autocomplete | Contacts |
useNewContactDialog | Inline contact creation dialog | Contacts |
useHubspotLinks | HubSpot deep links for synced entities | HubSpot Integration |
useScenarioMeasures | Scenario measure management | Scenarios |
useDocumentObtainingAssignments | Document collection assignments | Document Obtaining |
use-form-builder | Form builder state | Form Builder |
useTimerControl | Workflow time tracking | Workflows |
useDynamicFavicon | Environment-aware favicon | Frontend Architecture |
URL State Hooks (hooks/url-state/)
Mandatory — raw useSearchParams imports in components//pages/ are an ESLint error (frontend/eslint.config.js). See URL State Management.
| Hook | Purpose |
|---|---|
useTabState(validTabs, default) | Tab switching synced to URL |
useFilterState(defaults) | Multi-param filter state in URL |
useBillingFilterState | Billing-specific filter state |
useModalState(param?) | Deep-linkable modal/dialog |
useMultiSortState(columns, defaultSort) | Multi-column sort with Shift+Click stacking |
useSortWeightsState | Weighted sort criteria in URL |
useUrlBatchUpdate | Batch multiple URL param updates in one navigation |
Property Mapping Hooks (hooks/property-mappings/)
Hooks for HubSpot Integration property field mapping configuration between HubSpot and Renewa One entities.
Usage Rules
| Data Type | Correct Tool | Wrong Tool |
|---|---|---|
| Server entities | React Query Pattern via lib/queries/ | useState |
| URL-shareable UI | URL state hooks | raw useSearchParams |
| Form fields | react-hook-form + Zod | manual useState per field |
| Transient UI | useState | Zustand |
See State Management for the complete decision matrix.
Related
- URL State Management — Deep-linkable UI state
- State Management — When to use which state tool
- Frontend Architecture — Hook placement in project structure
- RBAC Authorization — Permission hooks
- Energy Calculations — Calculation hooks
- Query Modules — Data fetching hooks