Refactor AnnuncioActions and Interactions components for improved layout and structure

This commit is contained in:
Marco Pedone 2025-08-10 17:54:00 +02:00
parent b4bb786ebc
commit fa46fd2925
2 changed files with 68 additions and 53 deletions

View file

@ -5,7 +5,6 @@ import {
ChevronsUpDown, ChevronsUpDown,
CircleCheck, CircleCheck,
ClipboardPaste, ClipboardPaste,
Cog,
ExternalLink, ExternalLink,
FolderKanban, FolderKanban,
Pen, Pen,
@ -90,7 +89,7 @@ export const AnnuncioActions = () => {
if ((!isAdmin && data.open_contatti_at == null) || isAdmin) { if ((!isAdmin && data.open_contatti_at == null) || isAdmin) {
return ( return (
<div className="flex w-full flex-wrap justify-start gap-3 sm:justify-end"> <div className="flex w-full max-w-fit flex-wrap justify-start gap-3 sm:justify-end">
{isAdmin && data.user_confirmed_at != null && <AdminLavoraConferma />} {isAdmin && data.user_confirmed_at != null && <AdminLavoraConferma />}
{isAdmin && data.accettato_conferma_at != null && ( {isAdmin && data.accettato_conferma_at != null && (
<> <>
@ -102,48 +101,49 @@ export const AnnuncioActions = () => {
target="_blank" target="_blank"
> >
<Button className="flex items-center gap-2"> <Button className="flex items-center gap-2">
<FolderKanban /> Apri in gestionale <FolderKanban className="size-5" /> Gestionale
</Button> </Button>
</Link> </Link>
)} )}
</> </>
)} )}
{isAdmin && ( {isAdmin && (
<Link <>
href={`/area-riservata/admin/edit-annuncio/${annuncioId}`} <Link
target="_blank" href={`/area-riservata/admin/edit-annuncio/${annuncioId}`}
> target="_blank"
<Button
aria-label="Edit Annuncio"
variant="secondary"
className="flex w-full items-center gap-2"
size="sm"
> >
<Cog className="size-6" /> Modifica <Button
</Button> aria-label="Edit Annuncio"
</Link> variant="secondary"
)} className="flex w-full items-center gap-2"
size="sm"
>
<Wrench className="size-6" />
</Button>
</Link>
<Confirm <Confirm
title="Elimina annuncio" title="Elimina annuncio"
description="Sei sicuro di voler eliminare l'annuncio?" description="Sei sicuro di voler eliminare l'annuncio?"
onConfirm={() => { onConfirm={() => {
mutate({ mutate({
servizioId, servizioId,
annuncioId, annuncioId,
}); });
}} }}
> >
<Button <Button
aria-label="Delete Annuncio" aria-label="Delete Annuncio"
variant="secondary" variant="destructive"
className="flex items-center gap-2" className="flex items-center gap-2"
size="sm" size="sm"
> >
<Trash2 className="size-6" /> <Trash2 className="size-6" />
Elimina </Button>
</Button> </Confirm>
</Confirm> </>
)}
</div> </div>
); );
} }
@ -152,8 +152,8 @@ export const AnnuncioActions = () => {
const ContrattoImportSchema = z.object({ const ContrattoImportSchema = z.object({
gestionale_id: z.number().nullable(), gestionale_id: z.number().nullable(),
contratto_decorrenza: z.date().nullable(), contratto_decorrenza: z.string().nullable(),
contratto_scadenza: z.date().nullable(), contratto_scadenza: z.string().nullable(),
contratto_tipo: z contratto_tipo: z
.enum([ .enum([
"Transitorio", "Transitorio",
@ -167,7 +167,14 @@ const ContrattoImportSchema = z.object({
.nullable(), .nullable(),
}); });
type ContrattoImportObj = z.infer<typeof ContrattoImportSchema>; interface ContrattoImportObj
extends Omit<
z.infer<typeof ContrattoImportSchema>,
"contratto_decorrenza" | "contratto_scadenza"
> {
contratto_decorrenza: Date | null;
contratto_scadenza: Date | null;
}
const parseContrattoImport = (ingest: string) => { const parseContrattoImport = (ingest: string) => {
let parsedJson: unknown; let parsedJson: unknown;
@ -181,7 +188,15 @@ const parseContrattoImport = (ingest: string) => {
} }
const parsed = ContrattoImportSchema.safeParse(parsedJson); const parsed = ContrattoImportSchema.safeParse(parsedJson);
if (parsed.success) { if (parsed.success) {
return parsed.data; return {
...parsed.data,
contratto_decorrenza: parsed.data.contratto_decorrenza
? new Date(parsed.data.contratto_decorrenza)
: null,
contratto_scadenza: parsed.data.contratto_scadenza
? new Date(parsed.data.contratto_scadenza)
: null,
};
} else { } else {
console.error("Invalid format:", parsed.error); console.error("Invalid format:", parsed.error);
return undefined; return undefined;
@ -431,19 +446,19 @@ const AdminContratto = () => {
<Credenza open={open} onOpenChange={setOpen}> <Credenza open={open} onOpenChange={setOpen}>
<CredenzaTrigger asChild> <CredenzaTrigger asChild>
<Button <Button
variant="secondary" variant={data.doc_contratto_added ? "success" : "secondary"}
className="flex w-fit items-center gap-2" className="flex w-fit items-center gap-2"
aria-label="Open Contratto Section" aria-label="Open Contratto Section"
> >
{data.doc_contratto_added ? ( {data.doc_contratto_added ? (
<CircleCheck className="size-7" /> <CircleCheck className="size-6" />
) : ( ) : (
<Wrench className="size-7" /> <Wrench className="size-6" />
)} )}
Sezione Contratto Contratto
</Button> </Button>
</CredenzaTrigger> </CredenzaTrigger>
<CredenzaContent className="max-h-[90vh] max-w-4xl px-3"> <CredenzaContent className="max-h-[90vh] max-w-4xl px-3 sm:max-w-5xl">
<CredenzaHeader> <CredenzaHeader>
<CredenzaTitle>Sezione Contratto</CredenzaTitle> <CredenzaTitle>Sezione Contratto</CredenzaTitle>
<CredenzaDescription className="sr-only"> <CredenzaDescription className="sr-only">
@ -535,7 +550,7 @@ const ContrattoSection = ({
setSelectedDoc(null); setSelectedDoc(null);
}} }}
> >
<Trash2 /> Reset <Trash2 className="size-6" /> Reset
</Button> </Button>
</div> </div>
)} )}
@ -626,7 +641,7 @@ const RicevutaSection = ({
setSelectedDoc(null); setSelectedDoc(null);
}} }}
> >
<Trash2 /> Reset <Trash2 className="size-6" /> Reset
</Button> </Button>
</div> </div>
)} )}
@ -691,16 +706,16 @@ const AdminLavoraConferma = () => {
<Credenza open={open} onOpenChange={setOpen}> <Credenza open={open} onOpenChange={setOpen}>
<CredenzaTrigger asChild> <CredenzaTrigger asChild>
<Button <Button
variant="secondary" variant={data.hasConfermaAdmin ? "success" : "secondary"}
className="flex w-fit items-center gap-2" className="flex w-fit items-center gap-2"
aria-label="Open Lavora Conferma Section" aria-label="Open Lavora Conferma Section"
> >
{data.hasConfermaAdmin ? ( {data.hasConfermaAdmin ? (
<CircleCheck className="size-7" /> <CircleCheck className="size-6" />
) : ( ) : (
<Wrench className="size-7" /> <Wrench className="size-6" />
)} )}
Lavora conferma Conferma
</Button> </Button>
</CredenzaTrigger> </CredenzaTrigger>
<CredenzaContent className="max-h-[90vh] w-full px-3 sm:max-w-4xl"> <CredenzaContent className="max-h-[90vh] w-full px-3 sm:max-w-4xl">

View file

@ -45,7 +45,7 @@ export const Interactions = () => {
const { data, annuncioId } = useServizioAnnuncio(); const { data, annuncioId } = useServizioAnnuncio();
return ( return (
<> <div className="flex flex-wrap gap-3">
<ContattiProprietarioModal /> <ContattiProprietarioModal />
{data.open_contatti_at !== null && data.user_confirmed_at == null && ( {data.open_contatti_at !== null && data.user_confirmed_at == null && (
<AnnuncioConfirm /> <AnnuncioConfirm />
@ -195,7 +195,7 @@ export const Interactions = () => {
</div> </div>
</div> </div>
)} )}
</> </div>
); );
}; };