mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 06:43:06 +00:00
Seção 'Receba as novidades da campanha' acima do rodapé: nome + WhatsApp obrigatórios, e-mail/estado/cidade/comentário opcionais, toggle pré-selecionado 'Quero fazer parte do time' gravado como subscription.campaignLevel (time|esporadico). CTA secundário do hero vira o atalho (#novidades, scroll suave). Contact + Subscription em withPayloadTransaction com consentimento novo fail-closed por chave estável 'campanha-novidades' — nada é gravado sem o texto aprovado no admin. Migration 20260819_192605 (state de contact nullable + coluna campaign_level). Impl plan, changelog, int + e2e.
30 lines
870 B
TypeScript
30 lines
870 B
TypeScript
import { StateNames } from '@/lib/states'
|
|
import { FormCombobox, type ComboboxOption } from './FormCombobox'
|
|
|
|
interface StateSelectProps {
|
|
placeholder?: string
|
|
/** S9 — the campaign home capture makes the state optional. Defaults to
|
|
* true so the WhatsApp flow stays as strict as before. */
|
|
required?: boolean
|
|
}
|
|
|
|
const stateOptions: ComboboxOption[] = Object.entries(StateNames)
|
|
.map(([code, name]) => ({ value: code, label: name, keywords: [code] }))
|
|
.sort((a, b) => a.label.localeCompare(b.label, 'pt-BR'))
|
|
|
|
export const StateSelect = ({
|
|
placeholder = 'Selecione um estado',
|
|
required = true,
|
|
}: StateSelectProps) => {
|
|
return (
|
|
<FormCombobox
|
|
name="state"
|
|
id="state"
|
|
options={stateOptions}
|
|
placeholder={placeholder}
|
|
minChars={1}
|
|
required={required}
|
|
emptyMessage="Nenhum estado encontrado."
|
|
/>
|
|
)
|
|
}
|