import { AnimatePresence, motion } from "framer-motion"; import dynamic from "next/dynamic"; import Image from "next/image"; import { type Dispatch, Fragment, memo, type SetStateAction, useState, } from "react"; import { LoadingPage } from "~/components/loading"; import { Status500 } from "~/components/status-page"; import { handleConsegna } from "~/lib/annuncio_details"; import { formatCurrency } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; import { useRicerca } from "~/providers/RicercaProvider"; import type { AnnuncioRicercaWPosition } from "~/server/controllers/annunci.controller"; import { api } from "~/utils/api"; const MapComp = dynamic(() => import("~/components/map/Map"), { ssr: false, }); export const MapSection = () => { const { comune, consegna, tipo } = useRicerca(); const [selected, setSelected] = useState( null, ); return (
); }; const MapDisplay = memo( ({ selectTipo, selectComune, selectConsegna, setSelected, }: { selectTipo: string; selectComune: string; selectConsegna: number | null; setSelected: Dispatch>; }) => { const { data, isLoading } = api.annunci.getMapping.useQuery({ comune: selectComune, consegna: selectConsegna || undefined, tipologia: selectTipo, }); if (isLoading) return ; if (!data) return ; const posizioni = data .map((a) => { if (a.lat_secondario && a.lon_secondario) { return { markerTxt: `€ ${a.prezzo / 1e2}`, onClick: () => setSelected(a), pos: { lat: parseFloat(a.lat_secondario), lng: parseFloat(a.lon_secondario), }, }; } return undefined; }) .filter((a) => a !== undefined); return ( setSelected(null)} posix={{ pos: { lat: 45.764718, lng: 11.73067 } }} scrollWheelZoom width="100%" zoom={13} /> ); }, ); MapDisplay.displayName = "MapDisplay"; const SelectedComp = memo( ({ selected }: { selected: AnnuncioRicercaWPosition | null }) => { const { t } = useTranslation(); return ( {selected && (
{selected.images?.[0] ? ( a ) : (
)}
{selected.codice}

{selected.titolo_it}

{formatCurrency(selected.prezzo / 1e2)}

{selected.mq}mq

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

)} ); }, ); SelectedComp.displayName = "SelectedComp";