refactor: enhance AnnuncioCard to accept confirming prop and improve layout in interactions
This commit is contained in:
parent
dacea2481e
commit
e4d7e94ae2
4 changed files with 44 additions and 10 deletions
|
|
@ -10,13 +10,20 @@ import { useServizioAnnuncio } from "~/providers/ServizioProvider";
|
||||||
import type { AnnuncioRicerca } from "~/server/controllers/annunci.controller";
|
import type { AnnuncioRicerca } from "~/server/controllers/annunci.controller";
|
||||||
import { AnnuncioDettaglio, TipoBadge } from "./annuncio_dettaglio";
|
import { AnnuncioDettaglio, TipoBadge } from "./annuncio_dettaglio";
|
||||||
|
|
||||||
export const AnnuncioCard = ({ className }: { className?: string }) => {
|
export const AnnuncioCard = ({
|
||||||
|
className,
|
||||||
|
confirming,
|
||||||
|
}: {
|
||||||
|
className?: string;
|
||||||
|
confirming?: boolean;
|
||||||
|
}) => {
|
||||||
const { data } = useServizioAnnuncio();
|
const { data } = useServizioAnnuncio();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BasicAnnuncioCard
|
<BasicAnnuncioCard
|
||||||
actions={<AnnuncioActions />}
|
actions={<AnnuncioActions />}
|
||||||
className={className}
|
className={className}
|
||||||
|
confirming={confirming}
|
||||||
data={{
|
data={{
|
||||||
...data,
|
...data,
|
||||||
modificato_il: data.modificato_il ? new Date(data.modificato_il) : null,
|
modificato_il: data.modificato_il ? new Date(data.modificato_il) : null,
|
||||||
|
|
@ -33,23 +40,36 @@ export const BasicAnnuncioCard = ({
|
||||||
interactions,
|
interactions,
|
||||||
className,
|
className,
|
||||||
data,
|
data,
|
||||||
|
confirming,
|
||||||
}: {
|
}: {
|
||||||
actions?: React.ReactNode;
|
actions?: React.ReactNode;
|
||||||
interactions?: React.ReactNode;
|
interactions?: React.ReactNode;
|
||||||
className?: string;
|
className?: string;
|
||||||
data: AnnuncioRicerca;
|
data: AnnuncioRicerca;
|
||||||
|
confirming?: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className={cn("w-full gap-2 border-white py-3", className)}>
|
<Card className={cn("w-full gap-2 border-white py-3", className)}>
|
||||||
<CardHeader className="flex flex-row flex-wrap items-center justify-between space-y-0 px-3 pb-0">
|
<CardHeader className="flex flex-row flex-wrap items-center justify-between space-y-0 px-3 pb-2">
|
||||||
<CardTitle className="text-2xl">Annuncio {data.codice}</CardTitle>
|
<CardTitle className="text-2xl">Annuncio {data.codice}</CardTitle>
|
||||||
{actions}
|
{actions}
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent className="px-3">
|
<CardContent className="px-3">
|
||||||
<div className="@container flex w-full flex-col gap-2">
|
<div
|
||||||
<div className="grid @md:grid-cols-[12rem_1fr] grid-cols-[6rem_1fr] gap-x-4 gap-y-2 rounded-md md:max-w-3xl md:border md:border-white md:bg-[#e6e9ec]/50 lg:gap-x-6 xl:gap-x-8 dark:md:border-primary dark:md:bg-card">
|
className={cn(
|
||||||
|
"@container flex w-full flex-col gap-4",
|
||||||
|
confirming && "xl:flex-row xl:gap-6",
|
||||||
|
)}
|
||||||
|
id="container"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className={cn(
|
||||||
|
"grid @md:grid-cols-[12rem_1fr] grid-cols-[6rem_1fr] gap-x-4 gap-y-2 rounded-md md:max-w-3xl md:border md:border-white md:bg-[#e6e9ec]/50 lg:gap-x-6 xl:gap-x-8 dark:md:border-primary dark:md:bg-card",
|
||||||
|
confirming && "xl:w-1/2",
|
||||||
|
)}
|
||||||
|
>
|
||||||
<div className="row-span-1 md:row-span-3">
|
<div className="row-span-1 md:row-span-3">
|
||||||
<Image
|
<Image
|
||||||
alt={data.codice}
|
alt={data.codice}
|
||||||
|
|
@ -94,7 +114,14 @@ export const BasicAnnuncioCard = ({
|
||||||
<AnnuncioDettaglio data={data} />
|
<AnnuncioDettaglio data={data} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex w-full flex-col gap-5">{interactions}</div>
|
<div
|
||||||
|
className={cn(
|
||||||
|
"flex w-full flex-col gap-4",
|
||||||
|
confirming && "xl:w-1/2",
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{interactions}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
|
||||||
|
|
@ -190,13 +190,15 @@ export const Interactions = () => {
|
||||||
const { data } = useServizioAnnuncio();
|
const { data } = useServizioAnnuncio();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
<div className="flex w-full flex-col flex-wrap gap-2 sm:flex-row">
|
<div className="flex w-full flex-col flex-wrap gap-2 sm:flex-row">
|
||||||
<ContattiProprietarioModal />
|
<ContattiProprietarioModal />
|
||||||
|
|
||||||
<SezioneConferma />
|
<SezioneConferma />
|
||||||
|
</div>
|
||||||
|
|
||||||
{data.accettato_conferma_at != null && <PostConfermaSection />}
|
{data.accettato_conferma_at != null && <PostConfermaSection />}
|
||||||
</div>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,10 @@ export const ServizioContent = () => {
|
||||||
servizioId={servizio.servizio_id}
|
servizioId={servizio.servizio_id}
|
||||||
userId={userId}
|
userId={userId}
|
||||||
>
|
>
|
||||||
<AnnuncioCard />
|
<AnnuncioCard
|
||||||
|
className="rounded-md border-primary"
|
||||||
|
confirming
|
||||||
|
/>
|
||||||
</ServizioAnnuncioProvider>
|
</ServizioAnnuncioProvider>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,8 @@ const ServizioBasicActions = ({ className }: { className?: string }) => {
|
||||||
servizio.isOkAcconto &&
|
servizio.isOkAcconto &&
|
||||||
servizio.decorrenza !== null &&
|
servizio.decorrenza !== null &&
|
||||||
new Date() <= add(new Date(servizio.decorrenza), { days: 60 }) &&
|
new Date() <= add(new Date(servizio.decorrenza), { days: 60 }) &&
|
||||||
|
!servizio.annunci.some((a) => a.user_confirmed_at !== null) &&
|
||||||
|
!servizio.isInterrotto &&
|
||||||
!servizio.annunci.some((a) => a.user_confirmed_at !== null);
|
!servizio.annunci.some((a) => a.user_confirmed_at !== null);
|
||||||
|
|
||||||
if (isAdmin || canUserEdit) {
|
if (isAdmin || canUserEdit) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue