teqo-backup/src/components/campaign/shared
Francisco Solla cb61cf1152 feat(C211): Central de Conteúdos interna — envio em lote, link, catalogação e publicação
Envio em lote (1 request raw-body por arquivo, fan-out ≤2, até 50 arquivos) e
adicionar por link (Instagram/YouTube; extração só pela Graph API da conta
própria, senão peça-link) em /campanha/comunicacao/conteudos. Cada peça tem
estado próprio (Processando/Pronto/Falhou + Reprocessar), transcrição/texto e
catalogação automática revisável; publicar/despublicar preserva arquivo, slug
e publishedAt.

- collections contentPiece + contentMedia (upload privado no S3) e migration
  20260923_032714_add_content_piece (slug único gerado no 1º publish,
  sourceUrl única, searchText com índice trigram)
- pipeline reusa C199 (job after() + reaper + retry condicional, transcrição
  DeepInfra, ffmpeg/chunk), o classificador de facetas do acervo e o
  institutionCatalog; curatedFields impede o job de sobrescrever curadoria
- gate único canReadCommunicationCatalog (advisor/leader negados); delete
  só pelo admin; sem Consent novo
- UI portada do design aprovado (lista desktop + cards mobile, diálogo de
  lote com progresso por arquivo, diálogo de link, ficha editável, kill
  switch); nav/chrome/column-picker/manifest atualizados
- instagramFeed expõe mediaUrl; revalidateTag ganha wrapper seguro fora de
  request (fixtures/scripts)
- testes: 2 unit specs, 1 int spec (16 casos) e 7 e2e na vertical
- follow-up de engenharia: #1267 (docs/plans/escala-dry-pos-c211.md)

