refactor: update Annuncio actions to use new components for confirmation and contact details
This commit is contained in:
parent
ed7359aa16
commit
dc25815e06
3 changed files with 38 additions and 17 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue