import { ArrowRight, BadgePlus } from "lucide-react"; import Link from "next/link"; import toast from "react-hot-toast"; import { ContattoAnnuncio } from "~/components/annuncio-interactions/contatto_modal"; import LoadingButton from "~/components/custom_ui/loading-button"; import { Button } from "~/components/ui/button"; import { useAnnuncio } from "~/providers/AnnuncioProvider"; import { useServizio } from "~/providers/ServizioProvider"; import type { SessionContextType } from "~/providers/SessionProvider"; import type { AnnunciId } from "~/schemas/public/Annunci"; import type { UsersId } from "~/schemas/public/Users"; import { api } from "~/utils/api"; export const AnnuncioInteractions = ({ session, disabled, }: { session: SessionContextType; disabled?: boolean; }) => { const { id, tipo } = useAnnuncio(); if (disabled) { return (
Richieste Temporaneamente disattivate
); } return (
{session.user ? ( tipo ? ( ) : ( Errore ) ) : (
{/* oppure */}
)}
); }; const ServizioInteraction = ({ userId, tipologia, annuncioId, }: { userId: UsersId; tipologia: string; annuncioId: AnnunciId; }) => { const { data: servizio, isLoading } = api.servizio.AnnuncioServizioTipologiaMatch.useQuery({ annuncioId, tipologia, userId, }); if (isLoading) return ; if ( servizio === undefined || servizio.status === "invalid" || servizio.status === "not_found" ) { return (

Non hai un servizio attivo

); } if (servizio.status === "already_saved") { return (
Annuncio già salvato!
); } return ; }; const InteressatoButtonUserOnly = ({ annuncioId, }: { annuncioId: AnnunciId; }) => { const { data: hasInterest, isLoading } = api.intrests.hasUserInterest.useQuery({ annuncioId, }); const utils = api.useUtils(); const { mutate: add } = api.intrests.addIntrest.useMutation({ onSuccess: async () => { await utils.intrests.hasUserInterest.invalidate({ annuncioId, }); toast.success("Richiesta di interesse inviata con successo!"); }, }); if (isLoading || hasInterest === undefined) { return ( ); } if (hasInterest) { return ( Hai già mandato una richiesta ); } return ( ); }; export const InteressatoButtonServizio = ({ annuncioId, }: { annuncioId: AnnunciId; }) => { const { isAdmin, servizioId, userId } = useServizio(); const utils = api.useUtils(); const invalidateAll = async () => { await utils.intrests.getUserInterests.invalidate(); await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getAnnunciAvailableToAdd.invalidate({ servizioId, }); await utils.servizio.AnnuncioServizioTipologiaMatch.invalidate({ userId, }); await utils.servizio.getCompatibileAnnunci.invalidate({ servizioId, }); }; const { mutate: adminAdd, isPending: isAdminPending } = api.servizio.addServizioAnnunci.useMutation({ onError: (error) => { console.error(error); toast.error("Errore durante l'aggiunta dell'annuncio"); }, onSuccess: async () => { await invalidateAll(); toast.success("Annuncio aggiunto alla ricerca"); }, }); const { mutate: add, isPending } = api.intrests.addIntrest.useMutation({ onSuccess: async () => { await invalidateAll(); toast.success("Richiesta di interesse inviata con successo!"); }, }); return ( { if (isAdmin && servizioId) { adminAdd({ servizioId, annunci: [annuncioId], }); return; } add({ annuncioId, }); }} variant="info" > {isAdmin ? "Aggiungi" : "Sono interessato"} ); };