Closes #1254
2026-09-23 02:25:15 -03:00
..
AsyncSearchCombobox.tsx refactor(campaign): E1 extrai useAsyncSearchOptions (3ª cópia da busca com debounce) 2026-08-23 13:16:47 -03:00
CampaignCellEditOverlay.tsx refactor(B193): simplify fixes pós-revisão — mapper único de updates, API de trigger uniforme, grupos de relação extraídos, hardening do sheet host 2026-08-10 11:23:49 -03:00
CampaignCellTooltip.tsx E10 /simplify: remove superficie morta, unifica o parser de enum repetivel e reusa o ranking A11 2026-07-25 22:33:16 -03:00
CampaignColumnPicker.tsx B137 — simplify pass: dedupe picker type, derive territory columns 2026-08-03 00:06:16 +00:00
CampaignColumnPickerTrailing.tsx B137 — Colunas ao lado da omnibox e fim do Ordenado por residual 2026-08-03 00:06:15 +00:00
CampaignCopyableCell.tsx Fix /campanha/liderancas 500: RSC-safe phone display 2026-07-26 20:16:01 -03:00
CampaignFormActionMessage.tsx Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
CampaignHeaderFilterPopover.tsx feat(C211): Central de Conteúdos interna — envio em lote, link, catalogação e publicação 2026-09-23 02:25:15 -03:00
CampaignHoverTooltip.tsx feat(campaign): Tendência migra para Ações ao colapsar a coluna (B172) 2026-08-09 13:36:04 -03:00
CampaignInfoHint.tsx Pass 2 W2: components/campaign em subpastas por dominio 2026-07-25 14:52:17 -03:00
CampaignInlineEditableCell.tsx feat(campaign): C142 UI respects advisor permission profile somente_leitura 2026-08-21 23:01:35 -03:00
CampaignListEmptyState.tsx feat(C192): busca semântica no acervo de falas (Closes #1147) 2026-09-18 17:48:28 -03:00
CampaignListFooter.tsx feat(B202): totais do recorte no rodapé da lista de municípios (Closes #1005) 2026-09-15 07:37:45 -03:00
CampaignListOmnibox.tsx feat(B200): encaixes dos cards mobile de municípios — densidade, alinhamento de labels e pilha de avatares (pós-B196) 2026-08-12 15:40:02 -03:00
CampaignListPagination.tsx Pass 2 W4b: zero exports mortos; knip exports/types/enumMembers em ERROR no CI 2026-07-25 15:51:52 -03:00
CampaignListPending.tsx B78 — Indicar carregamento na navegação do wizard 2026-07-31 00:24:39 +00:00
CampaignListSheetHost.tsx refactor(B193): simplify fixes pós-revisão — mapper único de updates, API de trigger uniforme, grupos de relação extraídos, hardening do sheet host 2026-08-10 11:23:49 -03:00
CampaignMetricStrip.tsx Pass 2 W2: components/campaign em subpastas por dominio 2026-07-25 14:52:17 -03:00
CampaignNameSubline.tsx refactor(C129): simplify — CampaignNameSubline compartilhado (a11y sr-label), guard legenda==nome, sem plumb morto, spec mais forte 2026-08-12 12:52:35 -03:00
CampaignScopeBadge.tsx Pass 2 W2: components/campaign em subpastas por dominio 2026-07-25 14:52:17 -03:00
CampaignSearchInput.tsx Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
CampaignSortableHead.tsx fix(B32-B34-F1): clamp nunca esconde todos os chips + key warning do head (Closes #1042) 2026-09-15 21:55:30 -03:00
CampaignTable.tsx feat(campaign): Tendência migra para Ações ao colapsar a coluna (B172) 2026-08-09 13:36:04 -03:00
CampaignUserAvatar.tsx Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
CampaignWizardNavLink.tsx B135 — Voltar no wizard usa passo lógico anterior na cadeia (#289) 2026-08-02 23:04:26 +00:00
CampaignWizardShell.tsx feat(campanha): B168 — desfazer encadeamento automático das ações rápidas do wizard 2026-08-08 14:10:47 -03:00
ConsentText.tsx Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
ContactCombobox.tsx Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
LeadershipStateDeputyRelationCell.tsx feat(campaign): C142 UI respects advisor permission profile somente_leitura 2026-08-21 23:01:35 -03:00
MunicipalityPortfolioCell.tsx C130: ajustes da tabela desktop de pessoas (contato completo, base sob o nome, caret, tooltips, Dobra em, filtro/ordenação por partido) 2026-08-12 16:01:25 -03:00
MunicipalityRelationAvatarStack.tsx feat(B200): encaixes dos cards mobile de municípios — densidade, alinhamento de labels e pilha de avatares (pós-B196) 2026-08-12 15:40:02 -03:00
MunicipalityRelationEditor.tsx feat(campaign): serializa mutações do editor de relações por célula (Closes #378) 2026-08-24 18:00:20 -03:00
MunicipalityStateDeputyRelationCell.tsx feat(campaign): C142 UI respects advisor permission profile somente_leitura 2026-08-21 23:01:35 -03:00
PhonesFieldEditor.tsx feat(campaign): C142 UI respects advisor permission profile somente_leitura 2026-08-21 23:01:35 -03:00
RelationChipCell.tsx fix(B32-B34-F1): clamp nunca esconde todos os chips + key warning do head (Closes #1042) 2026-09-15 21:55:30 -03:00
RelationMultiSelect.tsx Pass 2 W2: components/campaign em subpastas por dominio 2026-07-25 14:52:17 -03:00
RelationOptionCell.tsx feat(C116): pessoas — edição onde você vê na lista desktop (células sempre input, chips territoriais internos, nome-link, tooltips nas ações) 2026-08-11 15:09:56 -03:00
ResponsibleMultiSelect.tsx refactor(campaign): E1 extrai useAsyncSearchOptions (3ª cópia da busca com debounce) 2026-08-23 13:16:47 -03:00
StrictCombobox.tsx feat(C103): agenda mobile — formulário de criação usável (sheet do topo, sem labels, salvar fixo, seletor em bottom sheet) 2026-08-10 03:34:33 -03:00
useCampaignCellAutosave.ts B32+: share the campaign JSON route wrapper, fetch helper and cell auto-save. 2026-07-28 08:07:29 -03:00
useCampaignCellFailureChannel.ts B32+: share the campaign JSON route wrapper, fetch helper and cell auto-save. 2026-07-28 08:07:29 -03:00
useCampaignFormSuccessToast.ts feat(B195): finalizar wizard Registrar pedido — campo único + título derivado por IA + edição no detalhe 2026-08-10 20:15:05 -03:00
useCampaignListFilterNavigation.ts chore: remove orphaned list filter shells after B128 omnibox migration 2026-08-02 20:57:47 +00:00
useMunicipalitySavedFilters.ts chore: unexport unused MUNICIPALITY_SAVED_FILTER_IGNORED_PARAMS (knip) 2026-08-02 21:21:41 +00:00
useNearestMunicipalitySlug.ts B125 — nearest município first in search suggest + wizard 2026-08-02 18:21:52 +00:00
usePeopleSavedFilters.ts feat(C100): lista unificada de pessoas em /campanha/pessoas 2026-08-10 13:45:46 -03:00
usePublicationToggle.ts feat(C194): biblioteca de reels na vertical Comunicação (#1153) 2026-09-18 21:54:37 -03:00
WizardExpectedVotesStep.tsx chore(D11): chrome comum dos passos finais do wizard — WizardStepFormChrome + DemandFields 2026-08-11 07:37:44 -03:00
WizardMunicipalitySearchStep.tsx B125 — nearest município first in search suggest + wizard 2026-08-02 18:21:52 +00:00
WizardRegisterDemandStep.tsx feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
WizardStepFormChrome.tsx fix(campaign): C140 — manual dispatch in 18 forms prevents React 19 form reset on error 2026-08-23 17:54:19 -03:00