feat: refactor Pricing component to use context for pricing data and simplify props

This commit is contained in:
Marco Pedone 2026-03-16 17:56:22 +01:00
parent 65e58ab2db
commit eb36e07076

View file

@ -64,7 +64,7 @@ import { handleConsegna } from "~/lib/annuncio_details";
import { replaceWithBr } from "~/lib/newlineToBr"; import { replaceWithBr } from "~/lib/newlineToBr";
import { getStorageUrl } from "~/lib/storage_utils"; import { getStorageUrl } from "~/lib/storage_utils";
import { cn } from "~/lib/utils"; import { cn } from "~/lib/utils";
import { AnnuncioContext } from "~/providers/AnnuncioProvider"; import { AnnuncioContext, useAnnuncio } from "~/providers/AnnuncioProvider";
import { useTranslation } from "~/providers/I18nProvider"; import { useTranslation } from "~/providers/I18nProvider";
import { buildRicercaUrl } from "~/providers/RicercaProvider"; import { buildRicercaUrl } from "~/providers/RicercaProvider";
import { useSession } from "~/providers/SessionProvider"; import { useSession } from "~/providers/SessionProvider";
@ -211,14 +211,7 @@ const AnnuncioView = ({ cod, flag }: Omit<AnnuncioProps, "meta">) => {
{data.tipo && {data.tipo &&
(data.tipo === "Transitorio" || data.tipo === "Stabile") && ( (data.tipo === "Transitorio" || data.tipo === "Stabile") && (
<> <>
<Pricing <Pricing isDesktop={isDesktop} />
isDesktop={isDesktop}
tipologia={
data.tipo === "Transitorio"
? TipologiaPosizioneEnum.Transitorio
: TipologiaPosizioneEnum.Stabile
}
/>
</> </>
)} )}
</div> </div>
@ -282,15 +275,13 @@ export const getStaticPaths: GetStaticPaths = async () => {
export default AnnuncioDettaglio; export default AnnuncioDettaglio;
const Pricing = ({ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
isDesktop,
tipologia,
}: {
isDesktop: boolean;
tipologia: TipologiaPosizioneEnum;
}) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { prezzo, tipo } = useAnnuncio();
const tipologia =
tipo === "Transitorio"
? TipologiaPosizioneEnum.Transitorio
: TipologiaPosizioneEnum.Stabile;
const { data: prezziario, isLoading } = const { data: prezziario, isLoading } =
api.prezziario.getPrezziPerTipologia.useQuery({ api.prezziario.getPrezziPerTipologia.useQuery({
tipologia, tipologia,
@ -328,6 +319,16 @@ const Pricing = ({
secondPayment: s.prezzo_cent / 100, secondPayment: s.prezzo_cent / 100,
})); }));
//se stabile, mostra il prezzo basato sul canone in default
const defaultValue =
tipologia === TipologiaPosizioneEnum.Stabile
? prezzo > 70000
? 2
: prezzo > 50000
? 1
: 0
: undefined;
if (isDesktop) { if (isDesktop) {
return ( return (
<PricingComponent <PricingComponent
@ -336,6 +337,7 @@ const Pricing = ({
"max-w-2xl **:data-[role=wrapper]:flex-wrap **:data-[role=amount]:text-2xl lg:**:data-[role=wrapper]:flex-nowrap xl:**:data-[role=amount]:text-3xl sm:[&_#contratto-link]:h-8 xl:[&_#contratto-link]:h-9", "max-w-2xl **:data-[role=wrapper]:flex-wrap **:data-[role=amount]:text-2xl lg:**:data-[role=wrapper]:flex-nowrap xl:**:data-[role=amount]:text-3xl sm:[&_#contratto-link]:h-8 xl:[&_#contratto-link]:h-9",
)} )}
cta={cta} cta={cta}
defaultValue={defaultValue}
opzioni={opzioni} opzioni={opzioni}
pricingData={pricing} pricingData={pricing}
statico={true} statico={true}
@ -370,6 +372,7 @@ const Pricing = ({
<PricingComponent <PricingComponent
className={cn(style, "max-w-full")} className={cn(style, "max-w-full")}
cta={cta} cta={cta}
defaultValue={defaultValue}
opzioni={opzioni} opzioni={opzioni}
pricingData={pricing} pricingData={pricing}
statico={true} statico={true}