diff --git a/apps/infoalloggi/src/components/servizio/servizio_actions.tsx b/apps/infoalloggi/src/components/servizio/servizio_actions.tsx index 70e1021..84e03f4 100644 --- a/apps/infoalloggi/src/components/servizio/servizio_actions.tsx +++ b/apps/infoalloggi/src/components/servizio/servizio_actions.tsx @@ -39,9 +39,11 @@ import { import { useState } from "react"; import { useServizio } from "~/providers/ServizioProvider"; +import type { ServizioServizioId } from "~/schemas/public/Servizio"; +import type { UsersId } from "~/schemas/public/Users"; export const ServizioActions = () => { - const { servizio, isAdmin } = useServizio(); + const { servizio, isAdmin, userId } = useServizio(); const canUserEdit = servizio.isOkAcconto && @@ -59,13 +61,19 @@ export const ServizioActions = () => { )} - {isAdmin && } + {isAdmin && ( + + )} ); }; -const AddAnnuncio = () => { - const { servizioId, userId } = useServizio(); - +export const AddAnnuncio = ({ + servizioId, + userId, +}: { + servizioId: ServizioServizioId; + userId: UsersId; +}) => { const { data: codici, isLoading: loading } = api.servizio.getAnnunciAvailableToAdd.useQuery({ servizioId, @@ -87,6 +95,7 @@ const AddAnnuncio = () => { await utils.servizio.getCompatibileAnnunci.invalidate({ servizioId, }); + await utils.servizio.getUserServizi.invalidate({ userId }); toast.success("Annuncio aggiunto"); setOpenModal(false); setSelectedAnnunci([]); @@ -166,6 +175,7 @@ const AddAnnuncio = () => { ); }; + const InterruzioneServizio = () => { const { servizio, userId } = useServizio(); diff --git a/apps/infoalloggi/src/components/tables/servizio-table.tsx b/apps/infoalloggi/src/components/tables/servizio-table.tsx index bcc45b7..8760992 100644 --- a/apps/infoalloggi/src/components/tables/servizio-table.tsx +++ b/apps/infoalloggi/src/components/tables/servizio-table.tsx @@ -1,5 +1,5 @@ import toast from "react-hot-toast"; -import type { Servizio } from "~/schemas/public/Servizio"; +import type { Servizio, ServizioServizioId } from "~/schemas/public/Servizio"; import type { UsersId } from "~/schemas/public/Users"; import { api } from "~/utils/api"; import { LoadingPage } from "~/components/loading"; @@ -37,6 +37,13 @@ import { Button } from "~/components/ui/button"; import { Confirm } from "~/components/confirm"; import Link from "next/link"; import { env } from "~/env.mjs"; +import type { AnnunciId } from "~/schemas/public/Annunci"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "~/components/ui/tooltip"; +import { AddAnnuncio } from "~/components/servizio/servizio_actions"; export const TabServizio = ({ userId, @@ -94,6 +101,7 @@ export const TabServizio = ({ Inviato Status + @@ -105,7 +113,7 @@ export const TabServizio = ({ servizio.decorrenza !== null; return ( - + {servizio.servizio_id} {servizio.tipologia} @@ -132,6 +140,13 @@ export const TabServizio = ({ Inattivo )} + + + @@ -294,3 +309,35 @@ export const TabServizio = ({ ); }; + +const AnnunciSection = ({ + selectedAnnunci, + servizioId, + userId, +}: { + selectedAnnunci: { codice: string; annunci_id: AnnunciId }[]; + servizioId: ServizioServizioId; + userId: UsersId; +}) => { + return ( +
+ + + {selectedAnnunci?.length} + + + {selectedAnnunci?.length > 0 ? ( +
    + {selectedAnnunci?.map((annuncio) => ( +
  • {annuncio.codice}
  • + ))} +
+ ) : ( + Nessun annuncio associato + )} +
+
+ +
+ ); +}; diff --git a/apps/infoalloggi/src/server/controllers/servizio.controller.ts b/apps/infoalloggi/src/server/controllers/servizio.controller.ts index a900872..3642b77 100644 --- a/apps/infoalloggi/src/server/controllers/servizio.controller.ts +++ b/apps/infoalloggi/src/server/controllers/servizio.controller.ts @@ -113,7 +113,21 @@ export const getServiziByUserId = async (userId: UsersId) => { try { return await db .selectFrom("servizio") - .selectAll() + .selectAll("servizio") + .select((eb) => [ + jsonArrayFrom( + eb + .selectFrom("servizio_annunci") + .select(["servizio_annunci.annunci_id"]) + .innerJoin("annunci", "annunci.id", "servizio_annunci.annunci_id") + .select("annunci.codice") + .whereRef( + "servizio_annunci.servizio_id", + "=", + "servizio.servizio_id", + ), + ).as("annunci"), + ]) .where("user_id", "=", userId) .orderBy("created_at", "asc") .execute();