From f6b73b3e633f5ea87a78ae2f3f54515db0cb886a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Wed, 29 Jul 2026 23:09:00 -0300 Subject: [PATCH] B60: wizard municipality search step with shared staff loader. Staff wizards pick a municipality via word-start search, auto-advance with ?municipio=, and reuse searchStaffMunicipalityHits extracted from B48. --- .cursor/rules/projects/nucleos-eleitorais.mdc | 1 + docs/plans/busca-municipio-wizard.md | 92 ++++++------ docs/roadmap.md | 6 +- .../campanha/(app)/acoes/[slug]/page.tsx | 37 ++++- .../campanha/(app)/home-search/route.ts | 14 +- .../campaign/dashboard/HomeSearchHitRow.tsx | 2 +- .../dashboard/HomeSearchMunicipalityGroup.tsx | 13 +- .../HomeSearchMunicipalityVoteTrailing.tsx | 17 +++ .../WizardMunicipalityPlaceholderStep.tsx | 12 -- .../shared/WizardMunicipalitySearchStep.tsx | 136 ++++++++++++++++++ .../shared/WizardMunicipalitySelectedStub.tsx | 21 +++ src/lib/campaignActionRoutes.ts | 19 +++ src/lib/campaignHomeSearchHits.ts | 5 + src/lib/campaignWizardCopy.ts | 31 +++- src/lib/schemas/homeSearch.ts | 4 + .../homeSearch/searchHomeMunicipalities.ts | 39 +---- .../homeSearch/searchStaffMunicipalityHits.ts | 63 ++++++++ tests/e2e/campaignHomeActions.e2e.spec.ts | 27 ++++ .../searchStaffMunicipalityHits.int.spec.ts | 71 +++++++++ tests/unit/campaignActionRoutes.unit.spec.ts | 16 +++ 20 files changed, 513 insertions(+), 113 deletions(-) create mode 100644 src/components/campaign/dashboard/HomeSearchMunicipalityVoteTrailing.tsx delete mode 100644 src/components/campaign/shared/WizardMunicipalityPlaceholderStep.tsx create mode 100644 src/components/campaign/shared/WizardMunicipalitySearchStep.tsx create mode 100644 src/components/campaign/shared/WizardMunicipalitySelectedStub.tsx create mode 100644 src/utilities/homeSearch/searchStaffMunicipalityHits.ts create mode 100644 tests/int/searchStaffMunicipalityHits.int.spec.ts diff --git a/.cursor/rules/projects/nucleos-eleitorais.mdc b/.cursor/rules/projects/nucleos-eleitorais.mdc index 262a421f..6f18d66f 100644 --- a/.cursor/rules/projects/nucleos-eleitorais.mdc +++ b/.cursor/rules/projects/nucleos-eleitorais.mdc @@ -7,6 +7,7 @@ alwaysApply: false ## Status +- **B60 entregue em código (2026-07-29):** etapa de busca de município nos wizards UX-1 — `WizardMunicipalitySearchStep` (debounce B47, `POST /campanha/home-search` modo `wizard-municipality`, só municípios scoped); select = `wizardActionHref` com `?municipio=`; loader compartilhado `searchStaffMunicipalityHits` (extraído de B48); `HomeSearchMunicipalityVoteTrailing` + `HomeSearchHitRow` link; stub B61 `WizardMunicipalitySelectedStub` com caption sticky; `WizardMunicipalityPlaceholderStep` removido. Sem migration/Consent. Unit `campaignActionRoutes`; int `searchStaffMunicipalityHits`; e2e wizard → `?municipio=cairu`. Plano: [`busca-municipio-wizard.md`](../../../docs/plans/busca-municipio-wizard.md). Desbloqueia **B61** / **B63** / **B64** / **B70**. - **B52 entregue em código (2026-07-29):** quarto grupo da busca global do Início — **Dobradinhas** via `searchHomeStateDeputies` + `HomeSearchStateDeputyGroup` (após Atividades); `POST /campanha/home-search` agrega `stateDeputies`; match word-start em nome ou partido; secundário `partido · N municípios`; assessor vê hits (staff read); `municipalityIdsByStateDeputyIds` em `stateDeputyData`. Int `homeSearchStateDeputies.int.spec.ts`. WA = **B55** (sem telefone na entidade). Plano: [`busca-global-resultados-dobradinhas.md`](../../../docs/plans/busca-global-resultados-dobradinhas.md). Próximo na cadeia busca: **B53** demandas. - **B72 entregue em código (2026-07-29):** gap horizontal da strip de ações do Início (UX-1) — `CampaignHomeActionStrip` `