- {items.map((item, index) => (
+ {allItems.map((item, index) => (
{
- return [
- {
- id: "1",
- key: "main_ultra_pack",
- type: "sdv",
- price: 1939,
- oldPrice: 3499,
- },
- {
- id: "2",
- key: "main_numerology_analysis",
- type: "sdv",
- price: 938,
- oldPrice: 1999,
- },
- {
- id: "3",
- key: "main_tarot_reading",
- type: "sdv",
- price: 937,
- oldPrice: 1999,
- },
- {
- id: "4",
- key: "main_palmistry_guide",
- type: "sdv",
- price: 936,
- oldPrice: 1999,
- },
- ];
- return data?.variants ?? [];
+ // Используем данные с сервера и добавляем oldPrice на основе зашитого процента скидки
+ const serverOffers = data?.variants ?? [];
+ return serverOffers.map((offer: IFunnelPaymentVariant, index: number) => {
+ // Первый товар имеет скидку 50%, остальные - 45%
+ const discountPercent = index === 0 ? FIRST_PRODUCT_DISCOUNT : OTHER_PRODUCTS_DISCOUNT;
+ // Рассчитываем oldPrice: если price это цена со скидкой X%, то oldPrice = price / (1 - X/100)
+ const oldPrice = Math.round(offer.price / (1 - discountPercent / 100));
+ return {
+ ...offer,
+ oldPrice,
+ };
+ });
}, [data]);
const [activeOffer, setActiveOffer] = useState
("");
const { setSelectedProduct } = useProductSelection();
diff --git a/src/components/domains/additional-purchases/VideoGuidesPage/VideoGuidesPage.tsx b/src/components/domains/additional-purchases/VideoGuidesPage/VideoGuidesPage.tsx
index b1db972..338358f 100644
--- a/src/components/domains/additional-purchases/VideoGuidesPage/VideoGuidesPage.tsx
+++ b/src/components/domains/additional-purchases/VideoGuidesPage/VideoGuidesPage.tsx
@@ -1,13 +1,16 @@
+"use client";
+
import { Suspense } from "react";
import { useTranslations } from "next-intl";
import {
+ AdditionalPurchaseBanner,
ProductSelectionProvider,
Progress,
- VideoGuidesBanner,
VideoGuidesButton,
VideoGuidesOffers,
VideoGuidesOffersSkeleton,
+ useMultiPageNavigationContext,
} from "@/components/domains/additional-purchases";
import { Typography } from "@/components/ui";
@@ -15,11 +18,20 @@ import styles from "./VideoGuidesPage.module.scss";
export default function VideoGuidesPage() {
const t = useTranslations("AdditionalPurchases.video-guides");
+ const { navigation } = useMultiPageNavigationContext();
+
+ // Получаем названия всех страниц для прогресса
+ const progressItems = navigation.data.map((item: any) => {
+ return item.title || item.type || "";
+ });
return (
-
-
+
+
{t("title")}
diff --git a/src/components/domains/additional-purchases/index.ts b/src/components/domains/additional-purchases/index.ts
index d71789b..2bd3916 100644
--- a/src/components/domains/additional-purchases/index.ts
+++ b/src/components/domains/additional-purchases/index.ts
@@ -2,6 +2,7 @@ export { default as AddConsultantButton } from "./AddConsultantButton/AddConsult
export { default as AddConsultantPage } from "./AddConsultantPage/AddConsultantPage";
export { default as AddGuidesButton } from "./AddGuidesButton/AddGuidesButton";
export { default as AddGuidesPage } from "./AddGuidesPage/AddGuidesPage";
+export { default as AdditionalPurchaseBanner } from "./AdditionalPurchaseBanner/AdditionalPurchaseBanner";
export { default as Caution } from "./Caution/Caution";
export { default as ConsultationTable } from "./ConsultationTable/ConsultationTable";
export {
diff --git a/src/entities/session/funnel/types.ts b/src/entities/session/funnel/types.ts
index 9231dcd..3735dda 100644
--- a/src/entities/session/funnel/types.ts
+++ b/src/entities/session/funnel/types.ts
@@ -35,6 +35,7 @@ export const FunnelPaymentPlacementSchema = z.object({
variants: z.array(FunnelPaymentVariantSchema).optional(),
paymentUrl: z.string().optional(),
type: z.string().optional(),
+ title: z.string().optional(),
});
export const FunnelSchema = z.object({
diff --git a/src/hooks/multiPages/useMultiPageNavigation.ts b/src/hooks/multiPages/useMultiPageNavigation.ts
index c1680b8..fcb5919 100644
--- a/src/hooks/multiPages/useMultiPageNavigation.ts
+++ b/src/hooks/multiPages/useMultiPageNavigation.ts
@@ -16,6 +16,7 @@ interface PageNavigationOptions {
}
interface PageNavigationReturn {
+ data: T[];
currentItem: T | undefined;
currentIndex: number;
isFirst: boolean;
@@ -124,6 +125,7 @@ export function useMultiPageNavigation({
return useMemo(
() => ({
+ data,
currentItem,
nextItem,
currentIndex,
@@ -141,6 +143,7 @@ export function useMultiPageNavigation({
totalPages,
}),
[
+ data,
currentItem,
nextItem,
currentIndex,