57 lines
2.4 KiB
TypeScript
57 lines
2.4 KiB
TypeScript
import {
|
|
CircleHelp,
|
|
Handshake,
|
|
ShieldAlert,
|
|
Snowflake,
|
|
UserRoundX,
|
|
type LucideIcon,
|
|
} from 'lucide-react'
|
|
|
|
import {
|
|
municipalitySignalTypeDescriptions,
|
|
municipalitySignalTypeLabels,
|
|
municipalitySignalTypes,
|
|
type MunicipalitySignalType,
|
|
} from '@/lib/schemas/municipalityUpdate'
|
|
|
|
export type MunicipalitySignalTypeMetaEntry = {
|
|
type: MunicipalitySignalType
|
|
label: string
|
|
shortDescription: string
|
|
infoContent: string
|
|
icon: LucideIcon
|
|
}
|
|
|
|
const signalTypeIcons: Record<MunicipalitySignalType, LucideIcon> = {
|
|
invasao: ShieldAlert,
|
|
esfriamento: Snowflake,
|
|
visita_adversario: UserRoundX,
|
|
proposta_broker: Handshake,
|
|
outro: CircleHelp,
|
|
}
|
|
|
|
const signalTypeInfoContent: Record<MunicipalitySignalType, string> = {
|
|
invasao:
|
|
'O adversário está ocupando espaço que era nosso: reunião, base, narrativa ou presença no território. Consequência: a rede pode esfriar ou a leitura do município muda. Use quando a equipe perceber invasão real, não só boatos.',
|
|
esfriamento:
|
|
'Aliados pararam de responder, sumiram das conversas ou a rede perdeu ritmo. Consequência: cobertura e pledges podem estagnar. Use quando o silêncio for novo e relevante para a decisão do município.',
|
|
visita_adversario:
|
|
'O adversário apareceu no município — visita, agenda pública ou movimento visível. Consequência: pode pressionar lideranças ou mudar a leitura local. Use quando houver fato concreto, não só expectativa.',
|
|
proposta_broker:
|
|
'Alguém pediu ou ofereceu algo em troca de apoio, voto ou posicionamento. Consequência: pode virar demanda, risco ou oportunidade de alinhamento. Use quando a conversa for relevante para a campanha.',
|
|
outro:
|
|
'Fato importante que não encaixa nos tipos acima, mas merece registro datado. Consequência: alimenta o histórico do município e pode acionar sugestões depois. Use com parcimônia — prefira um tipo específico quando couber.',
|
|
}
|
|
|
|
export const municipalitySignalTypeMeta: MunicipalitySignalTypeMetaEntry[] =
|
|
municipalitySignalTypes.map((type) => ({
|
|
type,
|
|
label: municipalitySignalTypeLabels[type],
|
|
shortDescription: municipalitySignalTypeDescriptions[type],
|
|
infoContent: signalTypeInfoContent[type],
|
|
icon: signalTypeIcons[type],
|
|
}))
|
|
|
|
export const municipalitySignalTypeMetaByType = Object.fromEntries(
|
|
municipalitySignalTypeMeta.map((entry) => [entry.type, entry]),
|
|
) as Record<MunicipalitySignalType, MunicipalitySignalTypeMetaEntry>
|