teqo-backup/src/components/campaign
Francisco Solla 10327a7451 feat(C236): publicar, despublicar e apagar em lote na Central de Conteúdos
A lista /campanha/comunicacao/conteudos ganha um modo de seleção opt-in
que envolve os dois corpos (tabela e card list) com um estado client
compartilhado, chaveado pela URL canônica (a seleção morre em
página/filtro e nunca cresce para além da página visível). Com seleção
ativa, a barra flutuante aplica o mesmo veredito unitário à seleção:
Publicar/Despublicar agem direto com recibo honesto; Apagar sempre
confirma no CampaignDeleteDialog reusado (novo caminho onConfirm
aditivo), avisando os links públicos só quando a seleção carrega
publicadas.

O transporte é uma rota única (POST .../conteudos/lote,
campaignJsonMutationRoute, teto de 50 ids) que itera server-side as ações
donas: cada peça mantém a própria transação, o gate fresco e a limpeza
best-effort de mídia; a falha de uma nunca reverte as demais e o recibo
separa afetadas x falhas (2 de 3 peças apagadas. 1 falhou.).

Sem migration, sem Consent novo, sem rota pública (S27) e sem mudar a
semântica do C222. Cobertura: int do lote (papéis, dedupe, mídia, evento,
tag, falha parcial, schema), unit do builder/barra/seleção e e2e HTTP.

Design tier: DEGRADED (artefato de origem sem certificação frontier) —
crítica do designer aplicada no escopo do item; entrega bloqueada para
sign-off humano antes do PR. Related #1388
2026-09-29 22:26:26 -03:00
..
activity feat(campaign): C165 — importa eventos do Google como atividades sem município (Closes #1010) 2026-09-15 11:54:21 -03:00
advisor feat(campaign): editor de permissão do assessor em modal central (desktop) + bottom drawer (mobile) no lugar do popover (Closes #813) 2026-08-23 20:41:29 -03:00
auth feat(push): opt-in automático e fix do prompt nativo no /campanha 2026-08-10 21:14:56 -03:00
contacts react-audit(famílias 1/6): sortable heads eram client sem interatividade — ContactSortableHead.tsx:1, PeopleSortableHead.tsx:1, LeadershipSortableHead.tsx:1, StateDeputySortableHead.tsx:1 importavam *ListUrl por valor; como server components os serializadores de URL ficam fora do bundle (B14) 2026-08-25 13:40:32 -03:00
content feat(C236): publicar, despublicar e apagar em lote na Central de Conteúdos 2026-09-29 22:26:26 -03:00
dashboard style(S32): formata os componentes do resumo da home 2026-09-23 18:12:42 -03:00
demand fix(campanha): restaura submitter no FormData do card de demanda (#921) 2026-08-25 21:48:30 -03:00
invite 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
leadership react-audit(famílias 1/6): sortable heads eram client sem interatividade — ContactSortableHead.tsx:1, PeopleSortableHead.tsx:1, LeadershipSortableHead.tsx:1, StateDeputySortableHead.tsx:1 importavam *ListUrl por valor; como server components os serializadores de URL ficam fora do bundle (B14) 2026-08-25 13:40:32 -03:00
map B13+: concordância LQ, readout de escopo no mapa e DRY do build de agregados. 2026-07-29 16:26:43 -03:00
municipality feat(B202): totais do recorte no rodapé da lista de municípios (Closes #1005) 2026-09-15 07:37:45 -03:00
organization fix(campaign): C140 — manual dispatch in 18 forms prevents React 19 form reset on error 2026-08-23 17:54:19 -03:00
people react-audit(famílias 1/6): sortable heads eram client sem interatividade — ContactSortableHead.tsx:1, PeopleSortableHead.tsx:1, LeadershipSortableHead.tsx:1, StateDeputySortableHead.tsx:1 importavam *ListUrl por valor; como server components os serializadores de URL ficam fora do bundle (B14) 2026-08-25 13:40:32 -03:00
recording fix(C199): upload de gravações fatiado em 16 MiB — escapa do 413 do edge 2026-09-28 19:36:12 -03:00
reels fix(C194): port fiel ao artefato após crítica do designer (#1153) 2026-09-18 21:54:37 -03:00
shared feat(C236): publicar, despublicar e apagar em lote na Central de Conteúdos 2026-09-29 22:26:26 -03:00
shell feat(C211): Central de Conteúdos interna — envio em lote, link, catalogação e publicação 2026-09-23 02:25:15 -03:00
speech feat(C229): busca por sentido no acervo de falas 2026-09-26 11:59:21 -03:00
stateDeputy react-audit(famílias 1/6): sortable heads eram client sem interatividade — ContactSortableHead.tsx:1, PeopleSortableHead.tsx:1, LeadershipSortableHead.tsx:1, StateDeputySortableHead.tsx:1 importavam *ListUrl por valor; como server components os serializadores de URL ficam fora do bundle (B14) 2026-08-25 13:40:32 -03:00
suggestion feat(campaign): C142 UI respects advisor permission profile somente_leitura 2026-08-21 23:01:35 -03:00
supporter feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
tour fix(campaign): C140 — manual dispatch in 18 forms prevents React 19 form reset on error 2026-08-23 17:54:19 -03:00
votePledge fix(campaign): C140 — manual dispatch in 18 forms prevents React 19 form reset on error 2026-08-23 17:54:19 -03:00