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 { useTranslation } from "~/providers/I18nProvider"; 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(); const { locale } = useTranslation(); if (disabled) { return (
{locale === "it" ? "Richieste Temporaneamente disattivate" : "Requests Temporarily Disabled"}
); } return (
{session.user ? ( tipo ? ( ) : ( {locale === "it" ? "Errore" : "Error"} ) ) : (
{/* oppure */}
)}
); }; const ServizioInteraction = ({ userId, tipologia, annuncioId, }: { userId: UsersId; tipologia: string; annuncioId: AnnunciId; }) => { const { locale } = useTranslation(); 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 (

{locale === "it" ? "Non hai un servizio attivo" : "You do not have an active service"}

); } if (servizio.status === "already_saved") { return (
{locale === "it" ? "Annuncio già salvato!" : "Listing already saved!"}
); } return ; }; const InteressatoButtonUserOnly = ({ annuncioId, }: { annuncioId: AnnunciId; }) => { const { locale } = useTranslation(); 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( locale === "it" ? "Richiesta di interesse inviata con successo!" : "Interest request sent successfully!", ); }, }); if (isLoading || hasInterest === undefined) { return ( ); } if (hasInterest) { return ( {locale === "it" ? "Hai già mandato una richiesta" : "You have already sent a request"} ); } return ( ); }; export const InteressatoButtonServizio = ({ annuncioId, }: { annuncioId: AnnunciId; }) => { const { isAdmin, servizioId, userId } = useServizio(); const { locale } = useTranslation(); 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" : locale === "it" ? "Sono interessato" : "I'm interested"} ); };