refactor: update Annuncio actions to use new components for confirmation and contact details

This commit is contained in:
Marco Pedone 2026-04-09 16:27:33 +02:00
parent ed7359aa16
commit dc25815e06
3 changed files with 38 additions and 17 deletions

View file

@ -1,8 +1,5 @@
TODOS: TODOS:
- Log email fallite e retry - Log email fallite e retry
- semplificare post notifica interesse conferma in un enum? o comunque un sistema più semplice da gestire, pagamenti da mostrare? o solo un sunto? da aggiornare o solo bonifico?
- piu info negli annunci_servizio sheet
- override magico per saltare inserimento strighe caparra e contratto
AFTER MVP: AFTER MVP:
- TODO migrazione app router https://nextjs.org/docs/pages/building-your-application/upgrading/app-router-migration#migrating-from-pages-to-app - TODO migrazione app router https://nextjs.org/docs/pages/building-your-application/upgrading/app-router-migration#migrating-from-pages-to-app

View file

@ -43,7 +43,9 @@ import { useTranslation } from "~/providers/I18nProvider";
import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider"; import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider";
import type { AnnunciId } from "~/schemas/public/Annunci"; import type { AnnunciId } from "~/schemas/public/Annunci";
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
import type { ServizioServizioId } from "~/schemas/public/Servizio";
import StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum"; import StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum";
import type { ServizioAnnuncioData } from "~/server/controllers/servizio.controller";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
import { Confirm } from "../confirm"; import { Confirm } from "../confirm";
import { AdminContratto } from "./admin_contratto"; import { AdminContratto } from "./admin_contratto";
@ -70,8 +72,12 @@ export const AdminActions = () => {
<> <>
<h3 className="ml-1 font-semibold">Azioni Admin:</h3> <h3 className="ml-1 font-semibold">Azioni Admin:</h3>
<div className="flex w-full max-w-fit flex-wrap justify-start gap-3"> <div className="flex w-full max-w-fit flex-wrap justify-start gap-3">
<AdminAnnuncioContatti /> <AnnuncioContatti data={data} />
<AdminAnnuncioConfermaPopover /> <AnnuncioConfermaPopover
annuncioId={annuncioId}
servizioId={servizioId}
status_conferma={data.status_conferma}
/>
{data.status_conferma != null && ( {data.status_conferma != null && (
<> <>
@ -156,9 +162,15 @@ export const UserActions = () => {
); );
}; };
const AdminAnnuncioConfermaPopover = () => { export const AnnuncioConfermaPopover = ({
const { servizioId } = useServizio(); servizioId,
const { data } = useServizioAnnuncio(); annuncioId,
status_conferma,
}: {
servizioId: ServizioServizioId;
annuncioId: AnnunciId;
status_conferma: StatusConfermaEnum | null;
}) => {
const utils = api.useUtils(); const utils = api.useUtils();
const { mutate } = api.servizio.updateServizioAnnunci.useMutation({ const { mutate } = api.servizio.updateServizioAnnunci.useMutation({
onSuccess: async () => { onSuccess: async () => {
@ -171,7 +183,7 @@ const AdminAnnuncioConfermaPopover = () => {
}); });
const handleStatusChange = (status: StatusConfermaEnum | null) => { const handleStatusChange = (status: StatusConfermaEnum | null) => {
mutate({ mutate({
annuncioId: data.id, annuncioId,
servizioId, servizioId,
data: { status_conferma: status }, data: { status_conferma: status },
}); });
@ -180,7 +192,7 @@ const AdminAnnuncioConfermaPopover = () => {
<Popover> <Popover>
<PopoverTrigger asChild> <PopoverTrigger asChild>
<Button size="sm" variant="orange"> <Button size="sm" variant="orange">
<Workflow /> {data.status_conferma || "Non in conferma"} <Workflow /> {status_conferma || "Non in conferma"}
</Button> </Button>
</PopoverTrigger> </PopoverTrigger>
<PopoverContent> <PopoverContent>
@ -195,9 +207,9 @@ const AdminAnnuncioConfermaPopover = () => {
<Button <Button
className="justify-start rounded-b-none" className="justify-start rounded-b-none"
onClick={() => handleStatusChange(null)} onClick={() => handleStatusChange(null)}
variant={data.status_conferma === null ? "default" : "outline"} variant={status_conferma === null ? "default" : "outline"}
> >
{data.status_conferma === null ? <CircleCheck /> : <Circle />} {status_conferma === null ? <CircleCheck /> : <Circle />}
Non in conferma Non in conferma
</Button> </Button>
{Object.values(StatusConfermaEnum).map((status) => ( {Object.values(StatusConfermaEnum).map((status) => (
@ -205,9 +217,9 @@ const AdminAnnuncioConfermaPopover = () => {
className="justify-start rounded-none last:rounded-b-md" className="justify-start rounded-none last:rounded-b-md"
key={status} key={status}
onClick={() => handleStatusChange(status)} onClick={() => handleStatusChange(status)}
variant={data.status_conferma === status ? "default" : "outline"} variant={status_conferma === status ? "default" : "outline"}
> >
{data.status_conferma === status ? <CircleCheck /> : <Circle />} {status_conferma === status ? <CircleCheck /> : <Circle />}
{status} {status}
</Button> </Button>
))} ))}
@ -217,8 +229,7 @@ const AdminAnnuncioConfermaPopover = () => {
); );
}; };
const AdminAnnuncioContatti = () => { export const AnnuncioContatti = ({ data }: { data: ServizioAnnuncioData }) => {
const { data } = useServizioAnnuncio();
const { data: annuncio, isLoading } = api.annunci.getAnnuncioFull.useQuery({ const { data: annuncio, isLoading } = api.annunci.getAnnuncioFull.useQuery({
id: data.id, id: data.id,
}); });

View file

@ -7,6 +7,8 @@ import toast from "react-hot-toast";
import LoadingButton from "~/components/custom_ui/loading-button"; import LoadingButton from "~/components/custom_ui/loading-button";
import { import {
AdminActions, AdminActions,
AnnuncioConfermaPopover,
AnnuncioContatti,
UserActions, UserActions,
} from "~/components/servizio/annuncio_actions"; } from "~/components/servizio/annuncio_actions";
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
@ -159,7 +161,18 @@ export const AnnuncioCardRichieste = ({
? format(data.open_contatti_at, "dd/MM/yyyy HH:mm") ? format(data.open_contatti_at, "dd/MM/yyyy HH:mm")
: "Non ancora visto"} : "Non ancora visto"}
</p> </p>
{/*TODO CAPIRE COSA AGGIUNGERE */} </div>
</div>
<div className="flex flex-wrap gap-4">
<div>
<AnnuncioContatti data={data} />
</div>
<div>
<AnnuncioConfermaPopover
annuncioId={data.id}
servizioId={data.servizio_id}
status_conferma={data.status_conferma}
/>
</div> </div>
</div> </div>
</div> </div>