diff --git a/apps/infoalloggi/.vscode/settings.json b/apps/infoalloggi/.vscode/settings.json index 316d48b..4c3e587 100644 --- a/apps/infoalloggi/.vscode/settings.json +++ b/apps/infoalloggi/.vscode/settings.json @@ -1,5 +1,6 @@ { "editor.codeActionsOnSave": { + "source.organizeImports.biome": "explicit", "source.fixAll.biome": "explicit" }, "editor.formatOnSave": true, diff --git a/apps/infoalloggi/TODO b/apps/infoalloggi/TODO index 4c86340..546ddd1 100644 --- a/apps/infoalloggi/TODO +++ b/apps/infoalloggi/TODO @@ -1,19 +1,19 @@ TODOS: - Updated_at timestamp per appartamento se in backend ho modificato le foto, e uso quello per cache key - Indicare di dover modificare le info nel onboarding -- Modale annunci compatibili invece di collapsible -- Ordine annunci selezionati non deve variare -- Sostituire collapre ricerca con modale con anche counter annunci come in gestionale + - Modale contatti mettere Proprietario/Referente - Modale contatti, aggiunti tasto whatsapp - Modale contatti, warning contatti in rosso - Mod contatti, caricamento doc identità, con ref salvato nell' servizio-annunci row -- Mod conferma deve essere tipo "sei interessato a confermare imm.." con caricamento del file di motivazione + - Parametri del servizio transitorio specificare termine contrato/scadenza altra motivazione transitoria -- Preparazione sevizio, aggiungere flags "può saltare pagamento", "può saltare controllo documento", "può confermare senza doc motivazione" -- Se può saltare passaggi i bottoni o sezioni allegare doc sono nascosti +- Preparazione sevizio, aggiungere flags "può saltare pagamento", "può saltare controllo documento", "può confermare senza doc motivazione" Se può saltare passaggi i bottoni o sezioni allegare doc sono nascosti + +- Mod conferma deve essere tipo "sei interessato a confermare imm.." con caricamento del file di motivazione - Modale conferma mostrare scorciatoia a doc lavoro o simile per facilitare - Post modale conferma, mostrare se transitorio , modale con informativa tipo:" il saldo del servizio e il periodo di permanenza veranno adeguati alle condizioni stabilite insieme al locatore nel momento della trattativa e alla documentazione presentata come giustificazione di transitorietà" (modificato) + - Mostrare last update in annunci e in singolo annuncio NEW IDEA TODOS: diff --git a/apps/infoalloggi/src/components/servizio/main.tsx b/apps/infoalloggi/src/components/servizio/main.tsx index c409e2b..ae9eb5c 100644 --- a/apps/infoalloggi/src/components/servizio/main.tsx +++ b/apps/infoalloggi/src/components/servizio/main.tsx @@ -1,25 +1,16 @@ -import { ExternalLink, Package, PackageCheck, UserCircle } from "lucide-react"; +import { Package, PackageCheck, UserCircle } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactNode, useEffect } from "react"; +import { useEffect } from "react"; import toast from "react-hot-toast"; -import { InteressatoButtonBatchV } from "~/components/annuncio-interactions/annuncio_interactions"; -import { AddButton } from "~/components/servizio/annuncio_actions"; -import { - AnnuncioCard, - BasicAnnuncioCard, -} from "~/components/servizio/annuncio_card"; + +import { AnnuncioCard } from "~/components/servizio/annuncio_card"; import { SaldoButton } from "~/components/servizio/interactions"; import { ServizioDuration } from "~/components/servizio/service-duration-display"; import { ServizioActions, ServizioActions2, } from "~/components/servizio/servizio_actions"; -import { - AnnunciCompatibili, - AnnunciInConferma, - AnnunciSelezionati, -} from "~/components/servizio/servizio_annunci_accordions"; import { Button } from "~/components/ui/button"; import { Card, @@ -28,14 +19,6 @@ import { CardHeader, CardTitle, } from "~/components/ui/card"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "~/components/ui/dialog"; import { Progress } from "~/components/ui/progress"; import { cn } from "~/lib/utils"; import { @@ -46,6 +29,11 @@ import { import type { UsersId } from "~/schemas/public/Users"; import type { ServizioData } from "~/server/controllers/servizio.controller"; import { api } from "~/utils/api"; +import { + AnnunciCompatibili, + AnnunciInConferma, + AnnunciSelezionati, +} from "./servizio_annunci_accordions"; export const ServizioContainer = ({ servizio, @@ -190,12 +178,7 @@ export const ServizioContent = () => { )} - {isAdmin && ( - - )} + {isAdmin && } } header={ @@ -301,145 +284,10 @@ export const ServizioContent = () => { )} - {/*
- - 0} - /> - -
*/}
- - - - {annunciInConferma.length} - -
- } - > -
- {annunciInConferma.map((data) => { - return ( - - - - ); - })} -
- - - - - {annunciNotInConferma.length} - - - } - > -
- {annunciNotInConferma.length > 0 ? ( - annunciNotInConferma.map((data) => { - return ( - - - - ); - }) - ) : ( -
- - Nessun annuncio selezionato, fai una ricerca nella pagina{" "} - - Annunci - - - -
- )} -
-
- {(() => { - const { servizioId, userId, isAdmin } = useServizio(); - const { data, isLoading } = - api.servizio.getCompatibileAnnunci.useQuery({ - servizioId, - }); - - const { data: userIntrests } = - api.intrests.getUserInterests.useQuery({ - userId, - }); - - if (isLoading) return
Loading...
; - return ( - - - - {data?.length} - - - } - > -
- {!data || data.length === 0 ? ( -
- - Nessun annuncio compatibile trovato. Amplia la ricerca - per trovare annunci compatibili. - -
- ) : ( - data.map((a) => { - return ( - - {isAdmin ? ( - - ) : ( - - )} - - } - key={a.id} - /> - ); - }) - )} -
-
- ); - })()} + + + } @@ -452,31 +300,6 @@ export const ServizioContent = () => { ); }; -const DialogServizio = ({ - trigger, - title, - children, -}: { - trigger: ReactNode; - title: string; - children: ReactNode; -}) => { - return ( - - {trigger} - - - {title} - - Servizio Dialog - - - {children} - - - ); -}; - const ServizioMain = () => { const { servizio, isAdmin, userId } = useServizio(); const utils = api.useUtils(); @@ -567,12 +390,7 @@ const ServizioMain = () => { )} - {isAdmin && ( - - )} + {isAdmin && } } header={ @@ -704,10 +522,7 @@ const ServizioMain = () => {
- 0} - /> +
diff --git a/apps/infoalloggi/src/components/servizio/servizio_annunci_accordions.tsx b/apps/infoalloggi/src/components/servizio/servizio_annunci_accordions.tsx index 0959a2e..b286377 100644 --- a/apps/infoalloggi/src/components/servizio/servizio_annunci_accordions.tsx +++ b/apps/infoalloggi/src/components/servizio/servizio_annunci_accordions.tsx @@ -1,5 +1,6 @@ import { ExternalLink, Trash2 } from "lucide-react"; import Link from "next/link"; +import type { ReactNode } from "react"; import toast from "react-hot-toast"; import { InteressatoButtonBatchV } from "~/components/annuncio-interactions/annuncio_interactions"; import { AddButton } from "~/components/servizio/annuncio_actions"; @@ -21,84 +22,126 @@ import { import type { UsersId } from "~/schemas/public/Users"; import type { ServizioData } from "~/server/controllers/servizio.controller"; import { api } from "~/utils/api"; +import { LoadingPage } from "../loading"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "../ui/dialog"; +const DialogServizio = ({ + trigger, + title, + children, +}: { + trigger: ReactNode; + title: string; + children: ReactNode; +}) => { + return ( + + {trigger} + + + {title} + + Servizio Dialog + + + {children} + + + ); +}; export const AnnunciInConferma = ({ annunci, }: { annunci: ServizioData["annunci"]; }) => { - if (annunci.length === 0) { - return null; // If there are no announcements in confirmation, do not render this section - } - return ( - - - - Annunci in conferma: - - -
- {annunci.map((data) => { - return ( - - - - ); - })} -
-
-
-
+ + + {annunci.length > 0 && ( + + {annunci.length} + + )} + + } + > +
+ {annunci.map((data) => { + return ( + + + + ); + })} +
+
); }; export const AnnunciSelezionati = ({ - isConfirming, annunci, }: { - isConfirming: boolean; annunci: ServizioData["annunci"]; }) => { return ( - + + {annunci.length > 0 && ( + + {annunci.length} + + )} + + } > - - - Annunci Selezionati: - - -
- {annunci.length > 0 ? ( - annunci.map((data) => { - return ( - - - - ); - }) - ) : ( -
- - Nessun annuncio selezionato, fai una ricerca nella pagina{" "} - - Annunci - - - -
- )} +
+ {annunci.length > 0 ? ( + annunci.map((data) => { + return ( + + + + ); + }) + ) : ( +
+ + Nessun annuncio selezionato, fai una ricerca nella pagina{" "} + + Annunci + + +
- - - + )} +
+ ); }; @@ -112,20 +155,27 @@ export const AnnunciCompatibili = () => { userId, }); - if (isLoading) return
Loading...
; - return ( - + + {data && data.length > 0 && ( + + {data?.length} + + )} +
+ } > - - - Annunci Compatibili: - - -
+
+ {isLoading ? ( + + ) : ( + <> {!data || data.length === 0 ? (
@@ -134,32 +184,30 @@ export const AnnunciCompatibili = () => {
) : ( - data.map((a) => { - return ( - - {isAdmin ? ( - - ) : ( - - )} - - } - key={a.id} - /> - ); - }) + data.map((a) => ( + + {isAdmin ? ( + + ) : ( + + )} + + } + key={a.id} + /> + )) )} -
- - - + + )} +
+ ); };