feat: update Servizio component to integrate AdminServizioActions and enhance user actions

This commit is contained in:
Marco Pedone 2026-03-20 13:54:29 +01:00
parent 8c7f0cd9b3
commit 8f662c56c1
3 changed files with 49 additions and 48 deletions

View file

@ -52,7 +52,7 @@ import {
import { SaldoButton } from "./annuncio_actions"; import { SaldoButton } from "./annuncio_actions";
import { AnnuncioCard, AnnuncioDisplay } from "./annuncio_card"; import { AnnuncioCard, AnnuncioDisplay } from "./annuncio_card";
import { AnnunciCompatibili } from "./compatibili_dialog"; import { AnnunciCompatibili } from "./compatibili_dialog";
import { ServizioInfos } from "./servizio_actions"; import { AdminServizioActions, ServizioInfos } from "./servizio_actions";
export const ServizioList = ({ export const ServizioList = ({
data, data,
@ -317,8 +317,9 @@ const Content = () => {
</span> </span>
</div> </div>
</div> </div>
<ServizioInfos /> <AdminServizioActions />
</div> </div>
<ServizioInfos />
<Main /> <Main />
</div> </div>

View file

@ -59,7 +59,7 @@ import {
} from "~/forms/FormEditServizioAdmin"; } from "~/forms/FormEditServizioAdmin";
import { FormNewOrder } from "~/forms/FormNewOrdine"; import { FormNewOrder } from "~/forms/FormNewOrdine";
import { FormServizio, type FormValues } from "~/forms/FormServizio"; import { FormServizio, type FormValues } from "~/forms/FormServizio";
import { cn, formatCurrency } from "~/lib/utils"; import { formatCurrency } from "~/lib/utils";
import { useTranslation } from "~/providers/I18nProvider"; import { useTranslation } from "~/providers/I18nProvider";
import { useServizio } from "~/providers/ServizioProvider"; import { useServizio } from "~/providers/ServizioProvider";
import type { AnnunciId } from "~/schemas/public/Annunci"; import type { AnnunciId } from "~/schemas/public/Annunci";
@ -68,7 +68,6 @@ import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
import type { UsersId } from "~/schemas/public/Users"; import type { UsersId } from "~/schemas/public/Users";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
import { Confirm } from "../confirm"; import { Confirm } from "../confirm";
import { Separator } from "../ui/separator";
import { import {
Table, Table,
TableBody, TableBody,
@ -82,51 +81,52 @@ export const ServizioInfos = () => {
return ( return (
<div className="grid w-full grid-cols-2 gap-2 sm:grid-cols-4"> <div className="grid w-full grid-cols-2 gap-2 sm:grid-cols-4">
<ServizioPrezzo /> <ServizioPrezzo />
<ServizioActions /> <UserActions />
{/* <ServizioActions /> */}
<ServizioOrders /> <ServizioOrders />
</div> </div>
); );
}; };
const ServizioActions = () => { // const ServizioActions = () => {
const { isAdmin } = useServizio(); // const { isAdmin } = useServizio();
return ( // return (
<Dialog> // <Dialog>
<DialogTrigger asChild> // <DialogTrigger asChild>
<Button className="flex-1" variant="outline"> // <Button className="flex-1" variant="outline">
<SlidersHorizontal /> // <SlidersHorizontal />
<span>Impostazioni</span> // <span>Impostazioni</span>
</Button> // </Button>
</DialogTrigger> // </DialogTrigger>
<DialogContent className="sm:max-w-2xl"> // <DialogContent className="sm:max-w-2xl">
<DialogHeader> // <DialogHeader>
<DialogTitle>Azioni Servizio</DialogTitle> // <DialogTitle>Azioni Servizio</DialogTitle>
<DialogDescription className="sr-only"> // <DialogDescription className="sr-only">
Azioni disponibili per questo servizio // Azioni disponibili per questo servizio
</DialogDescription> // </DialogDescription>
</DialogHeader> // </DialogHeader>
<div className="flex flex-col items-center gap-4"> // <div className="flex flex-col items-center gap-4">
{isAdmin && ( // {isAdmin && (
<div className="w-full text-center"> // <div className="w-full text-center">
<span>Azioni Admin</span> // <span>Azioni Admin</span>
<Separator /> // <Separator />
</div> // </div>
)} // )}
<AdminActions /> // <AdminServizioActions />
{isAdmin && ( // {isAdmin && (
<div className="w-full text-center"> // <div className="w-full text-center">
<span>Azioni Utente</span> // <span>Azioni Utente</span>
<Separator /> // <Separator />
</div> // </div>
)} // )}
<UserActions /> // <UserActions />
</div> // </div>
</DialogContent> // </DialogContent>
</Dialog> // </Dialog>
); // );
}; // };
const AdminActions = () => { export const AdminServizioActions = () => {
const { servizio, isAdmin, userId } = useServizio(); const { servizio, isAdmin, userId } = useServizio();
if (!isAdmin) return null; if (!isAdmin) return null;
return ( return (
@ -137,7 +137,7 @@ const AdminActions = () => {
); );
}; };
const UserActions = ({ className }: { className?: string }) => { const UserActions = () => {
const { servizio, isAdmin } = useServizio(); const { servizio, isAdmin } = useServizio();
const canUserEdit = servizio.isOkAcconto && servizio.decorrenza !== null; const canUserEdit = servizio.isOkAcconto && servizio.decorrenza !== null;
@ -149,10 +149,10 @@ const UserActions = ({ className }: { className?: string }) => {
if (isAdmin || canUserEdit) { if (isAdmin || canUserEdit) {
return ( return (
<div className={cn("flex flex-wrap items-center gap-2", className)}> <>
<EditParametri /> <EditParametri />
<InterruzioneServizio /> <InterruzioneServizio />
</div> </>
); );
} }
return null; return null;
@ -676,7 +676,7 @@ const EditParametri = () => {
<CredenzaTrigger asChild> <CredenzaTrigger asChild>
<Button <Button
aria-label="Parametri di ricerca" aria-label="Parametri di ricerca"
className="" className="w-full"
disabled={ disabled={
!isAdmin && !isAdmin &&
(servizio.isInterrotto || (servizio.isInterrotto ||

View file

@ -1336,7 +1336,7 @@ export const it: LangDict = {
}, },
parametri: { parametri: {
title: "Parametri di ricerca", title: "Parametri di ricerca",
btn: "Parametri", btn: "Parametri ricerca",
}, },
interruzione: { interruzione: {
btn: "Interruzione", btn: "Interruzione",