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

HookFilePurpose
useEntityFormuseEntityForm.tsGeneric entity CRUD form state management
useFinancialDocumentFormuseFinancialDocumentForm.tsShared form logic for Quotes and Invoices
useAmountCalculationuseAmountCalculation.tsLine item amount/tax calculations
useLineItemsTableuseLineItemsTable.tsLine item table add/edit/remove state
useDialogManageruseDialogManager.tsCoordinated dialog open/close state
useInlineEdituseInlineEdit.tsClick-to-edit inline field editing
useInlineQuotes / useInlineInvoices / useInlineDocumentsuseInline*.tsInline embedded lists for quotes, invoices, documents
useResizableColumnsuseResizableColumns.tsDrag-to-resize table column state
useCleanupTimeoutuseCleanupTimeout.tsSafe setTimeout with auto-cleanup on unmount (ESLint warns on raw setTimeout with window.* calls)
useDebounceuseDebounce.tsDebounced value updates
useDocumentTitleuseDocumentTitle.tsRoute-aware document title

Auth & Permissions

HookPurpose
useAuthInitBootstrap authentication state on app load
usePermissionsCheck RBAC Authorization permissions for current user
useSessionStorageTyped session storage wrapper

See Authentication for the full auth flow.

Domain-Specific Hooks

HookDomainRelated
useUValueCalculationThermal U-value calculationsEnergy Calculations, Building Components
useGeocodingAddress geolocation lookupBuildings
useContactLookupContact search/autocompleteContacts
useNewContactDialogInline contact creation dialogContacts
useHubspotLinksHubSpot deep links for synced entitiesHubSpot Integration
useScenarioMeasuresScenario measure managementScenarios
useDocumentObtainingAssignmentsDocument collection assignmentsDocument Obtaining
use-form-builderForm builder stateForm Builder
useTimerControlWorkflow time trackingWorkflows
useDynamicFaviconEnvironment-aware faviconFrontend 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.

HookPurpose
useTabState(validTabs, default)Tab switching synced to URL
useFilterState(defaults)Multi-param filter state in URL
useBillingFilterStateBilling-specific filter state
useModalState(param?)Deep-linkable modal/dialog
useMultiSortState(columns, defaultSort)Multi-column sort with Shift+Click stacking
useSortWeightsStateWeighted sort criteria in URL
useUrlBatchUpdateBatch 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 TypeCorrect ToolWrong Tool
Server entitiesReact Query Pattern via lib/queries/useState
URL-shareable UIURL state hooksraw useSearchParams
Form fieldsreact-hook-form + Zodmanual useState per field
Transient UIuseStateZustand

See State Management for the complete decision matrix.