import {
FileBadge,
FileText,
FolderKanban,
Info,
Mail,
PackageCheck,
Pointer,
Printer,
Trash2,
Wrench,
} from "lucide-react";
import Link from "next/link";
import toast from "react-hot-toast";
import {
AlertDialog,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from "~/components/ui/alert-dialog";
import { Button, type ButtonConfigs } from "~/components/ui/button";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "~/components/ui/tooltip";
import { cn } from "~/lib/utils";
import { useTranslation } from "~/providers/I18nProvider";
import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider";
import type { AnnunciId } from "~/schemas/public/Annunci";
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
import { api } from "~/utils/api";
import { Confirm } from "../confirm";
import { AdminLavoraConferma } from "./admin_conferma";
import { AdminContratto } from "./admin_contratto";
import { ConfermaAnnuncioModal, ConfermaInLavorazioneModal } from "./conferma";
import { ContattiProprietarioModal } from "./modale_contatti";
export const AdminActions = () => {
const { servizioId, isAdmin } = useServizio();
const { data, annuncioId } = useServizioAnnuncio();
const utils = api.useUtils();
const { mutate } = api.servizio.removeAnnuncioServizio.useMutation({
onError: (error) => {
console.error(error);
toast.error("Errore durante la rimozione dell'annuncio");
},
onSuccess: async () => {
await utils.servizio.invalidate();
toast.success("Annuncio rimosso");
},
});
if (!isAdmin) return null;
return (
<>
Azioni Admin:
{data.user_confirmed_at != null &&
}
{data.accettato_conferma_at != null && (
<>
{data.gestionale_id && (
Gestionale
)}
>
)}
{/*
pubblica
*/}
Modifica Annuncio
Scheda
{
mutate({
annuncioId,
servizioId,
});
}}
title="Elimina annuncio"
>
Elimina
>
);
};
const AdminSendScheda = () => {
const { userId } = useServizio();
const { annuncioId } = useServizioAnnuncio();
const { mutate } = api.comunicazioni.sendSchedaAnnuncioServizio.useMutation({
onMutate: () => {
toast.loading("Invio email in corso...", {
id: "send-scheda-annuncio-email",
});
},
onSuccess: () => {
toast.success("Email inviata con successo!", {
id: "send-scheda-annuncio-email",
});
},
onError: (error) => {
toast.error(`Errore durante l'invio dell'email: ${error.message}`, {
id: "send-scheda-annuncio-email",
});
},
});
return (
{
mutate({
annuncioId,
userId,
});
}}
title="Invia email scheda"
>
Invia Scheda
);
};
export const UserActions = () => {
const { servizioId } = useServizio();
const { data, annuncioId } = useServizioAnnuncio();
const { locale } = useTranslation();
const ContattiSbloccati = data.open_contatti_at !== null;
const ConfermaUtente = data.user_confirmed_at !== null;
const ConfermaLavorata = data.doc_conferma_added && data.hasConfermaAdmin;
const AccettatoConferma = data.accettato_conferma_at !== null;
return (
<>
{ConfermaUtente
? !data.hasConfermaAdmin &&
: ContattiSbloccati &&
}
{AccettatoConferma ? (
{locale === "it"
? "Rivedi la conferma"
: "Review the confirmation"}
) : (
ConfermaLavorata &&
(data.doc_conferma_ref ? (
{locale === "it"
? "Confermato - Procedi ora"
: "Confirmed - Proceed now"}
) : (
{locale === "it"
? "Confermato - Procedi ora"
: "Confirmed - Proceed now"}
{locale === "it"
? "Il documento non è più disponibile"
: "The document is no longer available"}
{locale === "it"
? "Se hai bisogno di una copia, contattaci via email o chat."
: "If you need a copy, contact us via email or chat."}
))
)}
{data.accettato_conferma_at != null && }
>
);
};
const AdminAnnuncioContatti = () => {
const { data } = useServizioAnnuncio();
const { data: annuncio, isLoading } = api.annunci.getAnnuncioFull.useQuery({
id: data.id,
});
return (
Dati Contatto
Contatti Annuncio {data.codice}
desc
Contatti Aperti il:
{data.open_contatti_at
? new Date(data.open_contatti_at).toLocaleString("it-IT")
: "Non ancora aperti"}
{isLoading ? (
Loading...
) : (
<>
Locatore/Incaricato:
{annuncio?.locatore || "N/A"}
Email:
{annuncio?.email || "N/A"}
Telefono:
{annuncio?.numero || "N/A"}
>
)}
Chiudi
);
};
const PostConfermaSection = () => {
const { servizio, servizioId } = useServizio();
const { data, annuncioId } = useServizioAnnuncio();
const { locale } = useTranslation();
const saldoPaid = servizio.isOkSaldo;
const consulenzaPaid = servizio.isOkConsulenza;
const doc_non_disponibile =
locale === "it"
? "Il documento non è più disponibile"
: "The document is no longer available";
const contatta_supporto =
locale === "it"
? "Se hai bisogno di una copia, contattaci via email o chat."
: "If you need a copy, contact us via email or chat.";
if (!saldoPaid) {
return (
{locale === "it"
? "Questo annuncio è stato confermato, procedi al saldo:"
: "This listing has been confirmed, proceed to payment:"}
);
}
if (!data.doc_contratto_added) {
return (
{locale === "it"
? "Ci siamo quasi! Stiamo preparando il contratto per te."
: "Almost there! We are preparing the contract for you."}
{locale === "it"
? "Una volta pronto, riceverai una notifica via email."
: "Once ready, you will receive a notification via email."}
);
}
return (
{consulenzaPaid
? locale === "it"
? "Il contratto è pronto, puoi visualizzarlo:"
: "The contract is ready, you can view it:"
: locale === "it"
? "Il contratto è pronto, puoi visualizzarlo e procedere al saldo:"
: "The contract is ready, you can view it and proceed to payment:"}
{data.doc_contratto_ref ? (
{locale === "it"
? "Visualizza il contratto"
: "View the contract"}
) : (
{locale === "it"
? "Visualizza il contratto"
: "View the contract"}
{doc_non_disponibile}
{contatta_supporto}
)}
{!consulenzaPaid &&
servizio.ordini.some(
(o) => o.type === OrderTypeEnum.Consulenza && !o.isActive,
) &&
data.contratto_tipo &&
}
{data.doc_registrazione_added &&
(data.doc_registrazione_ref ? (
{locale === "it"
? "Visualizza la registrazione"
: "View the recording"}
) : (
{locale === "it"
? "Visualizza la registrazione"
: "View the recording"}
{doc_non_disponibile}
{contatta_supporto}
))}
);
};
export const SaldoButton = ({
variant = "info",
className,
}: {
annuncioId: AnnunciId;
variant?: ButtonConfigs["variant"];
className?: string;
}) => {
const { locale } = useTranslation();
const { servizioId } = useServizio();
return (
{locale === "it" ? "Procedi al saldo" : "Proceed to payment"}
);
};
const SaldoConsulenzaButton = ({
variant = "info",
className,
}: {
variant?: ButtonConfigs["variant"];
className?: string;
}) => {
const { locale } = useTranslation();
const { servizioId } = useServizio();
return (
{locale === "it"
? "Procedi al saldo della consulenza"
: "Proceed to payment for the consultation"}
);
};