diff --git a/src/api/tariff.ts b/src/api/tariff.ts index a0be6e70..48efae84 100644 --- a/src/api/tariff.ts +++ b/src/api/tariff.ts @@ -1,13 +1,11 @@ import { makeRequest } from "@api/makeRequest"; - import { parseAxiosError } from "@utils/parse-error"; - import type { GetTariffsResponse } from "@frontend/kitui"; const API_URL = `${process.env.REACT_APP_DOMAIN}/strator/tariff`; export const getTariffs = async ( - page: number, + page: number = 1, ): Promise<[GetTariffsResponse | null, string?]> => { try { const tariffs = await makeRequest({ @@ -17,7 +15,6 @@ export const getTariffs = async ( return [tariffs]; } catch (nativeError) { const [error] = parseAxiosError(nativeError); - return [null, `Ошибка при получении списка тарифов. ${error}`]; } }; diff --git a/src/api/tariffs.ts b/src/api/tariffs.ts new file mode 100644 index 00000000..c8f86a9f --- /dev/null +++ b/src/api/tariffs.ts @@ -0,0 +1,9 @@ +import { makeRequest } from '@utils/makeRequest'; +import type { GetTariffsResponse } from '@/model/tariff'; + +export const getTariffs = async (): Promise<[GetTariffsResponse | null, string?]> => { + return makeRequest({ + url: `${process.env.REACT_APP_DOMAIN}/tariffs`, + method: 'GET' + }); +}; \ No newline at end of file diff --git a/src/pages/PersonalizationAI/PayModal.tsx b/src/pages/PersonalizationAI/PayModal.tsx new file mode 100644 index 00000000..5780be81 --- /dev/null +++ b/src/pages/PersonalizationAI/PayModal.tsx @@ -0,0 +1,59 @@ +import { useUserStore } from "@/stores/user"; +import { Box, Button, Modal, Typography } from "@mui/material" + +interface Props { + isOpen: boolean; + openCloseHC: (b: boolean) => void; +} + +export const PayModal = ({ + isOpen, + openCloseHC +}: Props) => { + const privilegesOfUser = useUserStore((state) => state.userAccount?.privileges); + const user = useUserStore((state) => state.customerAccount); //у него есть wallet + + + + + + + + + + + + + return ( + openCloseHC(false)} + aria-labelledby="modal-modal-title" + aria-describedby="modal-modal-description" + > + + Данная услуга предоставляется за 500 рублей/опрос. Готовы оплатить? + + + + + + ) +} \ No newline at end of file diff --git a/src/pages/Tariffs/Tariffs.tsx b/src/pages/Tariffs/Tariffs.tsx index 49b63c1e..005bea37 100644 --- a/src/pages/Tariffs/Tariffs.tsx +++ b/src/pages/Tariffs/Tariffs.tsx @@ -1,10 +1,6 @@ -import { logout } from "@api/auth"; import { activatePromocode } from "@api/promocode"; -import type { Tariff } from "@frontend/kitui"; import { useToken } from "@frontend/kitui"; -import { makeRequest } from "@api/makeRequest"; import ArrowLeft from "@icons/questionsPage/arrowLeft"; -import type { GetTariffsResponse } from "@model/tariff"; import { Box, Button, @@ -12,15 +8,11 @@ import { IconButton, Modal, Paper, - Select, Typography, useMediaQuery, useTheme, - MenuItem, } from "@mui/material"; -import { clearQuizData } from "@root/quizes/store"; -import { cleanAuthTicketData } from "@root/ticket"; -import { clearUserData, useUserStore } from "@root/user"; +import { useUserStore } from "@root/user"; import { LogoutButton } from "@ui_kit/LogoutButton"; import { useDomainDefine } from "@utils/hooks/useDomainDefine"; import { enqueueSnackbar } from "notistack"; @@ -34,16 +26,14 @@ import { createTariffElements } from "./tariffsUtils/createTariffElements"; import { currencyFormatter } from "./tariffsUtils/currencyFormatter"; import { useWallet, setCash } from "@root/cash"; import { handleLogoutClick } from "@utils/HandleLogoutClick"; -import { getDiscounts } from "@api/discounts"; import { cartApi } from "@api/cart"; -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"; import { cancelCC, useCC } from "@/stores/cc"; import { NavSelect } from "./NavSelect"; +import { useTariffs } from '@utils/hooks/useTariffs'; +import { useDiscounts } from '@utils/hooks/useDiscounts'; const StepperText: Record = { day: "Тарифы на время", @@ -59,9 +49,11 @@ function TariffPage() { const isMobile = useMediaQuery(theme.breakpoints.down(600)); const userId = useUserStore((state) => state.userId); const navigate = useNavigate(); - const [tariffs, setTariffs] = useState([]); - const [user, setUser] = useState(); - const [discounts, setDiscounts] = useState([]); + const user = useUserStore((state) => state.customerAccount); + const a = useUserStore((state) => state.customerAccount); //c wallet + console.log("________________34563875693785692576_____________USERRRRRRR") + console.log(a) + const { data: discounts } = useDiscounts(userId); const [isRequestCreate, setIsRequestCreate] = useState(false); const [openModal, setOpenModal] = useState({}); const { cashString, cashCop, cashRub } = useWallet(); @@ -70,56 +62,20 @@ function TariffPage() { const [promocodeField, setPromocodeField] = useState(""); const cc = useCC(store => store.cc) - const getTariffsList = async (): Promise => { - const tariffsList: Tariff[] = []; - let page = 2 - const [tariffsResponse, tariffsResponseError] = await getTariffs(page - 1); -console.log(tariffsResponse) - if (tariffsResponseError || !tariffsResponse) { - return tariffsList; - } - tariffsList.push(...tariffsResponse.tariffs); + const { data: tariffs, error: tariffsError, isLoading: tariffsLoading } = useTariffs(); - for (page; page <= tariffsResponse.totalPages; page += 1) { - const [tariffsResult] = await getTariffs(page); - - if (tariffsResult) { - tariffsList.push(...tariffsResult.tariffs); - } - } - - return tariffsList; - }; +console.log("________34563875693785692576_____ TARIFFS") +console.log(tariffs) useEffect(() => { - const get = async () => { - const [user, userError] = await getUser(); - - if (userError) { - return; - } - - const tariffsList = await getTariffsList(); - - if (userId) { - const [discounts] = await getDiscounts(userId); - - if (discounts?.length) { - setDiscounts(discounts); - } - } - - setUser(user); - setTariffs(tariffsList); - + if (a) { let cs = currencyFormatter.format(Number(user.wallet.cash) / 100); let cc = Number(user.wallet.cash); let cr = Number(user.wallet.cash) / 100; setCash(cs, cc, cr); - }; - get(); - }, []); + } + }, [a]); useEffect(() => { if (cc) { @@ -203,32 +159,17 @@ console.log(tariffsResponse) if (error) { enqueueSnackbar(error); - return; } enqueueSnackbar(greetings); - - if (!userId) { - return; - } - - const [discounts, discountsError] = await getDiscounts(userId); - - if (discountsError) { - throw new Error(discountsError); - } - - if (discounts?.length) { - setDiscounts(discounts); - } } const startRequestCreate = () => { setIsRequestCreate(true) } - + if (!a) return null; return ( <> setSelectedItem("hide") }, { diff --git a/src/utils/hooks/useDiscounts.ts b/src/utils/hooks/useDiscounts.ts new file mode 100644 index 00000000..21c71ed9 --- /dev/null +++ b/src/utils/hooks/useDiscounts.ts @@ -0,0 +1,10 @@ +import useSWR from 'swr'; +import { getDiscounts } from '@api/discounts'; +import type { Discount } from '@model/discounts'; + +export const useDiscounts = (userId: string | null) => { + return useSWR( + userId ? `discounts/${userId}` : null, + () => getDiscounts(userId!).then(([data]) => data) + ); +}; \ No newline at end of file diff --git a/src/utils/hooks/useTariffs.ts b/src/utils/hooks/useTariffs.ts new file mode 100644 index 00000000..fd1097d2 --- /dev/null +++ b/src/utils/hooks/useTariffs.ts @@ -0,0 +1,19 @@ +import useSWR from 'swr'; +import { getTariffs } from '@/api/tariff'; +import type { GetTariffsResponse, Tariff } from '@frontend/kitui'; + +export const useTariffs = () => { + const { data, error, isLoading } = useSWR('tariffs', async () => { + const [response] = await getTariffs(); + if (response?.tariffs) { + return response.tariffs; + } + return []; + }); + + return { + data, + error, + isLoading + }; +}; \ No newline at end of file diff --git a/src/utils/hooks/useUser.ts b/src/utils/hooks/useUser.ts new file mode 100644 index 00000000..6e59ab31 --- /dev/null +++ b/src/utils/hooks/useUser.ts @@ -0,0 +1,7 @@ +import useSWR from 'swr'; +import { getUser } from '@api/user'; +import type { User } from '@frontend/kitui'; + +export const useUser = () => { + return useSWR('user', getUser); +}; \ No newline at end of file