вынесены запросы тарифов и привилегий в отдельный хук
This commit is contained in:
parent
87d4c9d53d
commit
5ea6d6638a
@ -1,13 +1,11 @@
|
|||||||
import { makeRequest } from "@api/makeRequest";
|
import { makeRequest } from "@api/makeRequest";
|
||||||
|
|
||||||
import { parseAxiosError } from "@utils/parse-error";
|
import { parseAxiosError } from "@utils/parse-error";
|
||||||
|
|
||||||
import type { GetTariffsResponse } from "@frontend/kitui";
|
import type { GetTariffsResponse } from "@frontend/kitui";
|
||||||
|
|
||||||
const API_URL = `${process.env.REACT_APP_DOMAIN}/strator/tariff`;
|
const API_URL = `${process.env.REACT_APP_DOMAIN}/strator/tariff`;
|
||||||
|
|
||||||
export const getTariffs = async (
|
export const getTariffs = async (
|
||||||
page: number,
|
page: number = 1,
|
||||||
): Promise<[GetTariffsResponse | null, string?]> => {
|
): Promise<[GetTariffsResponse | null, string?]> => {
|
||||||
try {
|
try {
|
||||||
const tariffs = await makeRequest<never, GetTariffsResponse>({
|
const tariffs = await makeRequest<never, GetTariffsResponse>({
|
||||||
@ -17,7 +15,6 @@ export const getTariffs = async (
|
|||||||
return [tariffs];
|
return [tariffs];
|
||||||
} catch (nativeError) {
|
} catch (nativeError) {
|
||||||
const [error] = parseAxiosError(nativeError);
|
const [error] = parseAxiosError(nativeError);
|
||||||
|
|
||||||
return [null, `Ошибка при получении списка тарифов. ${error}`];
|
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 { activatePromocode } from "@api/promocode";
|
||||||
import type { Tariff } from "@frontend/kitui";
|
|
||||||
import { useToken } from "@frontend/kitui";
|
import { useToken } from "@frontend/kitui";
|
||||||
import { makeRequest } from "@api/makeRequest";
|
|
||||||
import ArrowLeft from "@icons/questionsPage/arrowLeft";
|
import ArrowLeft from "@icons/questionsPage/arrowLeft";
|
||||||
import type { GetTariffsResponse } from "@model/tariff";
|
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
@ -12,15 +8,11 @@ import {
|
|||||||
IconButton,
|
IconButton,
|
||||||
Modal,
|
Modal,
|
||||||
Paper,
|
Paper,
|
||||||
Select,
|
|
||||||
Typography,
|
Typography,
|
||||||
useMediaQuery,
|
useMediaQuery,
|
||||||
useTheme,
|
useTheme,
|
||||||
MenuItem,
|
|
||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import { clearQuizData } from "@root/quizes/store";
|
import { useUserStore } from "@root/user";
|
||||||
import { cleanAuthTicketData } from "@root/ticket";
|
|
||||||
import { clearUserData, useUserStore } from "@root/user";
|
|
||||||
import { LogoutButton } from "@ui_kit/LogoutButton";
|
import { LogoutButton } from "@ui_kit/LogoutButton";
|
||||||
import { useDomainDefine } from "@utils/hooks/useDomainDefine";
|
import { useDomainDefine } from "@utils/hooks/useDomainDefine";
|
||||||
import { enqueueSnackbar } from "notistack";
|
import { enqueueSnackbar } from "notistack";
|
||||||
@ -34,16 +26,14 @@ import { createTariffElements } from "./tariffsUtils/createTariffElements";
|
|||||||
import { currencyFormatter } from "./tariffsUtils/currencyFormatter";
|
import { currencyFormatter } from "./tariffsUtils/currencyFormatter";
|
||||||
import { useWallet, setCash } from "@root/cash";
|
import { useWallet, setCash } from "@root/cash";
|
||||||
import { handleLogoutClick } from "@utils/HandleLogoutClick";
|
import { handleLogoutClick } from "@utils/HandleLogoutClick";
|
||||||
import { getDiscounts } from "@api/discounts";
|
|
||||||
import { cartApi } from "@api/cart";
|
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 { Other } from "./pages/Other";
|
||||||
import { ModalRequestCreate } from "./ModalRequestCreate";
|
import { ModalRequestCreate } from "./ModalRequestCreate";
|
||||||
import { cancelCC, useCC } from "@/stores/cc";
|
import { cancelCC, useCC } from "@/stores/cc";
|
||||||
import { NavSelect } from "./NavSelect";
|
import { NavSelect } from "./NavSelect";
|
||||||
|
import { useTariffs } from '@utils/hooks/useTariffs';
|
||||||
|
import { useDiscounts } from '@utils/hooks/useDiscounts';
|
||||||
|
|
||||||
const StepperText: Record<string, string> = {
|
const StepperText: Record<string, string> = {
|
||||||
day: "Тарифы на время",
|
day: "Тарифы на время",
|
||||||
@ -59,9 +49,11 @@ function TariffPage() {
|
|||||||
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 navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [tariffs, setTariffs] = useState<Tariff[]>([]);
|
const user = useUserStore((state) => state.customerAccount);
|
||||||
const [user, setUser] = useState();
|
const a = useUserStore((state) => state.customerAccount); //c wallet
|
||||||
const [discounts, setDiscounts] = useState<Discount[]>([]);
|
console.log("________________34563875693785692576_____________USERRRRRRR")
|
||||||
|
console.log(a)
|
||||||
|
const { data: discounts } = useDiscounts(userId);
|
||||||
const [isRequestCreate, setIsRequestCreate] = useState(false);
|
const [isRequestCreate, setIsRequestCreate] = useState(false);
|
||||||
const [openModal, setOpenModal] = useState({});
|
const [openModal, setOpenModal] = useState({});
|
||||||
const { cashString, cashCop, cashRub } = useWallet();
|
const { cashString, cashCop, cashRub } = useWallet();
|
||||||
@ -70,56 +62,20 @@ function TariffPage() {
|
|||||||
const [promocodeField, setPromocodeField] = useState<string>("");
|
const [promocodeField, setPromocodeField] = useState<string>("");
|
||||||
const cc = useCC(store => store.cc)
|
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) {
|
console.log("________34563875693785692576_____ TARIFFS")
|
||||||
const [tariffsResult] = await getTariffs(page);
|
console.log(tariffs)
|
||||||
|
|
||||||
if (tariffsResult) {
|
|
||||||
tariffsList.push(...tariffsResult.tariffs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tariffsList;
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const get = async () => {
|
if (a) {
|
||||||
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);
|
|
||||||
|
|
||||||
let cs = currencyFormatter.format(Number(user.wallet.cash) / 100);
|
let cs = currencyFormatter.format(Number(user.wallet.cash) / 100);
|
||||||
let cc = Number(user.wallet.cash);
|
let cc = Number(user.wallet.cash);
|
||||||
let cr = Number(user.wallet.cash) / 100;
|
let cr = Number(user.wallet.cash) / 100;
|
||||||
setCash(cs, cc, cr);
|
setCash(cs, cc, cr);
|
||||||
};
|
}
|
||||||
get();
|
}, [a]);
|
||||||
}, []);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (cc) {
|
if (cc) {
|
||||||
@ -203,32 +159,17 @@ console.log(tariffsResponse)
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
enqueueSnackbar(error);
|
enqueueSnackbar(error);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
enqueueSnackbar(greetings);
|
enqueueSnackbar(greetings);
|
||||||
|
|
||||||
if (!userId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const [discounts, discountsError] = await getDiscounts(userId);
|
|
||||||
|
|
||||||
if (discountsError) {
|
|
||||||
throw new Error(discountsError);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (discounts?.length) {
|
|
||||||
setDiscounts(discounts);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const startRequestCreate = () => {
|
const startRequestCreate = () => {
|
||||||
setIsRequestCreate(true)
|
setIsRequestCreate(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!a) return null;
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Container
|
<Container
|
||||||
@ -346,7 +287,7 @@ console.log(tariffsResponse)
|
|||||||
selectedItem={selectedItem}
|
selectedItem={selectedItem}
|
||||||
content={[
|
content={[
|
||||||
{
|
{
|
||||||
title: `Убрать логотип “PenaQuiz”`,
|
title: `Убрать логотип "PenaQuiz"`,
|
||||||
onClick: () => setSelectedItem("hide")
|
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