include cart tariffs in tariff price calculation
This commit is contained in:
parent
5384455f85
commit
53aa64e9ea
32
src/api/tariff.ts
Normal file
32
src/api/tariff.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import { Tariff, makeRequest } from "@frontend/kitui";
|
||||
|
||||
const apiUrl = process.env.REACT_APP_DOMAIN + "/strator";
|
||||
|
||||
export async function getTariffArray(tariffIds: string[] | undefined) {
|
||||
if (!tariffIds) return null;
|
||||
|
||||
const responses = await Promise.allSettled(
|
||||
tariffIds.map((tariffId) =>
|
||||
makeRequest<never, Tariff>({
|
||||
url: `${apiUrl}/tariff/${tariffId}`,
|
||||
method: "get",
|
||||
useToken: true,
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
const tariffs: Tariff[] = [];
|
||||
|
||||
responses.forEach((response) => {
|
||||
switch (response.status) {
|
||||
case "fulfilled": {
|
||||
tariffs.push(response.value);
|
||||
break;
|
||||
}
|
||||
case "rejected":
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return tariffs;
|
||||
}
|
@ -1,10 +1,9 @@
|
||||
import { Link, useLocation, useNavigate } from "react-router-dom";
|
||||
import { logout } from "@api/auth";
|
||||
import { activatePromocode } from "@api/promocode";
|
||||
import type { Tariff } from "@frontend/kitui";
|
||||
import { clearAuthToken, makeRequest, useToken } from "@frontend/kitui";
|
||||
import { useEffect, useState } from "react";
|
||||
import ArrowLeft from "@icons/questionsPage/arrowLeft";
|
||||
import type { GetTariffsResponse } from "@model/tariff";
|
||||
import { logout } from "@api/auth";
|
||||
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
@ -16,20 +15,21 @@ import {
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { enqueueSnackbar } from "notistack";
|
||||
import { withErrorBoundary } from "react-error-boundary";
|
||||
import { createTariffElements } from "./tariffsUtils/createTariffElements";
|
||||
import Logotip from "../../pages/Landing/images/icons/QuizLogo";
|
||||
import { LogoutButton } from "@ui_kit/LogoutButton";
|
||||
import { clearUserData, useUserStore } from "@root/user";
|
||||
import ArrowLeft from "@icons/questionsPage/arrowLeft";
|
||||
import { currencyFormatter } from "./tariffsUtils/currencyFormatter";
|
||||
import { Tabs } from "./Tabs";
|
||||
import { cleanAuthTicketData } from "@root/ticket";
|
||||
import { useDomainDefine } from "@utils/hooks/useDomainDefine";
|
||||
import CollapsiblePromocodeField from "./CollapsiblePromocodeField";
|
||||
import { activatePromocode } from "@api/promocode";
|
||||
import { clearQuizData } from "@root/quizes/store";
|
||||
import { cleanAuthTicketData } from "@root/ticket";
|
||||
import { clearUserData, useUserStore } from "@root/user";
|
||||
import { LogoutButton } from "@ui_kit/LogoutButton";
|
||||
import { useCartTariffs } from "@utils/hooks/useCartTariffs";
|
||||
import { useDomainDefine } from "@utils/hooks/useDomainDefine";
|
||||
import { enqueueSnackbar } from "notistack";
|
||||
import { useEffect, useState } from "react";
|
||||
import { withErrorBoundary } from "react-error-boundary";
|
||||
import { Link, useNavigate } from "react-router-dom";
|
||||
import Logotip from "../../pages/Landing/images/icons/QuizLogo";
|
||||
import CollapsiblePromocodeField from "./CollapsiblePromocodeField";
|
||||
import { Tabs } from "./Tabs";
|
||||
import { createTariffElements } from "./tariffsUtils/createTariffElements";
|
||||
import { currencyFormatter } from "./tariffsUtils/currencyFormatter";
|
||||
|
||||
const StepperText: Record<string, string> = {
|
||||
count: "Тарифы на объём",
|
||||
@ -43,13 +43,11 @@ function TariffPage() {
|
||||
const isTablet = useMediaQuery(theme.breakpoints.down(1000));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(600));
|
||||
const userId = useUserStore((state) => state.userId);
|
||||
const location = useLocation();
|
||||
const navigate = useNavigate();
|
||||
|
||||
const cartTariffs = useCartTariffs();
|
||||
const [tariffs, setTariffs] = useState<Tariff[]>([]);
|
||||
const [user, setUser] = useState();
|
||||
const [discounts, setDiscounts] = useState();
|
||||
const [cartTariffMap, setCartTariffMap] = useState();
|
||||
const [openModal, setOpenModal] = useState({});
|
||||
const [cash, setCash] = useState("0");
|
||||
const [selectedItem, setSelectedItem] = useState<"count" | "day">("count");
|
||||
@ -280,6 +278,7 @@ function TariffPage() {
|
||||
user,
|
||||
discounts,
|
||||
openModalHC,
|
||||
cartTariffs ?? [],
|
||||
)}
|
||||
{selectedItem === "count" &&
|
||||
createTariffElements(
|
||||
@ -288,6 +287,7 @@ function TariffPage() {
|
||||
user,
|
||||
discounts,
|
||||
openModalHC,
|
||||
cartTariffs ?? [],
|
||||
)}
|
||||
{selectedItem === "dop" && (
|
||||
<>
|
||||
@ -309,6 +309,7 @@ function TariffPage() {
|
||||
user,
|
||||
discounts,
|
||||
openModalHC,
|
||||
cartTariffs ?? [],
|
||||
)}
|
||||
</Box>
|
||||
</>
|
||||
|
@ -11,6 +11,7 @@ export const createTariffElements = (
|
||||
user: any,
|
||||
discounts: any,
|
||||
onclick: any,
|
||||
cartTariffs: Tariff[],
|
||||
) => {
|
||||
const tariffElements = filteredTariffs
|
||||
.filter((tariff) => tariff.privileges.length > 0)
|
||||
@ -19,7 +20,7 @@ export const createTariffElements = (
|
||||
tariff,
|
||||
discounts,
|
||||
user.wallet.spent,
|
||||
[],
|
||||
cartTariffs,
|
||||
user.isUserNko,
|
||||
user.id,
|
||||
);
|
||||
|
16
src/utils/hooks/useCartTariffs.ts
Normal file
16
src/utils/hooks/useCartTariffs.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { getTariffArray } from "@api/tariff";
|
||||
import { useUserStore } from "@root/user";
|
||||
import useSWR from "swr";
|
||||
|
||||
export function useCartTariffs() {
|
||||
const cartTariffIds = useUserStore((state) => state.customerAccount?.cart);
|
||||
const { data } = useSWR(
|
||||
["cartTariffs", cartTariffIds],
|
||||
(key) => getTariffArray(key[1]),
|
||||
{
|
||||
keepPreviousData: true,
|
||||
},
|
||||
);
|
||||
|
||||
return data;
|
||||
}
|
Loading…
Reference in New Issue
Block a user