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 type { Tariff } from "@frontend/kitui";
|
||||||
import { clearAuthToken, makeRequest, useToken } 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 type { GetTariffsResponse } from "@model/tariff";
|
||||||
import { logout } from "@api/auth";
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
@ -16,20 +15,21 @@ import {
|
|||||||
useMediaQuery,
|
useMediaQuery,
|
||||||
useTheme,
|
useTheme,
|
||||||
} from "@mui/material";
|
} 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 { 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> = {
|
const StepperText: Record<string, string> = {
|
||||||
count: "Тарифы на объём",
|
count: "Тарифы на объём",
|
||||||
@ -43,13 +43,11 @@ function TariffPage() {
|
|||||||
const isTablet = useMediaQuery(theme.breakpoints.down(1000));
|
const isTablet = useMediaQuery(theme.breakpoints.down(1000));
|
||||||
const isMobile = useMediaQuery(theme.breakpoints.down(600));
|
const isMobile = useMediaQuery(theme.breakpoints.down(600));
|
||||||
const userId = useUserStore((state) => state.userId);
|
const userId = useUserStore((state) => state.userId);
|
||||||
const location = useLocation();
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
const cartTariffs = useCartTariffs();
|
||||||
const [tariffs, setTariffs] = useState<Tariff[]>([]);
|
const [tariffs, setTariffs] = useState<Tariff[]>([]);
|
||||||
const [user, setUser] = useState();
|
const [user, setUser] = useState();
|
||||||
const [discounts, setDiscounts] = useState();
|
const [discounts, setDiscounts] = useState();
|
||||||
const [cartTariffMap, setCartTariffMap] = useState();
|
|
||||||
const [openModal, setOpenModal] = useState({});
|
const [openModal, setOpenModal] = useState({});
|
||||||
const [cash, setCash] = useState("0");
|
const [cash, setCash] = useState("0");
|
||||||
const [selectedItem, setSelectedItem] = useState<"count" | "day">("count");
|
const [selectedItem, setSelectedItem] = useState<"count" | "day">("count");
|
||||||
@ -280,6 +278,7 @@ function TariffPage() {
|
|||||||
user,
|
user,
|
||||||
discounts,
|
discounts,
|
||||||
openModalHC,
|
openModalHC,
|
||||||
|
cartTariffs ?? [],
|
||||||
)}
|
)}
|
||||||
{selectedItem === "count" &&
|
{selectedItem === "count" &&
|
||||||
createTariffElements(
|
createTariffElements(
|
||||||
@ -288,6 +287,7 @@ function TariffPage() {
|
|||||||
user,
|
user,
|
||||||
discounts,
|
discounts,
|
||||||
openModalHC,
|
openModalHC,
|
||||||
|
cartTariffs ?? [],
|
||||||
)}
|
)}
|
||||||
{selectedItem === "dop" && (
|
{selectedItem === "dop" && (
|
||||||
<>
|
<>
|
||||||
@ -309,6 +309,7 @@ function TariffPage() {
|
|||||||
user,
|
user,
|
||||||
discounts,
|
discounts,
|
||||||
openModalHC,
|
openModalHC,
|
||||||
|
cartTariffs ?? [],
|
||||||
)}
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
</>
|
</>
|
||||||
|
@ -11,6 +11,7 @@ export const createTariffElements = (
|
|||||||
user: any,
|
user: any,
|
||||||
discounts: any,
|
discounts: any,
|
||||||
onclick: any,
|
onclick: any,
|
||||||
|
cartTariffs: Tariff[],
|
||||||
) => {
|
) => {
|
||||||
const tariffElements = filteredTariffs
|
const tariffElements = filteredTariffs
|
||||||
.filter((tariff) => tariff.privileges.length > 0)
|
.filter((tariff) => tariff.privileges.length > 0)
|
||||||
@ -19,7 +20,7 @@ export const createTariffElements = (
|
|||||||
tariff,
|
tariff,
|
||||||
discounts,
|
discounts,
|
||||||
user.wallet.spent,
|
user.wallet.spent,
|
||||||
[],
|
cartTariffs,
|
||||||
user.isUserNko,
|
user.isUserNko,
|
||||||
user.id,
|
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