mirror of
https://github.com/idrainformatica/PecFlow.git
synced 2026-06-16 12:45:42 +02:00
85 lines
2.7 KiB
TypeScript
85 lines
2.7 KiB
TypeScript
import { cn, PEC_STATE_LABELS, PEC_TYPE_LABELS } from '@/lib/utils'
|
|
import type { PecMsgType, PecState } from '@/types/api.types'
|
|
|
|
interface PecBadgeProps {
|
|
state?: PecState
|
|
type?: PecMsgType
|
|
className?: string
|
|
}
|
|
|
|
const STATE_COLORS: Record<PecState, string> = {
|
|
draft: 'bg-gray-100 text-gray-700 border-gray-300',
|
|
queued: 'bg-yellow-100 text-yellow-800 border-yellow-300',
|
|
sent: 'bg-blue-100 text-blue-800 border-blue-300',
|
|
accepted: 'bg-cyan-100 text-cyan-800 border-cyan-300',
|
|
delivered: 'bg-green-100 text-green-800 border-green-300',
|
|
received: 'bg-green-100 text-green-800 border-green-300',
|
|
anomaly: 'bg-orange-100 text-orange-800 border-orange-300',
|
|
failed: 'bg-red-100 text-red-800 border-red-300',
|
|
}
|
|
|
|
const STATE_ICONS: Record<PecState, string> = {
|
|
draft: '',
|
|
queued: '',
|
|
sent: '',
|
|
accepted: '',
|
|
delivered: '',
|
|
received: '',
|
|
anomaly: '',
|
|
failed: '',
|
|
}
|
|
|
|
const TYPE_COLORS: Record<string, string> = {
|
|
posta_certificata: 'bg-blue-50 text-blue-700 border-blue-200',
|
|
accettazione: 'bg-cyan-50 text-cyan-700 border-cyan-200',
|
|
non_accettazione: 'bg-orange-50 text-orange-700 border-orange-200',
|
|
avvenuta_consegna: 'bg-green-50 text-green-700 border-green-200',
|
|
mancata_consegna: 'bg-red-50 text-red-700 border-red-200',
|
|
errore_consegna: 'bg-red-50 text-red-700 border-red-200',
|
|
presa_in_carico: 'bg-purple-50 text-purple-700 border-purple-200',
|
|
preavviso_mancata_consegna: 'bg-amber-50 text-amber-700 border-amber-200',
|
|
rilevazione_virus: 'bg-red-50 text-red-700 border-red-200',
|
|
unknown: 'bg-gray-50 text-gray-700 border-gray-200',
|
|
}
|
|
|
|
/**
|
|
* Badge che mostra lo stato di una PEC con colore e icona.
|
|
*/
|
|
export function PecStateBadge({ state, className }: { state: PecState; className?: string }) {
|
|
return (
|
|
<span
|
|
className={cn(
|
|
'inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium',
|
|
STATE_COLORS[state] || 'bg-gray-100 text-gray-700 border-gray-300',
|
|
className,
|
|
)}
|
|
>
|
|
<span>{STATE_ICONS[state] || '?'}</span>
|
|
{PEC_STATE_LABELS[state] || state}
|
|
</span>
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Badge che mostra il tipo di messaggio PEC.
|
|
*/
|
|
export function PecTypeBadge({ type, className }: { type: PecMsgType; className?: string }) {
|
|
return (
|
|
<span
|
|
className={cn(
|
|
'inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium',
|
|
TYPE_COLORS[type] || 'bg-gray-50 text-gray-700 border-gray-200',
|
|
className,
|
|
)}
|
|
>
|
|
{PEC_TYPE_LABELS[type] || type}
|
|
</span>
|
|
)
|
|
}
|
|
|
|
export function PecBadge({ state, type, className }: PecBadgeProps) {
|
|
if (state) return <PecStateBadge state={state} className={className} />
|
|
if (type) return <PecTypeBadge type={type} className={className} />
|
|
return null
|
|
}
|