"use client" import type { ComponentType, ReactNode } from "react" import { Check, Minus, Plus } from "lucide-react" import { Input } from "@/components/ui/input" import { cn } from "@/lib/utils" export type CatalogLabelPresence = "none" | "some" | "all" export type LabelPickerItemComponent = ComponentType<{ children: ReactNode onSelect?: (event: Event) => void className?: string }> function LabelPickerCheckboxVisual({ checked, }: { checked: boolean | "indeterminate" }) { return ( {checked === true ? ( ) : checked === "indeterminate" ? ( ) : null} ) } export function EmailLabelPickerBlock({ query, onQueryChange, catalogLabels, Item, getLabelPresence, onToggleCatalogLabel, onCreateLabel, listClassName, }: { query: string onQueryChange: (v: string) => void catalogLabels: string[] Item: LabelPickerItemComponent getLabelPresence: (label: string) => CatalogLabelPresence onToggleCatalogLabel: (label: string) => void onCreateLabel: (label: string) => void listClassName?: string }) { const q = query.trim().toLowerCase() const filtered = catalogLabels.filter( (l) => q.length === 0 || l.toLowerCase().includes(q) ) const trimmed = query.trim() const hasExact = catalogLabels.some( (l) => l.toLowerCase() === trimmed.toLowerCase() ) const canCreate = trimmed.length > 0 && !hasExact return ( <>
e.stopPropagation()} > onQueryChange(e.target.value)} placeholder="Rechercher ou créer un libellé…" className="h-8 border-[#dadce0] text-sm shadow-none" autoComplete="off" onPointerDown={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()} />
{canCreate ? ( { e.preventDefault() onCreateLabel(trimmed) }} > Créer le libellé « {trimmed} » ) : null} {filtered.map((label) => { const presence = getLabelPresence(label) const boxChecked: boolean | "indeterminate" = presence === "all" ? true : presence === "some" ? "indeterminate" : false return ( { e.preventDefault() onToggleCatalogLabel(label) }} > {label} ) })} {filtered.length === 0 && !canCreate ? (
Aucun libellé correspondant
) : null}
) }