diff --git a/src/app/(campaign)/campanha/(app)/apoiadores/[id]/page.tsx b/src/app/(campaign)/campanha/(app)/apoiadores/[id]/page.tsx index 7cd83086..1d8b97f2 100644 --- a/src/app/(campaign)/campanha/(app)/apoiadores/[id]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/apoiadores/[id]/page.tsx @@ -12,8 +12,8 @@ import { VoteIntentionControl } from '@/components/campaign/supporter/VoteIntent import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' +import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadSupporterDetailConsentData, loadSupporterDetailPageData, diff --git a/src/app/(campaign)/campanha/(app)/apoiadores/importar/page.tsx b/src/app/(campaign)/campanha/(app)/apoiadores/importar/page.tsx index d68f241e..dc0fa325 100644 --- a/src/app/(campaign)/campanha/(app)/apoiadores/importar/page.tsx +++ b/src/app/(campaign)/campanha/(app)/apoiadores/importar/page.tsx @@ -2,8 +2,8 @@ import Link from 'next/link' import { redirect } from 'next/navigation' import { SupporterImportWizard } from '@/components/campaign/supporter/SupporterImportWizard' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { isCampaignCoordinator } from '@/utilities/campaignAccess' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' diff --git a/src/app/(campaign)/campanha/(app)/apoiadores/novo/page.tsx b/src/app/(campaign)/campanha/(app)/apoiadores/novo/page.tsx index 0584e894..5d2ee1b5 100644 --- a/src/app/(campaign)/campanha/(app)/apoiadores/novo/page.tsx +++ b/src/app/(campaign)/campanha/(app)/apoiadores/novo/page.tsx @@ -5,8 +5,8 @@ import { getPayload } from 'payload' import { createSupporterFormAction } from '@/app/(campaign)/campanha/(app)/apoiadores/novo/formActions' import { SupporterForm } from '@/components/campaign/supporter/SupporterForm' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadSupporterCreatePageData } from '@/utilities/supporter/supporterPageData' import { canAccessSupporterArea } from '@/utilities/supporter/supporterUi' diff --git a/src/app/(campaign)/campanha/(app)/apoiadores/page.tsx b/src/app/(campaign)/campanha/(app)/apoiadores/page.tsx index b8397dfc..a7e0abb6 100644 --- a/src/app/(campaign)/campanha/(app)/apoiadores/page.tsx +++ b/src/app/(campaign)/campanha/(app)/apoiadores/page.tsx @@ -11,11 +11,11 @@ import { getPayload } from 'payload' import { CampaignListEmptyState } from '@/components/campaign/shared/CampaignListEmptyState' import { CampaignListFooter } from '@/components/campaign/shared/CampaignListFooter' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { SupporterFilters } from '@/components/campaign/supporter/SupporterFilters' import { SupporterList } from '@/components/campaign/supporter/SupporterList' import { SupporterListOverview } from '@/components/campaign/supporter/SupporterListOverview' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { isCampaignCoordinator } from '@/utilities/campaignAccess' import { readCampaignColumnVisibility } from '@/utilities/campaignColumnVisibilityCookie' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' diff --git a/src/app/(campaign)/campanha/(app)/assessores/[id]/page.tsx b/src/app/(campaign)/campanha/(app)/assessores/[id]/page.tsx index fc261368..89d4b78b 100644 --- a/src/app/(campaign)/campanha/(app)/assessores/[id]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/assessores/[id]/page.tsx @@ -9,12 +9,12 @@ import { AdvisorPasswordResetButton } from '@/components/campaign/advisor/Adviso import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { formatBrazilianPhoneInput } from '@/lib/phone' import { isPlanilhaPlaceholderEmail } from '@/lib/schemas/advisor' import { loadAdvisorDetail } from '@/utilities/advisorData' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { sendAdvisorPasswordResetFormAction, updateAdvisorProfileFormAction } from '../formActions' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' export const metadata = campaignPageMetadataFromCatalog('assessores') diff --git a/src/app/(campaign)/campanha/(app)/atividades/[slug]/editar/page.tsx b/src/app/(campaign)/campanha/(app)/atividades/[slug]/editar/page.tsx index 8eb00a21..447dea5a 100644 --- a/src/app/(campaign)/campanha/(app)/atividades/[slug]/editar/page.tsx +++ b/src/app/(campaign)/campanha/(app)/atividades/[slug]/editar/page.tsx @@ -22,12 +22,12 @@ type EditActivityPageProps = { params: Promise<{ slug: string }> } -const activityEditSubtitle = - 'Atualize os detalhes da atividade sem alterar o título original.' +const activityEditSubtitle = 'Atualize os detalhes da atividade sem alterar o título original.' export async function generateMetadata({ params }: EditActivityPageProps) { const { slug } = await params - if (!slug) return campaignPageMetadata({ title: 'Editar atividade', subtitle: activityEditSubtitle }) + if (!slug) + return campaignPageMetadata({ title: 'Editar atividade', subtitle: activityEditSubtitle }) const [user, payload] = await Promise.all([ requireCampaignPageActor({ gate: 'staff', redirectTo: '/campanha/atividades' }), diff --git a/src/app/(campaign)/campanha/(app)/atividades/[slug]/page.tsx b/src/app/(campaign)/campanha/(app)/atividades/[slug]/page.tsx index 55f76e6c..e3abed34 100644 --- a/src/app/(campaign)/campanha/(app)/atividades/[slug]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/atividades/[slug]/page.tsx @@ -17,6 +17,7 @@ import { CampaignQuickActionContextBridge } from '@/components/campaign/shell/Ca import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { formatBahiaDateTimeLabel } from '@/lib/campaignTime' import { activityKindLabels } from '@/lib/schemas/activity' import { getActivityDetailPageData } from '@/utilities/activityDetailPageData' @@ -31,7 +32,6 @@ import { import { isCampaignStaff } from '@/utilities/campaignAccess' import { firstValue, strictDecimalInteger } from '@/utilities/campaignListUrl' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { ActivityOverviewTab } from './ActivityOverviewTab' diff --git a/src/app/(campaign)/campanha/(app)/atividades/page.tsx b/src/app/(campaign)/campanha/(app)/atividades/page.tsx index 26e70f68..76062de3 100644 --- a/src/app/(campaign)/campanha/(app)/atividades/page.tsx +++ b/src/app/(campaign)/campanha/(app)/atividades/page.tsx @@ -14,6 +14,7 @@ import { CampaignListEmptyState } from '@/components/campaign/shared/CampaignLis import { CampaignListFooter } from '@/components/campaign/shared/CampaignListFooter' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import type { Activity } from '@/payload-types' import { loadActivityListPageData } from '@/utilities/activityPageData' import { @@ -24,7 +25,6 @@ import { import { toActivityListViewModel } from '@/utilities/activityViewModels' import { isCampaignStaff } from '@/utilities/campaignAccess' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadMunicipalityOptions } from '@/utilities/campaignRelationOptions' import { TOUR_COMPOSER_PATH } from '@/utilities/visit/visitPlannerUrl' diff --git a/src/app/(campaign)/campanha/(app)/conceitos/page.tsx b/src/app/(campaign)/campanha/(app)/conceitos/page.tsx index 30488089..9abf398f 100644 --- a/src/app/(campaign)/campanha/(app)/conceitos/page.tsx +++ b/src/app/(campaign)/campanha/(app)/conceitos/page.tsx @@ -1,12 +1,12 @@ import type { Metadata } from 'next' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { CAMPAIGN_CONCEPT_CATEGORIES, campaignConceptsByCategory, type CampaignIntelligenceConcept, } from '@/lib/campaignIntelligenceConcepts' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' export const metadata: Metadata = campaignPageMetadataFromCatalog('conceitos') diff --git a/src/app/(campaign)/campanha/(app)/contatos/page.tsx b/src/app/(campaign)/campanha/(app)/contatos/page.tsx index 03f4f835..99deaba5 100644 --- a/src/app/(campaign)/campanha/(app)/contatos/page.tsx +++ b/src/app/(campaign)/campanha/(app)/contatos/page.tsx @@ -3,10 +3,10 @@ import { redirect } from 'next/navigation' import { getPayload } from 'payload' import { LeaderContactsPanel } from '@/components/campaign/leadership/LeaderContactsPanel' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { isCampaignLeader } from '@/utilities/campaignAccess' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadLeaderContactsPageData } from '@/utilities/leaderContactsPageData' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' export const dynamic = 'force-dynamic' diff --git a/src/app/(campaign)/campanha/(app)/demandas/[slug]/page.tsx b/src/app/(campaign)/campanha/(app)/demandas/[slug]/page.tsx index 9d8b6241..f95970c6 100644 --- a/src/app/(campaign)/campanha/(app)/demandas/[slug]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/demandas/[slug]/page.tsx @@ -9,6 +9,7 @@ import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell import { CampaignQuickActionContextSync } from '@/components/campaign/shell/CampaignQuickActionContextSync' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { campaignDemandKindLabels, campaignDemandStatusLabels, @@ -17,7 +18,6 @@ import { import { isCampaignUnrestricted } from '@/utilities/campaignAccess' import { loadDemandDetail } from '@/utilities/campaignDemandData' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { attachDemandReceiptFormAction, setDemandCostFormAction, diff --git a/src/app/(campaign)/campanha/(app)/demandas/nova/page.tsx b/src/app/(campaign)/campanha/(app)/demandas/nova/page.tsx index f88a2cd3..91b08834 100644 --- a/src/app/(campaign)/campanha/(app)/demandas/nova/page.tsx +++ b/src/app/(campaign)/campanha/(app)/demandas/nova/page.tsx @@ -6,8 +6,8 @@ import { getPayload } from 'payload' import { searchDemandActivityOptions } from '@/app/(campaign)/campanha/(app)/demandas/activitySearchActions' import { DemandForm } from '@/components/campaign/demand/DemandForm' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadActivityRelationOptionById } from '@/utilities/activityRelationOptions' import { firstValue, strictDecimalInteger } from '@/utilities/campaignListUrl' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' diff --git a/src/app/(campaign)/campanha/(app)/demandas/page.tsx b/src/app/(campaign)/campanha/(app)/demandas/page.tsx index 20e8ddb1..4c9a439f 100644 --- a/src/app/(campaign)/campanha/(app)/demandas/page.tsx +++ b/src/app/(campaign)/campanha/(app)/demandas/page.tsx @@ -14,6 +14,7 @@ import { CampaignTable, type CampaignTableColumn } from '@/components/campaign/s import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { campaignDemandKindLabels, campaignDemandStatusLabels, @@ -28,7 +29,6 @@ import { type DemandRowViewModel, } from '@/utilities/campaignDemandData' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' export const metadata = campaignPageMetadataFromCatalog('demandas') @@ -103,11 +103,7 @@ export default async function DemandsPage({ searchParams }: DemandsPageProps) { ]) const state = parseDemandListParams(rawSearchParams) - const { rows, totalDocs, totalPages } = await loadDemandListPageData( - payload, - user, - state, - ) + const { rows, totalDocs, totalPages } = await loadDemandListPageData(payload, user, state) const columnVisibility = await readCampaignColumnVisibility('demandas') const hrefForStatus = (status?: CampaignDemandStatus) => diff --git a/src/app/(campaign)/campanha/(app)/dobradinhas/[slug]/page.tsx b/src/app/(campaign)/campanha/(app)/dobradinhas/[slug]/page.tsx index c4e0faae..5f1a5cd5 100644 --- a/src/app/(campaign)/campanha/(app)/dobradinhas/[slug]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/dobradinhas/[slug]/page.tsx @@ -8,8 +8,8 @@ import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell import { StateDeputyForm } from '@/components/campaign/stateDeputy/StateDeputyForm' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' -import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' +import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadStateDeputyDetail } from '@/utilities/stateDeputyData' import { updateStateDeputyFormAction } from './formActions' diff --git a/src/app/(campaign)/campanha/(app)/dobradinhas/nova/page.tsx b/src/app/(campaign)/campanha/(app)/dobradinhas/nova/page.tsx index e1cfc60a..19c8411b 100644 --- a/src/app/(campaign)/campanha/(app)/dobradinhas/nova/page.tsx +++ b/src/app/(campaign)/campanha/(app)/dobradinhas/nova/page.tsx @@ -2,9 +2,9 @@ import { ArrowLeftIcon } from 'lucide-react' import Link from 'next/link' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { StateDeputyForm } from '@/components/campaign/stateDeputy/StateDeputyForm' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { createStateDeputyFormAction } from './formActions' diff --git a/src/app/(campaign)/campanha/(app)/dobradinhas/page.tsx b/src/app/(campaign)/campanha/(app)/dobradinhas/page.tsx index d93368aa..8a40c3b2 100644 --- a/src/app/(campaign)/campanha/(app)/dobradinhas/page.tsx +++ b/src/app/(campaign)/campanha/(app)/dobradinhas/page.tsx @@ -34,12 +34,12 @@ import { EmptyTitle, } from '@/components/ui/Empty' import { resolveVisibleColumns } from '@/lib/campaignColumnVisibility' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import type { MunicipalityPortfolioIndexEntry } from '@/lib/municipalityPortfolio' import { cn } from '@/lib/utils' import { getAdvisorMunicipalityIds } from '@/utilities/campaignAccess' import { readCampaignColumnVisibility } from '@/utilities/campaignColumnVisibilityCookie' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadLeadershipOptions } from '@/utilities/campaignRelationOptions' import { loadMunicipalityPortfolioIndex } from '@/utilities/municipality/municipalityPortfolioIndex' import { diff --git a/src/app/(campaign)/campanha/(app)/layout.tsx b/src/app/(campaign)/campanha/(app)/layout.tsx index 03dd3f9e..37e65694 100644 --- a/src/app/(campaign)/campanha/(app)/layout.tsx +++ b/src/app/(campaign)/campanha/(app)/layout.tsx @@ -10,21 +10,17 @@ import { type BiometricEnrollmentOffer, } from '@/components/campaign/shell/BiometricEnrollmentToast' import { CampaignAppScrollChrome } from '@/components/campaign/shell/CampaignAppScrollChrome' -import { CampaignHomeSearchChromeProvider } from '@/components/campaign/shell/CampaignHomeSearchChromeContext' import { CampaignDesktopHeader } from '@/components/campaign/shell/CampaignDesktopHeader' +import { CampaignHomeSearchChromeProvider } from '@/components/campaign/shell/CampaignHomeSearchChromeContext' import { CampaignMobileTopBar } from '@/components/campaign/shell/CampaignMobileTopBar' -import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignNotificationBellSlot } from '@/components/campaign/shell/CampaignNotificationBellSlot' +import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignQuickActionContextProvider } from '@/components/campaign/shell/CampaignQuickActionContext' import { CampaignSidebar } from '@/components/campaign/shell/CampaignSidebar' import { CampaignSidebarViewportDefault } from '@/components/campaign/shell/CampaignSidebarViewportDefault' import { CampaignWizardChromeProvider } from '@/components/campaign/shell/CampaignWizardChromeContext' import { InstallPwaToast } from '@/components/campaign/shell/InstallPwaToast' -import { - SIDEBAR_COOKIE_NAME, - SidebarInset, - SidebarProvider, -} from '@/components/ui/Sidebar' +import { SIDEBAR_COOKIE_NAME, SidebarInset, SidebarProvider } from '@/components/ui/Sidebar' import { Toaster } from '@/components/ui/Toaster' import { TooltipProvider } from '@/components/ui/tooltip' import { deviceLabelFromUserAgent } from '@/lib/deviceLabel' @@ -77,32 +73,34 @@ export default async function CampaignAppLayout({ children }: { children: React. - - - - - } - /> - - {/* + + + + + } + /> + + {/* Provider must wrap CampaignAppScrollChrome, not only page children: the mobile quick-actions drawer (B91/B100) mounts as a sibling of the scrollport and renders search hits with CampaignHoverTooltip (priority flag). Nested only around {children} left focus→suggest without a provider and crashed the page (B102). */} - - {children} - - - - {biometricEnrollment ? : null} - - - - - + + {children} + + + + {biometricEnrollment ? ( + + ) : null} + + + + + ) diff --git a/src/app/(campaign)/campanha/(app)/liderancas/[id]/page.tsx b/src/app/(campaign)/campanha/(app)/liderancas/[id]/page.tsx index dcae8cb7..030d59f0 100644 --- a/src/app/(campaign)/campanha/(app)/liderancas/[id]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/liderancas/[id]/page.tsx @@ -12,9 +12,9 @@ import { CampaignQuickActionContextSync } from '@/components/campaign/shell/Camp import { StateDeputyChips } from '@/components/campaign/stateDeputy/StateDeputyChips' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { resolvedPortfolioEntriesById } from '@/lib/municipalityPortfolio' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadMunicipalityOptions, loadOrganizationOptions, diff --git a/src/app/(campaign)/campanha/(app)/liderancas/nova/page.tsx b/src/app/(campaign)/campanha/(app)/liderancas/nova/page.tsx index b981010c..1d5ae5fd 100644 --- a/src/app/(campaign)/campanha/(app)/liderancas/nova/page.tsx +++ b/src/app/(campaign)/campanha/(app)/liderancas/nova/page.tsx @@ -5,8 +5,8 @@ import { getPayload } from 'payload' import { LeadershipForm } from '@/components/campaign/leadership/LeadershipForm' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadMunicipalityOptions, diff --git a/src/app/(campaign)/campanha/(app)/liderancas/page.tsx b/src/app/(campaign)/campanha/(app)/liderancas/page.tsx index bac0f065..bf58b610 100644 --- a/src/app/(campaign)/campanha/(app)/liderancas/page.tsx +++ b/src/app/(campaign)/campanha/(app)/liderancas/page.tsx @@ -41,6 +41,7 @@ import { EmptyTitle, } from '@/components/ui/Empty' import { resolveVisibleColumns } from '@/lib/campaignColumnVisibility' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { formatBahiaDateTimeLabel } from '@/lib/campaignTime' import { resolvedPortfolioEntriesById, @@ -52,7 +53,6 @@ import { cn } from '@/lib/utils' import { getAdvisorMunicipalityIds } from '@/utilities/campaignAccess' import { readCampaignColumnVisibility } from '@/utilities/campaignColumnVisibilityCookie' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadStateDeputyOptions } from '@/utilities/campaignRelationOptions' import { formatRelativeAge } from '@/utilities/formatRelativeAge' import { diff --git a/src/app/(campaign)/campanha/(app)/municipios/[slug]/editar/page.tsx b/src/app/(campaign)/campanha/(app)/municipios/[slug]/editar/page.tsx index 1e22e72b..16513cef 100644 --- a/src/app/(campaign)/campanha/(app)/municipios/[slug]/editar/page.tsx +++ b/src/app/(campaign)/campanha/(app)/municipios/[slug]/editar/page.tsx @@ -6,8 +6,8 @@ import { getPayload } from 'payload' import { MunicipalityAdvisorsForm } from '@/components/campaign/municipality/MunicipalityAdvisorsForm' import { MunicipalityStrategyForm } from '@/components/campaign/municipality/MunicipalityStrategyForm' -import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { SetCampaignPageChrome } from '@/components/campaign/shell/CampaignPageChromeContext' +import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Button } from '@/components/ui/button' import { campaignPageMetadata } from '@/lib/campaignPageChrome' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' @@ -35,12 +35,18 @@ const municipalityEditSubtitle = export async function generateMetadata({ params }: MunicipalityEditPageProps) { const { slug } = await params const payload = await getPayload({ config }) - const user = await requireCampaignPageActor({ gate: 'staff', redirectTo: `/campanha/municipios/${slug}` }) + const user = await requireCampaignPageActor({ + gate: 'staff', + redirectTo: `/campanha/municipios/${slug}`, + }) try { const context = await resolveAccessibleMunicipalityContext(payload, user, slug) const view = await getMunicipalityDetailViewModel(payload, context, user) - return campaignPageMetadata({ title: `Editar ${view.name}`, subtitle: municipalityEditSubtitle }) + return campaignPageMetadata({ + title: `Editar ${view.name}`, + subtitle: municipalityEditSubtitle, + }) } catch { return campaignPageMetadata({ title: 'Editar município', subtitle: municipalityEditSubtitle }) } diff --git a/src/app/(campaign)/campanha/(app)/municipios/[slug]/page.tsx b/src/app/(campaign)/campanha/(app)/municipios/[slug]/page.tsx index 85fc3a27..0e1d85c5 100644 --- a/src/app/(campaign)/campanha/(app)/municipios/[slug]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/municipios/[slug]/page.tsx @@ -8,8 +8,8 @@ import { RecentVisitTracker } from '@/components/campaign/dashboard/RecentVisitT import { MunicipalityTabNav } from '@/components/campaign/municipality/MunicipalityTabNav' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Badge } from '@/components/ui/Badge' -import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' +import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { resolveMunicipalityDetailTab, type MunicipalityDetailSearchParams, diff --git a/src/app/(campaign)/campanha/(app)/organizacoes/[slug]/page.tsx b/src/app/(campaign)/campanha/(app)/organizacoes/[slug]/page.tsx index ac664705..1c9014f0 100644 --- a/src/app/(campaign)/campanha/(app)/organizacoes/[slug]/page.tsx +++ b/src/app/(campaign)/campanha/(app)/organizacoes/[slug]/page.tsx @@ -9,9 +9,9 @@ import { OrganizationForm } from '@/components/campaign/organization/Organizatio import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { organizationKindLabels } from '@/lib/schemas/organization' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadMunicipalityOptions } from '@/utilities/campaignRelationOptions' import { loadOrganizationDetail } from '@/utilities/organizationData' import { updateOrganizationFormAction } from './formActions' diff --git a/src/app/(campaign)/campanha/(app)/organizacoes/nova/page.tsx b/src/app/(campaign)/campanha/(app)/organizacoes/nova/page.tsx index 4ec393ad..c0413e66 100644 --- a/src/app/(campaign)/campanha/(app)/organizacoes/nova/page.tsx +++ b/src/app/(campaign)/campanha/(app)/organizacoes/nova/page.tsx @@ -5,8 +5,8 @@ import { getPayload } from 'payload' import { OrganizationForm } from '@/components/campaign/organization/OrganizationForm' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadMunicipalityOptions } from '@/utilities/campaignRelationOptions' import { createOrganizationFormAction } from './formActions' diff --git a/src/app/(campaign)/campanha/(app)/organizacoes/page.tsx b/src/app/(campaign)/campanha/(app)/organizacoes/page.tsx index b245a5ea..91fc8756 100644 --- a/src/app/(campaign)/campanha/(app)/organizacoes/page.tsx +++ b/src/app/(campaign)/campanha/(app)/organizacoes/page.tsx @@ -14,10 +14,10 @@ import { CampaignTable, type CampaignTableColumn } from '@/components/campaign/s import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { Badge } from '@/components/ui/Badge' import { Button } from '@/components/ui/button' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { organizationKindLabels } from '@/lib/schemas/organization' import { readCampaignColumnVisibility } from '@/utilities/campaignColumnVisibilityCookie' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { buildOrganizationListHref, loadOrganizationListPageData, diff --git a/src/app/(campaign)/campanha/(app)/page.tsx b/src/app/(campaign)/campanha/(app)/page.tsx index 895c0206..86fca847 100644 --- a/src/app/(campaign)/campanha/(app)/page.tsx +++ b/src/app/(campaign)/campanha/(app)/page.tsx @@ -8,11 +8,11 @@ import { CampaignHomeStaffChrome } from '@/components/campaign/dashboard/Campaig import { CampaignHomeSummary } from '@/components/campaign/dashboard/CampaignHomeSummary' import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell' import { UNCOVERED_MUNICIPALITIES_LIST_HREF } from '@/lib/campaignHomeActions' +import { campaignPageMetadata } from '@/lib/campaignPageChrome' import { isStaffCampaignRole } from '@/lib/campaignRoles' import { loadCampaignHomeSummary } from '@/utilities/campaignDashboardData' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' import { loadHomeSearchSuggestions } from '@/utilities/homeSearch/loadHomeSearchSuggestions' -import { campaignPageMetadata } from '@/lib/campaignPageChrome' export const dynamic = 'force-dynamic' diff --git a/src/app/(campaign)/campanha/(app)/perfil/page.tsx b/src/app/(campaign)/campanha/(app)/perfil/page.tsx index 9616054c..12542224 100644 --- a/src/app/(campaign)/campanha/(app)/perfil/page.tsx +++ b/src/app/(campaign)/campanha/(app)/perfil/page.tsx @@ -6,6 +6,7 @@ import { getPayload } from 'payload' import { CampaignPasskeysCard } from '@/components/campaign/auth/CampaignPasskeysCard' import { CampaignProfileSettings } from '@/components/campaign/auth/CampaignProfileSettings' import { CampaignPushNotificationsCard } from '@/components/campaign/auth/CampaignPushNotificationsCard' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { deviceLabelFromUserAgent } from '@/lib/deviceLabel' import { getCampaignUserWithAvatar } from '@/utilities/campaignAuth' import { getCampaignPushConsent } from '@/utilities/campaignConsent' @@ -13,7 +14,6 @@ import { campaignUserShellView } from '@/utilities/campaignUserProfile' import { getCampaignVapidPublicKey } from '@/utilities/notification/sendCampaignPush' import { loadCampaignPasskeys } from '@/utilities/webauthn/campaignWebAuthnCeremony' import { resolveCampaignWebAuthnRelyingParty } from '@/utilities/webauthn/campaignWebAuthnConfig' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' export const metadata = campaignPageMetadataFromCatalog('perfil') diff --git a/src/app/(campaign)/campanha/(app)/quadro/page.tsx b/src/app/(campaign)/campanha/(app)/quadro/page.tsx index dd5cc538..06774cd4 100644 --- a/src/app/(campaign)/campanha/(app)/quadro/page.tsx +++ b/src/app/(campaign)/campanha/(app)/quadro/page.tsx @@ -9,10 +9,10 @@ import { SuggestionSilenceStrip, SuggestionsPanel, } from '@/components/campaign/suggestion/SuggestionsPanel' +import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import type { CampaignUser } from '@/payload-types' import { getCampaignDashboardData } from '@/utilities/campaignDashboardData' import { requireCampaignPageActor } from '@/utilities/campaignPageActor' -import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome' import { loadFederalCandidateOptions } from '@/utilities/electionCandidateOptions' import { loadMunicipalityMapBundle } from '@/utilities/municipality/municipalityMapData' import { loadMunicipalitySuggestions } from '@/utilities/municipality/municipalityTriggers' diff --git a/src/components/campaign/shell/CampaignMobileTopBar.tsx b/src/components/campaign/shell/CampaignMobileTopBar.tsx index 25d1bd68..daa02b89 100644 --- a/src/components/campaign/shell/CampaignMobileTopBar.tsx +++ b/src/components/campaign/shell/CampaignMobileTopBar.tsx @@ -5,8 +5,8 @@ import type { ReactNode } from 'react' import { useCampaignListTransition } from '@/components/campaign/shared/CampaignListPending' import { CampaignWizardNavLink } from '@/components/campaign/shared/CampaignWizardNavLink' -import { CampaignPageChromeDisplay } from '@/components/campaign/shell/CampaignPageChromeDisplay' import { useCampaignHomeSearchChrome } from '@/components/campaign/shell/CampaignHomeSearchChromeContext' +import { CampaignPageChromeDisplay } from '@/components/campaign/shell/CampaignPageChromeDisplay' import { useCampaignWizardChrome } from '@/components/campaign/shell/CampaignWizardChromeContext' import { Button } from '@/components/ui/button' import { SidebarTrigger } from '@/components/ui/Sidebar' diff --git a/src/components/campaign/shell/CampaignPageChromeDisplay.tsx b/src/components/campaign/shell/CampaignPageChromeDisplay.tsx index 6599388e..e7bcde74 100644 --- a/src/components/campaign/shell/CampaignPageChromeDisplay.tsx +++ b/src/components/campaign/shell/CampaignPageChromeDisplay.tsx @@ -2,11 +2,11 @@ import { usePathname } from 'next/navigation' -import { CampaignPageChromeText } from '@/components/campaign/shell/CampaignPageChromeText' import { useCampaignPageChromeOverride, useCampaignPageChromeRole, } from '@/components/campaign/shell/CampaignPageChromeContext' +import { CampaignPageChromeText } from '@/components/campaign/shell/CampaignPageChromeText' import { resolveCampaignPageChrome } from '@/lib/campaignPageChrome' export const useEffectiveCampaignPageChrome = () => { diff --git a/src/components/campaign/shell/CampaignPageChromeText.tsx b/src/components/campaign/shell/CampaignPageChromeText.tsx index 062033d3..24355d09 100644 --- a/src/components/campaign/shell/CampaignPageChromeText.tsx +++ b/src/components/campaign/shell/CampaignPageChromeText.tsx @@ -25,10 +25,7 @@ export const CampaignPageChromeText = ({ } return ( -
+
{chrome.title} {chrome.subtitle ? ( {chrome.subtitle} diff --git a/src/lib/campaignPageChrome.ts b/src/lib/campaignPageChrome.ts index 4b9600f3..18934725 100644 --- a/src/lib/campaignPageChrome.ts +++ b/src/lib/campaignPageChrome.ts @@ -41,7 +41,8 @@ export const campaignPageChromeCatalog = { }, liderancas: { title: 'Lideranças', - subtitle: 'Uma ficha por pessoa — cada liderança pode atuar em vários municípios e organizações.', + subtitle: + 'Uma ficha por pessoa — cada liderança pode atuar em vários municípios e organizações.', }, liderancasNova: { title: 'Nova liderança', @@ -131,8 +132,7 @@ const resolveCatalogEntry = ( role: CampaignRole, ): CampaignPageChrome | null => { if (!entry) return null - const subtitle = - typeof entry.subtitle === 'function' ? entry.subtitle(role) : entry.subtitle + const subtitle = typeof entry.subtitle === 'function' ? entry.subtitle(role) : entry.subtitle return { title: entry.title, subtitle } } diff --git a/tests/e2e/campaignLeaderships.e2e.spec.ts b/tests/e2e/campaignLeaderships.e2e.spec.ts index 18595c32..1a5e0871 100644 --- a/tests/e2e/campaignLeaderships.e2e.spec.ts +++ b/tests/e2e/campaignLeaderships.e2e.spec.ts @@ -1,4 +1,9 @@ -import { campaignPageChrome, expect, expectPostResponse, test } from './fixtures/campaignE2EFixtures.js' +import { + campaignPageChrome, + expect, + expectPostResponse, + test, +} from './fixtures/campaignE2EFixtures.js' /** * `/campanha/liderancas` journeys: the B32 support-status quick edit (Popover + diff --git a/tests/unit/campaignMobileTopBar.unit.spec.tsx b/tests/unit/campaignMobileTopBar.unit.spec.tsx index c7d02eb4..b4822959 100644 --- a/tests/unit/campaignMobileTopBar.unit.spec.tsx +++ b/tests/unit/campaignMobileTopBar.unit.spec.tsx @@ -16,8 +16,8 @@ import { useSetCampaignHomeSearchChrome, type CampaignHomeSearchChromeState, } from '@/components/campaign/shell/CampaignHomeSearchChromeContext' -import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignMobileTopBar } from '@/components/campaign/shell/CampaignMobileTopBar' +import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignWizardChromeProvider, useSetCampaignWizardChrome, diff --git a/tests/unit/campaignWizardShell.unit.spec.tsx b/tests/unit/campaignWizardShell.unit.spec.tsx index 52f0ab8c..54a0603f 100644 --- a/tests/unit/campaignWizardShell.unit.spec.tsx +++ b/tests/unit/campaignWizardShell.unit.spec.tsx @@ -10,8 +10,8 @@ vi.mock('next/navigation', () => ({ })) import { CampaignWizardShell } from '@/components/campaign/shared/CampaignWizardShell' -import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignMobileTopBar } from '@/components/campaign/shell/CampaignMobileTopBar' +import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignWizardChromeProvider } from '@/components/campaign/shell/CampaignWizardChromeContext' import { SidebarProvider } from '@/components/ui/Sidebar' import { WIZARD_MUNICIPALITY_STEP_TITLE, wizardFlowChromeAriaLabel } from '@/lib/campaignWizardCopy' diff --git a/tests/unit/wizardNavigationPending.unit.spec.tsx b/tests/unit/wizardNavigationPending.unit.spec.tsx index ec08b330..40d44027 100644 --- a/tests/unit/wizardNavigationPending.unit.spec.tsx +++ b/tests/unit/wizardNavigationPending.unit.spec.tsx @@ -18,8 +18,8 @@ vi.mock('next/navigation', async (importActual) => ({ import { CampaignListPendingBoundary } from '@/components/campaign/shared/CampaignListPending' import { CampaignWizardShell } from '@/components/campaign/shared/CampaignWizardShell' -import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignMobileTopBar } from '@/components/campaign/shell/CampaignMobileTopBar' +import { CampaignPageChromeProvider } from '@/components/campaign/shell/CampaignPageChromeContext' import { CampaignWizardChromeProvider } from '@/components/campaign/shell/CampaignWizardChromeContext' import { SidebarProvider } from '@/components/ui/Sidebar' import { WIZARD_STEP_PENDING_MESSAGE } from '@/lib/campaignWizardCopy' @@ -33,17 +33,17 @@ const mountWizardNavigation = () => - Corpo do passo - - - + flowTitle="Ajustar votos" + stepTitle="Quantos votos?" + isEntryStep={false} + previousHref="/campanha/acoes/atualizar-votos" + dismissHref="/campanha" + municipalityLabel="Cairu" + > + Corpo do passo + + + , )