import type { UsersId } from "~/schemas/public/Users"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { cn } from "~/lib/utils"; import { Button } from "~/components/ui/button"; import type { ServizioData } from "~/server/controllers/servizio.controller"; import { Package, PackageCheck, UserCircle } from "lucide-react"; import Link from "next/link"; import { Progress } from "~/components/ui/progress"; import { ServizioActions, ServizioActions2, } from "~/components/servizio/servizio_actions"; import { SaldoButton } from "~/components/servizio/interactions"; import { api } from "~/utils/api"; import { ServizioAnnuncioProvider, ServizioProvider, useServizio, } from "~/providers/ServizioProvider"; import { useRouter } from "next/router"; import { useEffect } from "react"; import toast from "react-hot-toast"; import { AnnunciCompatibili, AnnunciInConferma, AnnunciSelezionati, } from "~/components/servizio/servizio_annunci_accordions"; import { AnnuncioCard } from "~/components/servizio/annuncio_card"; import { ServizioDuration } from "~/components/servizio/service-duration-display"; export const ServizioContainer = ({ servizio, userId, isAdmin, }: { servizio: ServizioData; userId: UsersId; isAdmin: boolean; }) => { return ( ); }; const ServizioCard = ({ cardClassName, header, headerClassName, content, contentClassName, }: { cardClassName?: string; header: React.ReactNode; headerClassName?: string; content: React.ReactNode; contentClassName?: string; }) => { return ( {header} {content} ); }; export const ServizioContent = () => { const { servizio, isAdmin, userId } = useServizio(); const utils = api.useUtils(); const { mutate: updateServizio } = api.servizio.updateServizio.useMutation({ onSuccess: async () => { toast.success("Servizio modificato con successo"); await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); }, onError: (error) => { toast.error(error.message); }, }); const router = useRouter(); useEffect(() => { const id = router.asPath.split("#")[1]; if (id) { document.getElementById(id)?.scrollIntoView({ behavior: "smooth", }); } }, []); if (servizio.isInterrotto) { return (
Cerco Affitto {servizio.tipologia}

aggiunto il{" "} {servizio.created_at.toLocaleDateString("it", { year: "numeric", month: "2-digit", day: "2-digit", })}

} content={ <>

Servizio interrotto

Non è possibile riutilizzare questo servizio, poichè è stato interrotto.

} /> ); } if (!servizio.isOkAcconto || servizio.decorrenza === null) { return ( {/*
Cerco Affitto {servizio.tipologia}

Servizio non attivo

*/} Servizio non attivo } content={
{isAdmin && ( )}
{isAdmin && ( )}
} /> ); } const annuncioConfermato = servizio.annunci.filter( (a) => a.accettato_conferma_at !== null, ); if (servizio.isOkSaldo) { return ( {/*
Cerco Affitto {servizio.tipologia}

aggiunto il{" "} {servizio.created_at.toLocaleDateString("it", { year: "numeric", month: "2-digit", day: "2-digit", })}

*/} } content={ <> {annuncioConfermato.map((data) => { return ( ); })} } /> ); } const openContattiCount = servizio.annunci.filter( (a) => a.open_contatti_at !== null, ).length; const annunciInConferma = servizio.annunci.filter( (a) => a.user_confirmed_at !== null, ); const annunciNotInConferma = servizio.annunci.filter( (a) => a.user_confirmed_at === null, ); return ( {/*
Cerco Affitto {servizio.tipologia}

aggiunto il{" "} {servizio.created_at.toLocaleDateString("it", { year: "numeric", month: "2-digit", day: "2-digit", })}

*/} } content={ <>
Contatti sbloccati
{openContattiCount} / 10
{annuncioConfermato.length > 0 && (
Saldi in attesa:
{servizio.annunci .filter((a) => a.accettato_conferma_at !== null) .map((a) => (

{a.codice} - confermato il:{" "} {new Date(a.accettato_conferma_at!).toLocaleDateString( "it", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }, )}

))}
)}
0} annunci={annunciNotInConferma} />
} /> ); }; const ServizioMain = () => { const { servizio, isAdmin, userId } = useServizio(); const utils = api.useUtils(); const { mutate: updateServizio } = api.servizio.updateServizio.useMutation({ onSuccess: async () => { toast.success("Servizio modificato con successo"); await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); }, onError: (error) => { toast.error(error.message); }, }); const router = useRouter(); useEffect(() => { const id = router.asPath.split("#")[1]; if (id) { document.getElementById(id)?.scrollIntoView({ behavior: "smooth", }); } }, []); if (servizio.isInterrotto) { return (
Cerco Affitto {servizio.tipologia}

aggiunto il{" "} {servizio.created_at.toLocaleDateString("it", { year: "numeric", month: "2-digit", day: "2-digit", })}

} content={ <>

Servizio interrotto

Non è possibile riutilizzare questo servizio, poichè è stato interrotto.

} /> ); } if (!servizio.isOkAcconto || servizio.decorrenza === null) { return (
Cerco Affitto {servizio.tipologia}

Servizio non attivo

} content={
{isAdmin && ( )}
{isAdmin && ( )}
} /> ); } const annuncioConfermato = servizio.annunci.filter( (a) => a.accettato_conferma_at !== null, ); if (servizio.isOkSaldo) { return (
Cerco Affitto {servizio.tipologia}

aggiunto il{" "} {servizio.created_at.toLocaleDateString("it", { year: "numeric", month: "2-digit", day: "2-digit", })}

} content={ <> {annuncioConfermato.map((data) => { return ( ); })} } /> ); } const openContattiCount = servizio.annunci.filter( (a) => a.open_contatti_at !== null, ).length; const annunciInConferma = servizio.annunci.filter( (a) => a.user_confirmed_at !== null, ); const annunciNotInConferma = servizio.annunci.filter( (a) => a.user_confirmed_at === null, ); return (
Cerco Affitto {servizio.tipologia}

aggiunto il{" "} {servizio.created_at.toLocaleDateString("it", { year: "numeric", month: "2-digit", day: "2-digit", })}

} content={ <>
Contatti sbloccati
{openContattiCount} / 10
{annuncioConfermato.length > 0 && (
Saldi in attesa:
{servizio.annunci .filter((a) => a.accettato_conferma_at !== null) .map((a) => (

{a.codice} - confermato il:{" "} {new Date(a.accettato_conferma_at!).toLocaleDateString( "it", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }, )}

))}
)}
0} annunci={annunciNotInConferma} />
} /> ); };