From fbd57830612fe4e85dce356e25e404f3368e3d33 Mon Sep 17 00:00:00 2001 From: Nastya Date: Sun, 18 Aug 2024 07:18:59 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=BF=20=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=84=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/tariff.ts | 25 ++ .../IntegrationsModal/Amo/index.tsx | 55 ++-- src/pages/Landing/images/icons/CloseIcon.tsx | 8 +- src/pages/Tariffs/ModalRequestCreate.tsx | 260 ++++++++++++++++++ src/pages/Tariffs/Tabs.tsx | 43 ++- src/pages/Tariffs/Tariffs.tsx | 99 ++++--- src/pages/Tariffs/components/NavCard.tsx | 38 +++ src/pages/Tariffs/pages/HideLogo.tsx | 0 src/pages/Tariffs/pages/Other.tsx | 95 +++++++ src/pages/Tariffs/tariffsUtils/TariffCard.tsx | 23 +- .../tariffsUtils/createTariffElements.tsx | 4 +- src/pages/Tariffs/types.ts | 1 + src/utils/parse-error.ts | 3 + 13 files changed, 570 insertions(+), 84 deletions(-) create mode 100644 src/pages/Tariffs/ModalRequestCreate.tsx create mode 100644 src/pages/Tariffs/components/NavCard.tsx create mode 100644 src/pages/Tariffs/pages/HideLogo.tsx create mode 100644 src/pages/Tariffs/pages/Other.tsx create mode 100644 src/pages/Tariffs/types.ts diff --git a/src/api/tariff.ts b/src/api/tariff.ts index 0ddaceee..a1b4ea3d 100644 --- a/src/api/tariff.ts +++ b/src/api/tariff.ts @@ -21,3 +21,28 @@ export const getTariffs = async ( return [null, `Ошибка при получении списка тарифов. ${error}`]; } }; + +import axios from "axios"; + + +const apiUrl = process.env.REACT_APP_DOMAIN + "/requestquiz"; + +export async function sendContactFormRequest(body: { + contact: string; + whoami: string; +}) { + try { + const a = await axios(apiUrl + "/callme", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + data: body, + }); + return [a]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка при отправке запроса. ${error}`]; + } +} \ No newline at end of file diff --git a/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx b/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx index 3ef074bb..3216435f 100644 --- a/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx +++ b/src/pages/IntegrationsPage/IntegrationsModal/Amo/index.tsx @@ -81,39 +81,38 @@ export const AmoCRMModal: FC = ({ isModalOpen, handleClo }} > - - - Интеграция с {companyName ? companyName : "партнером"} - - - - - + + Интеграция с {companyName ? companyName : "партнером"} + + + + + ; +} +export default function CloseIcon({ sx }: Props) { const location = useLocation(); return ( void +} + + +interface Values { + contact: string; + dogiebusiness: string; + imagination: string; + name: string; + time: Moment | null; +} +const initialValues: Values = { + contact: "",//phone number + // whoami: {}, + dogiebusiness: "", + imagination: "", + name: "", + time: null +}; + +interface FP { + title: string + desc?: string + placeholder: string + value: string + onChange: any + rows?: number +} + +const Field = ({ + title, + desc, + placeholder, + value, + onChange, + rows, +}: FP) => { + return ( + + {title} + {desc && {desc}} + + + ) +} + +export const ModalRequestCreate = ({ + open, + onClose +}: Props) => { + const theme = useTheme() + const isMobile = useMediaQuery(theme.breakpoints.down(650)); + + + return ( + + + + + + Заполните форму, чтобы оставить заявку на создание квиза + + + + + + + + { + if (values.contact.length < 8) return enqueueSnackbar("Пожалуйста, оставьте контактные данные") + const resp = await sendContactFormRequest({ + contact: values.contact, + whoami: JSON.stringify({ + dogiebusiness: values.dogiebusiness, + imagination: values.imagination, + name: values.name, + time: moment(values.time).format("hh:mm") + }) + }) + console.log(resp) + if (resp[0]?.status === 200) { + enqueueSnackbar("Запрос успешно отправлен") + onClose() + } + if (resp[1]) { + enqueueSnackbar(resp[1]) + } + }} + > + {({ values, isSubmitting, setFieldValue }) => (<> +
+ setFieldValue("name", target.value)} + + /> + setFieldValue("dogiebusiness", target.value)} + + /> + setFieldValue("contact", target.value)} + desc="(Telegram, WhatsApp, номер телефона)" + /> + setFieldValue("imagination", target.value)} + rows={2} + /> + + + Во сколько вам можно позвонить? + Москва (GMT+3) + setFieldValue("time", e)} + views={['hours', 'minutes']} format="hh:mm" + ampm={false} + /> + + + + + + + +
+ )} +
+
+
+
+ ) +} diff --git a/src/pages/Tariffs/Tabs.tsx b/src/pages/Tariffs/Tabs.tsx index 005e8640..bcfeec11 100644 --- a/src/pages/Tariffs/Tabs.tsx +++ b/src/pages/Tariffs/Tabs.tsx @@ -4,7 +4,7 @@ import { CustomTab } from "./CustomTab"; type TabsProps = { names: string[]; items: string[]; - selectedItem: "day" | "count" | "dop"; + selectedItem: "day" | "count" | "dop" | "hide" | "create"; setSelectedItem: (num: "day" | "count" | "dop") => void; }; @@ -25,7 +25,46 @@ export const Tabs = ({ scrollButtons={false} > {items.map((item, index) => ( - + ))} ); diff --git a/src/pages/Tariffs/Tariffs.tsx b/src/pages/Tariffs/Tariffs.tsx index 1660f131..b100d181 100644 --- a/src/pages/Tariffs/Tariffs.tsx +++ b/src/pages/Tariffs/Tariffs.tsx @@ -38,6 +38,8 @@ import { getUser } from "@api/user"; import { getTariffs } from "@api/tariff"; import type { Discount } from "@model/discounts"; +import { Other } from "./pages/Other"; +import { ModalRequestCreate } from "./ModalRequestCreate"; const StepperText: Record = { day: "Тарифы на время", @@ -46,6 +48,7 @@ const StepperText: Record = { }; function TariffPage() { + const userPrivilegies = useUserStore(store => store.userAccount?.privileges); const theme = useTheme(); const token = useToken(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); @@ -55,11 +58,10 @@ function TariffPage() { const [tariffs, setTariffs] = useState([]); const [user, setUser] = useState(); const [discounts, setDiscounts] = useState([]); + const [isRequestCreate, setIsRequestCreate] = useState(false); const [openModal, setOpenModal] = useState({}); const { cashString, cashCop, cashRub } = useWallet(); - const [selectedItem, setSelectedItem] = useState<"count" | "day" | "dop">( - "day", - ); + const [selectedItem, setSelectedItem] = useState("day"); const { isTestServer } = useDomainDefine(); const [promocodeField, setPromocodeField] = useState(""); @@ -174,15 +176,7 @@ function TariffPage() { ); }); - const filteredBadgeTariffs = tariffs.filter((tariff) => { - return ( - tariff.privileges[0].serviceKey === "squiz" && - !tariff.isDeleted && - !tariff.isCustom && - tariff.privileges[0].privilegeId === "squizHideBadge" && - tariff.privileges[0]?.type === "day" - ); - }); + const filteredBaseTariffs = filteredTariffs.filter((tariff) => { return tariff.privileges[0].privilegeId !== "squizHideBadge"; }); @@ -215,6 +209,10 @@ function TariffPage() { } } + const startRequestCreate = () => { + setIsRequestCreate(true) + } + return ( <> setSelectedItem("dop")} /> @@ -318,29 +316,29 @@ function TariffPage() { discounts, openModalHC, )} - {selectedItem === "dop" && ( - <> - Убрать логотип "PenaQuiz" - - {createTariffElements( - filteredBadgeTariffs, - false, - user, - discounts, - openModalHC, - )} - - - )} + {(selectedItem === "dop" || selectedItem === "hide" || selectedItem === "create") + && ( + setSelectedItem("hide") + }, + { + title: "Создать квиз на заказ", + onClick: () => setSelectedItem("create") + }, + ]} + + tariffs={tariffs} + user={user} + discounts={discounts} + openModalHC={openModalHC} + userPrivilegies={userPrivilegies} + startRequestCreate={startRequestCreate} + /> + )} 0} @@ -373,6 +371,7 @@ function TariffPage() { + setIsRequestCreate(false)} /> ); } @@ -383,7 +382,7 @@ export const Tariffs = withErrorBoundary(TariffPage, { Ошибка загрузки тарифов ), - onError: () => {}, + onError: () => { }, }); const LoadingPage = () => ( @@ -426,20 +425,20 @@ export const inCart = () => { const outCart = (cart: string[]) => { //Сделаем муторно и подольше, зато при прерывании сессии данные потеряются минимально if (cart.length > 0) { - cart.forEach(async (id: string) => { - const [_, deleteError] = await cartApi.delete(id); + cart.forEach(async (id: string) => { + const [_, deleteError] = await cartApi.delete(id); - if (deleteError) { - console.error(deleteError); + if (deleteError) { + console.error(deleteError); - return; - } + return; + } - let saveCart = JSON.parse(localStorage.getItem("saveCart") || "[]") || []; - if (!Array.isArray(saveCart)) saveCart = [] - saveCart = saveCart.push(id); - localStorage.setItem("saveCart", JSON.stringify(saveCart)); - }); + let saveCart = JSON.parse(localStorage.getItem("saveCart") || "[]") || []; + if (!Array.isArray(saveCart)) saveCart = [] + saveCart = saveCart.push(id); + localStorage.setItem("saveCart", JSON.stringify(saveCart)); + }); } }; diff --git a/src/pages/Tariffs/components/NavCard.tsx b/src/pages/Tariffs/components/NavCard.tsx new file mode 100644 index 00000000..74a6ed7f --- /dev/null +++ b/src/pages/Tariffs/components/NavCard.tsx @@ -0,0 +1,38 @@ +import SimpleArrowDown from "@/ui_kit/SimpleArrowDown"; +import { Box, ButtonBase, Typography } from "@mui/material" + +interface Props { + title: string; + onClick: () => void; +} + +export const NavCard = ({ + title, + onClick +}: Props) => { + + return ( + + {title} + + + + ) +} \ No newline at end of file diff --git a/src/pages/Tariffs/pages/HideLogo.tsx b/src/pages/Tariffs/pages/HideLogo.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/Tariffs/pages/Other.tsx b/src/pages/Tariffs/pages/Other.tsx new file mode 100644 index 00000000..a9a7dec7 --- /dev/null +++ b/src/pages/Tariffs/pages/Other.tsx @@ -0,0 +1,95 @@ +import { Box, useMediaQuery, useTheme } from "@mui/material" +import { NavCard } from "../components/NavCard" +import { createTariffElements } from "../tariffsUtils/createTariffElements" + +interface Props { + content: { + title: string, + onClick: () => void + }[] + selectedItem: TypePages +} + +export const Other = ({ + content, + selectedItem, + + tariffs, + user, + discounts, + openModalHC, + userPrivilegies, + startRequestCreate +}: any) => { + const theme = useTheme() + const isTablet = useMediaQuery(theme.breakpoints.down(1000)); +const sendRequestToCreate = userPrivilegies?.quizManual.amount > 0 ? startRequestCreate : undefined +console.log("sendRequestToCreate") +console.log(sendRequestToCreate) + switch (selectedItem) { + case "hide": + const filteredBadgeTariffs = tariffs.filter((tariff) => { + return ( + tariff.privileges[0].serviceKey === "squiz" && + !tariff.isDeleted && + !tariff.isCustom && + tariff.privileges[0].privilegeId === "squizHideBadge" && + tariff.privileges[0]?.type === "day" + ); + }); + return + {createTariffElements( + filteredBadgeTariffs, + false, + user, + discounts, + openModalHC, + )} + + case "create": + const filteredCreateTariffs = tariffs.filter((tariff) => { + return ( + tariff.privileges[0].serviceKey === "squiz" && + !tariff.isDeleted && + !tariff.isCustom && + tariff.privileges[0].privilegeId === "quizManual" && + tariff.privileges[0]?.type === "count" + ); + }); + return + {createTariffElements( + filteredCreateTariffs, + false, + user, + discounts, + openModalHC, + sendRequestToCreate + )} + + default: + return + {content.map(data => )} + + } +} \ No newline at end of file diff --git a/src/pages/Tariffs/tariffsUtils/TariffCard.tsx b/src/pages/Tariffs/tariffsUtils/TariffCard.tsx index 205e7a23..165e144f 100644 --- a/src/pages/Tariffs/tariffsUtils/TariffCard.tsx +++ b/src/pages/Tariffs/tariffsUtils/TariffCard.tsx @@ -23,6 +23,7 @@ interface Props { text?: string; }; price?: ReactNode; + sendRequestToCreate?: () => void } export default function TariffCard({ @@ -33,6 +34,7 @@ export default function TariffCard({ price, buttonProps, discount, + sendRequestToCreate, }: Props) { text = Array.isArray(text) ? text : [text]; const theme = useTheme(); @@ -132,12 +134,20 @@ export default function TariffCard({ ))}
+ + {buttonProps && ( + )} +
); } diff --git a/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx b/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx index f0ea9d54..3d58e531 100644 --- a/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx +++ b/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx @@ -11,6 +11,7 @@ export const createTariffElements = ( user: any, discounts: any, onclick: any, + sendRequestToCreate?: () => void ) => { const tariffElements = filteredTariffs .filter((tariff) => tariff.privileges.length > 0) @@ -43,13 +44,14 @@ export const createTariffElements = ( /> } buttonProps={{ - text: "Выбрать", + text: "Купить", onClick: () => onclick({ id: tariff._id, price: Math.trunc(priceAfterDiscounts) / 100, }), }} + sendRequestToCreate={sendRequestToCreate} headerText={tariff.name} text={tariff.description} price={ diff --git a/src/pages/Tariffs/types.ts b/src/pages/Tariffs/types.ts new file mode 100644 index 00000000..fd6c0dea --- /dev/null +++ b/src/pages/Tariffs/types.ts @@ -0,0 +1 @@ +type TypePages = "count" | "day" | "dop" | "hide" | "create" \ No newline at end of file diff --git a/src/utils/parse-error.ts b/src/utils/parse-error.ts index af94459d..7191006d 100644 --- a/src/utils/parse-error.ts +++ b/src/utils/parse-error.ts @@ -70,6 +70,9 @@ export const parseAxiosError = (nativeError: unknown): [string, number?] => { case 403: return ["Доступ ограничен.", error.status]; + + case 429: + return ["Слишком частые запросы", error.status]; case 401: return ["Ошибка авторизации.", error.status]; From 5a029c01a9e0030902429256115da29df0166f8c Mon Sep 17 00:00:00 2001 From: Nastya Date: Sun, 18 Aug 2024 12:24:27 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D1=82=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D1=83=D0=B4=D0=B0=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B8=20=D0=BD=D0=B5=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=BA=D1=83=D0=BF?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=82=D0=B0=D1=80=D0=B8=D1=84=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5.=20?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=84=D0=BE=20=D0=BE=D0=B1=20=D1=8D=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Tariffs/Tariffs.tsx | 14 +++++++++++ src/pages/Tariffs/pages/Other.tsx | 6 ++--- .../tariffsUtils/createTariffElements.tsx | 16 +++++++----- src/stores/cc.ts | 25 +++++++++++++++++++ src/utils/hooks/useAutoPay.ts | 10 +++++--- 5 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 src/stores/cc.ts diff --git a/src/pages/Tariffs/Tariffs.tsx b/src/pages/Tariffs/Tariffs.tsx index b100d181..d95deb8d 100644 --- a/src/pages/Tariffs/Tariffs.tsx +++ b/src/pages/Tariffs/Tariffs.tsx @@ -40,6 +40,7 @@ import { getTariffs } from "@api/tariff"; import type { Discount } from "@model/discounts"; import { Other } from "./pages/Other"; import { ModalRequestCreate } from "./ModalRequestCreate"; +import { cancelCC, useCC } from "@/stores/cc"; const StepperText: Record = { day: "Тарифы на время", @@ -64,6 +65,7 @@ function TariffPage() { const [selectedItem, setSelectedItem] = useState("day"); const { isTestServer } = useDomainDefine(); const [promocodeField, setPromocodeField] = useState(""); + const cc = useCC(store => store.cc) const getTariffsList = async (): Promise => { const tariffsList: Tariff[] = []; @@ -116,6 +118,12 @@ function TariffPage() { get(); }, []); + useEffect(() => { + if (cc) { + setIsRequestCreate(true) + cancelCC() + } + }, []) if (!user || !tariffs || !discounts) return ; const openModalHC = (tariffInfo: any) => setOpenModal(tariffInfo); @@ -144,6 +152,7 @@ function TariffPage() { let cashDif = Number(payError.split(":")[1]); var link = document.createElement("a"); link.href = `https://${isTestServer ? "s" : ""}hub.pena.digital/quizpayment?action=squizpay&dif=${cashDif}&data=${token}&userid=${userId}`; + if (cc) link.href = link.href + "cc=true"//после покупки тарифа и возвращения будем знать что надо открыть модалку document.body.appendChild(link); link.click(); return; @@ -161,6 +170,9 @@ function TariffPage() { Number(data.wallet.cash) / 100, ); + //cc - пометка что мы хотим заказать квиз. Если хотели, то открываем модалку + if (cc) setIsRequestCreate(true) + cancelCC()//но в любом случае в конце перехотим enqueueSnackbar("Тариф успешно приобретён"); //Развращаем товары в корзину @@ -213,6 +225,7 @@ function TariffPage() { setIsRequestCreate(true) } + return ( <> { if (deleteError) { console.error(deleteError); + cancelCC()//мы хотели открыть модалку после покупки тарифа на создание квиза, но не вышло и модалку не откроем return; } diff --git a/src/pages/Tariffs/pages/Other.tsx b/src/pages/Tariffs/pages/Other.tsx index a9a7dec7..20aafd70 100644 --- a/src/pages/Tariffs/pages/Other.tsx +++ b/src/pages/Tariffs/pages/Other.tsx @@ -24,8 +24,7 @@ export const Other = ({ const theme = useTheme() const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const sendRequestToCreate = userPrivilegies?.quizManual.amount > 0 ? startRequestCreate : undefined -console.log("sendRequestToCreate") -console.log(sendRequestToCreate) + switch (selectedItem) { case "hide": const filteredBadgeTariffs = tariffs.filter((tariff) => { @@ -79,7 +78,8 @@ console.log(sendRequestToCreate) user, discounts, openModalHC, - sendRequestToCreate + sendRequestToCreate, + true )} default: diff --git a/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx b/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx index 3d58e531..bd3e0b79 100644 --- a/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx +++ b/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx @@ -4,6 +4,7 @@ import NumberIcon from "@icons/NumberIcon"; import { currencyFormatter } from "./currencyFormatter"; import FreeTariffCard from "./FreeTariffCard"; import { Typography } from "@mui/material"; +import { startCC } from "@/stores/cc"; export const createTariffElements = ( filteredTariffs: Tariff[], @@ -11,7 +12,8 @@ export const createTariffElements = ( user: any, discounts: any, onclick: any, - sendRequestToCreate?: () => void + sendRequestToCreate?: () => void, + cc?: boolean ) => { const tariffElements = filteredTariffs .filter((tariff) => tariff.privileges.length > 0) @@ -31,9 +33,9 @@ export const createTariffElements = ( discount={ priceBeforeDiscounts - priceAfterDiscounts ? `${( - (priceBeforeDiscounts - priceAfterDiscounts) / - (Math.trunc(priceBeforeDiscounts) / 100) - ).toFixed(0)}%` + (priceBeforeDiscounts - priceAfterDiscounts) / + (Math.trunc(priceBeforeDiscounts) / 100) + ).toFixed(0)}%` : "" } icon={ @@ -45,11 +47,13 @@ export const createTariffElements = ( } buttonProps={{ text: "Купить", - onClick: () => + onClick: () => { + if (cc) startCC() //пометка что это запрос на создание квиза onclick({ id: tariff._id, price: Math.trunc(priceAfterDiscounts) / 100, - }), + }) + } }} sendRequestToCreate={sendRequestToCreate} headerText={tariff.name} diff --git a/src/stores/cc.ts b/src/stores/cc.ts new file mode 100644 index 00000000..dd794521 --- /dev/null +++ b/src/stores/cc.ts @@ -0,0 +1,25 @@ +import { create } from "zustand"; +import { devtools } from "zustand/middleware"; + +interface CartStore { + cc: boolean +} +const initialState: CartStore = { + cc: false +} + +//Была попытка оплатить корзину. Тут записанна недостающая сумма. +export const useCC = create()( + devtools( + (get, set) => initialState, + { + name: "cc", + enabled: process.env.NODE_ENV === "development", + trace: true, + actionsBlacklist: "rejected", + } + ) +); + +export const cancelCC = () => useCC.setState({ cc: false }); +export const startCC = () => useCC.setState({ cc: true }); \ No newline at end of file diff --git a/src/utils/hooks/useAutoPay.ts b/src/utils/hooks/useAutoPay.ts index c357e515..26605765 100644 --- a/src/utils/hooks/useAutoPay.ts +++ b/src/utils/hooks/useAutoPay.ts @@ -3,8 +3,9 @@ import { useUserStore } from "@/stores/user"; import moment from "moment"; import { enqueueSnackbar } from "notistack"; import { useEffect } from "react"; -import { useNavigate, useSearchParams } from "react-router-dom"; +import { redirect, useNavigate, useSearchParams } from "react-router-dom"; import { calcTimeOfReadyPayCart, cancelPayCartProcess, startPayCartProcess, useNotEnoughMoneyAmount } from "@/stores/notEnoughMoneyAmount"; +import { startCC } from "@/stores/cc"; export const useAfterPay = () => { const navigate = useNavigate(); @@ -15,6 +16,7 @@ export const useAfterPay = () => { const purpose = searchParams.get("purpose"); const paymentUserId = searchParams.get("userid"); + const currentCC = searchParams.get("cc"); useEffect(() => { @@ -22,18 +24,20 @@ export const useAfterPay = () => { if (paymentUserId && paymentUserId === userId) { if (purpose === "paycart") { - setSearchParams({}, { replace: true }); + setSearchParams({}, { replace: true }); + if (currentCC) { startCC() } (async () => { //Проверяем можем ли мы оплатить корзину здесь и сейчас const [, payCartError] = await cartApi.pay(); - console.log("попытка оплаты не удалась") if (payCartError) { + console.log("попытка оплаты не удалась") //Не получилось купить корзину. Ставим флаг, что сайт в состоянии ожидания пополнения счёта для оплаты startPayCartProcess(paymentUserId) } else { enqueueSnackbar("Товары успешно приобретены") + if (currentCC) navigate("tariffs") cancelPayCartProcess() } })()