teqo-backup/src/components/campaign/MunicipalityEstimateScenarioContext.tsx
Francisco Ignácio Fontoura Solla cf6ae6c47c Pass 2 W2: correcoes de fronteira lib/utilities e client boundary
- helpers puros movidos utilities->lib: slug, phone, wordStartFilter, voteEstimate (9 inversoes lib->utilities zeradas)
- chaves de consent em src/lib/campaignConsentKeys.ts (client-safe); campaignInvite/campaignConsent re-exportam; onda0ConsentTexts referencia as constantes
- 'server-only' em 21 loaders Payload/cache (CLI segue com --conditions=react-server)
- ciclo de tipos supporterListFilters <-> supporterUi quebrado (SupporterListFilterInput estrutural; sqlFilters idem)
- votePledgeData dividido: votePledgeViews (puro, client-safe) + votePledgeData (loaders, server-only) - padrao contract-module
- predicados de role client-safe em src/lib/campaignRoles.ts; access/shared deriva deles (fonte unica); nav.ts para de importar o barrel campaignAccess (casts 'as CampaignUser' eliminados)
2026-07-25 14:38:41 -03:00

34 lines
1.3 KiB
TypeScript

'use client'
import { createContext, useContext, useMemo, useState, type ReactNode } from 'react'
import { DEFAULT_VOTE_ESTIMATE_SCENARIO, type VoteEstimateScenario } from '@/lib/voteEstimate'
type MunicipalityEstimateScenarioContextValue = {
scenario: VoteEstimateScenario
setScenario: (scenario: VoteEstimateScenario) => void
}
const MunicipalityEstimateScenarioContext = createContext<MunicipalityEstimateScenarioContextValue | null>(null)
export const MunicipalityEstimateScenarioProvider = ({ children }: { children: ReactNode }) => {
const [scenario, setScenario] = useState<VoteEstimateScenario>(DEFAULT_VOTE_ESTIMATE_SCENARIO)
const value = useMemo(() => ({ scenario, setScenario }), [scenario])
return (
<MunicipalityEstimateScenarioContext.Provider value={value}>
{children}
</MunicipalityEstimateScenarioContext.Provider>
)
}
export const useMunicipalityEstimateScenario = (): MunicipalityEstimateScenarioContextValue => {
const value = useContext(MunicipalityEstimateScenarioContext)
if (!value) {
throw new Error('useMunicipalityEstimateScenario must be used within MunicipalityEstimateScenarioProvider')
}
return value
}
export const useMunicipalityEstimateScenarioOptional = (): MunicipalityEstimateScenarioContextValue | null =>
useContext(MunicipalityEstimateScenarioContext)