вынесены запросы тарифов и привилегий в отдельный хук
This commit is contained in:
parent
87d4c9d53d
commit
5ea6d6638a
@ -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<never, GetTariffsResponse>({
|
||||
@ -17,7 +15,6 @@ export const getTariffs = async (
|
||||
return [tariffs];
|
||||
} catch (nativeError) {
|
||||
const [error] = parseAxiosError(nativeError);
|
||||
|
||||
return [null, `Ошибка при получении списка тарифов. ${error}`];
|
||||
}
|
||||
};
|
||||
|
9
src/api/tariffs.ts
Normal file
9
src/api/tariffs.ts
Normal file
@ -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<GetTariffsResponse>({
|
||||
url: `${process.env.REACT_APP_DOMAIN}/tariffs`,
|
||||
method: 'GET'
|
||||
});
|
||||
};
|
59
src/pages/PersonalizationAI/PayModal.tsx
Normal file
59
src/pages/PersonalizationAI/PayModal.tsx
Normal file
@ -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 (
|
||||
<Modal
|
||||
open={Boolean(isOpen)}
|
||||
onClose={() => openCloseHC(false)}
|
||||
aria-labelledby="modal-modal-title"
|
||||
aria-describedby="modal-modal-description"
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
position: "absolute" as "absolute",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
transform: "translate(-50%, -50%)",
|
||||
maxWidth: "620px",
|
||||
width: "100%",
|
||||
bgcolor: "background.paper",
|
||||
borderRadius: "12px",
|
||||
|
||||
boxShadow: 24,
|
||||
p: "20px",
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
alignItems: "center"
|
||||
}}
|
||||
>
|
||||
<Typography sx={{ width: "100%", textAlign: "center", mb: "25px" }}>Данная услуга предоставляется за 500 рублей/опрос. Готовы оплатить?</Typography>
|
||||
<Button variant="contained" onClick={() => openCloseHC(false)} >Нет</Button>
|
||||
<Button sx={{ mb: "20px" }} onClick={handleDelete}>Да</Button>
|
||||
</Box>
|
||||
</Modal>
|
||||
|
||||
)
|
||||
}
|
@ -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<string, string> = {
|
||||
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<Tariff[]>([]);
|
||||
const [user, setUser] = useState();
|
||||
const [discounts, setDiscounts] = useState<Discount[]>([]);
|
||||
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<string>("");
|
||||
const cc = useCC(store => store.cc)
|
||||
|
||||
const getTariffsList = async (): Promise<Tariff[]> => {
|
||||
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 (
|
||||
<>
|
||||
<Container
|
||||
@ -346,7 +287,7 @@ console.log(tariffsResponse)
|
||||
selectedItem={selectedItem}
|
||||
content={[
|
||||
{
|
||||
title: `Убрать логотип “PenaQuiz”`,
|
||||
title: `Убрать логотип "PenaQuiz"`,
|
||||
onClick: () => setSelectedItem("hide")
|
||||
},
|
||||
{
|
||||
|
10
src/utils/hooks/useDiscounts.ts
Normal file
10
src/utils/hooks/useDiscounts.ts
Normal file
@ -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<Discount[]>(
|
||||
userId ? `discounts/${userId}` : null,
|
||||
() => getDiscounts(userId!).then(([data]) => data)
|
||||
);
|
||||
};
|
19
src/utils/hooks/useTariffs.ts
Normal file
19
src/utils/hooks/useTariffs.ts
Normal file
@ -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<Tariff[]>('tariffs', async () => {
|
||||
const [response] = await getTariffs();
|
||||
if (response?.tariffs) {
|
||||
return response.tariffs;
|
||||
}
|
||||
return [];
|
||||
});
|
||||
|
||||
return {
|
||||
data,
|
||||
error,
|
||||
isLoading
|
||||
};
|
||||
};
|
7
src/utils/hooks/useUser.ts
Normal file
7
src/utils/hooks/useUser.ts
Normal file
@ -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>('user', getUser);
|
||||
};
|
Loading…
Reference in New Issue
Block a user