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 { getStorageUrl } from "~/lib/storage_utils";
import { cn } from "~/lib/utils";
import { AnnuncioContext } from "~/providers/AnnuncioProvider";
import { AnnuncioContext, useAnnuncio } from "~/providers/AnnuncioProvider";
import { useTranslation } from "~/providers/I18nProvider";
import { buildRicercaUrl } from "~/providers/RicercaProvider";
import { useSession } from "~/providers/SessionProvider";
@ -211,14 +211,7 @@ const AnnuncioView = ({ cod, flag }: Omit<AnnuncioProps, "meta">) => {
{data.tipo &&
(data.tipo === "Transitorio" || data.tipo === "Stabile") && (
<>
<Pricing
isDesktop={isDesktop}
tipologia={
data.tipo === "Transitorio"
? TipologiaPosizioneEnum.Transitorio
: TipologiaPosizioneEnum.Stabile
}
/>
<Pricing isDesktop={isDesktop} />
</>
)}
</div>
@ -282,15 +275,13 @@ export const getStaticPaths: GetStaticPaths = async () => {
export default AnnuncioDettaglio;
const Pricing = ({
isDesktop,
tipologia,
}: {
isDesktop: boolean;
tipologia: TipologiaPosizioneEnum;
}) => {
const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
const { t } = useTranslation();
const { prezzo, tipo } = useAnnuncio();
const tipologia =
tipo === "Transitorio"
? TipologiaPosizioneEnum.Transitorio
: TipologiaPosizioneEnum.Stabile;
const { data: prezziario, isLoading } =
api.prezziario.getPrezziPerTipologia.useQuery({
tipologia,
@ -328,6 +319,16 @@ const Pricing = ({
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) {
return (
<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",
)}
cta={cta}
defaultValue={defaultValue}
opzioni={opzioni}
pricingData={pricing}
statico={true}
@ -370,6 +372,7 @@ const Pricing = ({
<PricingComponent
className={cn(style, "max-w-full")}
cta={cta}
defaultValue={defaultValue}
opzioni={opzioni}
pricingData={pricing}
statico={true}