import Link from "next/link"; import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, } from "~/components/ui/carousel"; import { cn, formatCurrency } from "~/lib/utils"; import { BedDouble, CalendarClock, Maximize2, Ruler } from "lucide-react"; import Image from "next/image"; import { useTranslation } from "~/providers/I18nProvider"; import { useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "~/components/ui/dialog"; import { camereTesti, handleConsegna } from "~/lib/annuncio_details"; import { ImageFlbk } from "~/components/ImageWithFallback"; type CardAnnuncioProps = { id: number; codice: string; prezzo: number; titolo: string | null; mq: string | null; comune: string | null; provincia: string | null; consegna: number | null; camere: number | null; immagini: string[] | undefined; tipo: string | null; stato: string | null; className?: string; }; export const CardAnnuncio = ({ id, codice, prezzo, titolo, mq, comune, provincia, consegna, camere, immagini, tipo, stato, className, }: CardAnnuncioProps) => { const { t } = useTranslation(); return (
{stato == "Trattativa" && (
Annuncio in Trattativa
)} {immagini && immagini.map((img, idx) => ( ))}
e.stopPropagation()} role="button" tabIndex={0} onClick={(e) => e.preventDefault()} className="block opacity-0 transition-all duration-200 group-hover:opacity-60 disabled:group-hover:opacity-0" >
{tipo}
{t.card.codice} Cod: {codice}
{t.card.prezzo} {formatCurrency(prezzo / 1e2)}
{t.card.titolo} {titolo}
{t.card.indirizzo} {comune && provincia && `${comune} (${provincia})`}

{mq ? Number.parseFloat(mq) : 0}{" "} m2

{camereTesti({ camere: camere, testi: t.card })}

{handleConsegna({ consegna: consegna, consegna_da: t.card.consegna_da, mesi: t.preferenze.mesi, subito: t.card.consegna_subito, aggiornamento: t.card.in_aggiornamento, })}

); }; export const CarouselAnnuncio = ({ single, immagini, }: { single?: boolean; immagini: string[] | null; }) => { const [openModal, setOpenModal] = useState(false); const [idxModal, setIdxModal] = useState(0); function handleOpenModal(position: number) { setIdxModal(position); setOpenModal(true); } return ( <>
{immagini && immagini.map((img, idx) => ( handleOpenModal(idx)} src={img} className={cn( "h-72 w-full rounded-md object-cover", immagini.length === 1 && "object-contain", )} /> handleOpenModal(idx)} className="absolute right-2 bottom-2 size-6 rounded-md bg-white/70 stroke-2 p-1 transition-opacity duration-150 group-hover:opacity-100 sm:opacity-0" /> ))}
Image Dialog Immagine {immagini && immagini.map((img, idx) => ( {`carousel-img-${idx}`} ))} ); };