import { ExternalLink, Package, PackageCheck, UserCircle } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; import { type ReactNode, useEffect } from "react"; import toast from "react-hot-toast"; import { InteressatoButtonBatchV } from "~/components/annuncio-interactions/annuncio_interactions"; import { AddButton } from "~/components/servizio/annuncio_actions"; import { AnnuncioCard, BasicAnnuncioCard, } from "~/components/servizio/annuncio_card"; import { SaldoButton } from "~/components/servizio/interactions"; import { ServizioDuration } from "~/components/servizio/service-duration-display"; import { ServizioActions, ServizioActions2, } from "~/components/servizio/servizio_actions"; import { AnnunciCompatibili, AnnunciInConferma, AnnunciSelezionati, } from "~/components/servizio/servizio_annunci_accordions"; import { Button } from "~/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "~/components/ui/dialog"; import { Progress } from "~/components/ui/progress"; import { cn } from "~/lib/utils"; import { ServizioAnnuncioProvider, ServizioProvider, useServizio, } from "~/providers/ServizioProvider"; import type { UsersId } from "~/schemas/public/Users"; import type { ServizioData } from "~/server/controllers/servizio.controller"; import { api } from "~/utils/api"; 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({ onError: (error) => { toast.error(error.message); }, onSuccess: async () => { toast.success("Servizio modificato con successo"); await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); }, }); const router = useRouter(); useEffect(() => { const id = router.asPath.split("#")[1]; if (id) { document.getElementById(id)?.scrollIntoView({ behavior: "smooth", }); } }, []); if (servizio.isInterrotto) { return (

Servizio interrotto

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

} header={ <>
Cerco Affitto {servizio.tipologia}

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

} /> ); } if (!servizio.isOkAcconto || servizio.decorrenza === null) { return (
{isAdmin && ( )}
{isAdmin && ( )} } header={
Servizio non attivo
} /> ); } const annuncioConfermato = servizio.annunci.filter( (a) => a.accettato_conferma_at !== null, ); if (servizio.isOkSaldo) { return ( {annuncioConfermato.map((data) => { return ( ); })} } header={ <> } /> ); } 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 (
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:{" "} {/** biome-ignore lint/style/noNonNullAssertion: */} {new Date(a.accettato_conferma_at!).toLocaleDateString( "it", { day: "2-digit", hour: "2-digit", minute: "2-digit", month: "2-digit", year: "numeric", }, )}

))}
)} {/*
0} />
*/}
{annunciInConferma.length}
} >
{annunciInConferma.map((data) => { return ( ); })}
{annunciNotInConferma.length} } >
{annunciNotInConferma.length > 0 ? ( annunciNotInConferma.map((data) => { return ( ); }) ) : (
Nessun annuncio selezionato, fai una ricerca nella pagina{" "} Annunci
)}
{(() => { const { servizioId, userId, isAdmin } = useServizio(); const { data, isLoading } = api.servizio.getCompatibileAnnunci.useQuery({ servizioId, }); const { data: userIntrests } = api.intrests.getUserInterests.useQuery({ userId, }); if (isLoading) return
Loading...
; return ( {data?.length} } >
{!data || data.length === 0 ? (
Nessun annuncio compatibile trovato. Amplia la ricerca per trovare annunci compatibili.
) : ( data.map((a) => { return ( {isAdmin ? ( ) : ( )} } key={a.id} /> ); }) )}
); })()} } header={ <> } /> ); }; const DialogServizio = ({ trigger, title, children, }: { trigger: ReactNode; title: string; children: ReactNode; }) => { return ( {trigger} {title} Servizio Dialog {children} ); }; const ServizioMain = () => { const { servizio, isAdmin, userId } = useServizio(); const utils = api.useUtils(); const { mutate: updateServizio } = api.servizio.updateServizio.useMutation({ onError: (error) => { toast.error(error.message); }, onSuccess: async () => { toast.success("Servizio modificato con successo"); await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); }, }); const router = useRouter(); useEffect(() => { const id = router.asPath.split("#")[1]; if (id) { document.getElementById(id)?.scrollIntoView({ behavior: "smooth", }); } }, []); if (servizio.isInterrotto) { return (

Servizio interrotto

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

} header={ <>
Cerco Affitto {servizio.tipologia}

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

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

Servizio non attivo

} /> ); } const annuncioConfermato = servizio.annunci.filter( (a) => a.accettato_conferma_at !== null, ); if (servizio.isOkSaldo) { return ( {annuncioConfermato.map((data) => { return ( ); })} } header={ <>
Cerco Affitto {servizio.tipologia}

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

} /> ); } 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 (
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:{" "} {/** biome-ignore lint/style/noNonNullAssertion: */} {new Date(a.accettato_conferma_at!).toLocaleDateString( "it", { day: "2-digit", hour: "2-digit", minute: "2-digit", month: "2-digit", year: "numeric", }, )}

))}
)}
0} />
} header={ <>
Cerco Affitto {servizio.tipologia}

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

} /> ); };