"use client"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { cn } from "@/lib/utils/ui"; import Image from "next/image"; import { deriveNameFromLogo } from "@/lib/logo"; const DEFAULT_BASE_PATH = "/logos"; const resolveLogoSrc = (logo: string, basePath: string) => { if (/^https?:\/\//.test(logo)) { return logo; } return `${basePath.replace(/\/$/, "")}/${logo.replace(/^\//, "")}`; }; interface LogoPickerTriggerProps { selectedLogo?: string | null; disabled?: boolean; helperText?: string; placeholder?: string; basePath?: string; onOpen: () => void; className?: string; } export function LogoPickerTrigger({ selectedLogo, disabled, helperText = "Clique para trocar o logo", placeholder = "Selecionar logo", basePath = DEFAULT_BASE_PATH, onOpen, className, }: LogoPickerTriggerProps) { const hasLogo = Boolean(selectedLogo); const selectedLogoLabel = deriveNameFromLogo(selectedLogo); const selectedLogoPath = hasLogo && selectedLogo ? resolveLogoSrc(selectedLogo, basePath) : null; return ( ); } interface LogoPickerDialogProps { open: boolean; logos: string[]; value: string; onOpenChange: (open: boolean) => void; onSelect: (logo: string) => void; basePath?: string; title?: string; description?: string; emptyState?: React.ReactNode; } export function LogoPickerDialog({ open, logos, value, onOpenChange, onSelect, basePath = DEFAULT_BASE_PATH, title = "Escolher logo", description = "Selecione o logo que será usado para identificar este item.", emptyState, }: LogoPickerDialogProps) { return ( {title} {description ? ( {description} ) : null} {logos.length === 0 ? ( emptyState ?? (

Nenhum logo encontrado. Adicione arquivos na pasta de logos.

) ) : (
{logos.map((logo) => { const isActive = value === logo; const logoLabel = deriveNameFromLogo(logo); return ( ); })}
)}
); }