diff --git a/src/api/account.ts b/src/api/account.ts index d25d5ae..34b74fc 100644 --- a/src/api/account.ts +++ b/src/api/account.ts @@ -40,7 +40,7 @@ export const getAccountInfo = async ( ): Promise<[Account | null, string?]> => { try { const accountInfoResponse = await makeRequest({ - url: `/account${baseUrl}/${id}`, + url: `${baseUrl}/account/${id}`, method: "GET", useToken: true, }); diff --git a/src/api/auth.ts b/src/api/auth.ts new file mode 100644 index 0000000..c794a4e --- /dev/null +++ b/src/api/auth.ts @@ -0,0 +1,72 @@ +import { makeRequest } from "@frontend/kitui"; + +import { parseAxiosError } from "@root/utils/parse-error"; + +import type { + LoginRequest, + RegisterRequest, + RegisterResponse, +} from "@frontend/kitui"; + +const baseUrl = + process.env.NODE_ENV === "production" + ? "/auth" + : "https://admin.pena.digital/auth"; + +export const signin = async ( + login: string, + password: string +): Promise<[RegisterResponse | null, string?]> => { + try { + const signinResponse = await makeRequest({ + url: baseUrl + "/login", + body: { login, password }, + useToken: false, + }); + + return [signinResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка авторизации. ${error}`]; + } +}; + +export const register = async ( + login: string, + password: string, + phoneNumber: string = "--" +): Promise<[RegisterResponse | null, string?]> => { + try { + const registerResponse = await makeRequest< + RegisterRequest, + RegisterResponse + >({ + url: baseUrl + "/register", + body: { login, password, phoneNumber }, + useToken: false, + }); + + return [registerResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка регистрации. ${error}`]; + } +}; + +export const logout = async (): Promise<[unknown, string?]> => { + try { + const logoutResponse = await makeRequest({ + url: baseUrl + "/logout", + method: "post", + contentType: true, + }); + + return [logoutResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка выхода из аккаунта. ${error}`]; + } +}; diff --git a/src/api/discounts.ts b/src/api/discounts.ts index 1cdb323..803bc44 100644 --- a/src/api/discounts.ts +++ b/src/api/discounts.ts @@ -3,7 +3,11 @@ import { makeRequest } from "@frontend/kitui"; import { parseAxiosError } from "@root/utils/parse-error"; import type { Discount } from "@frontend/kitui"; -import type { CreateDiscountBody, DiscountType } from "@root/model/discount"; +import type { + CreateDiscountBody, + DiscountType, + GetDiscountResponse, +} from "@root/model/discount"; const baseUrl = process.env.NODE_ENV === "production" @@ -194,3 +198,21 @@ export const patchDiscount = async ( return [null, `Ошибка изменения скидки. ${error}`]; } }; + +export const requestDiscounts = async (): Promise< + [GetDiscountResponse | null, string?] +> => { + try { + const discountsResponse = await makeRequest({ + url: baseUrl + "/discounts", + method: "get", + useToken: true, + }); + + return [discountsResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка получения скидок. ${error}`]; + } +}; diff --git a/src/api/privilegies.ts b/src/api/privilegies.ts new file mode 100644 index 0000000..3223fc0 --- /dev/null +++ b/src/api/privilegies.ts @@ -0,0 +1,92 @@ +import { makeRequest } from "@frontend/kitui"; + +import { parseAxiosError } from "@root/utils/parse-error"; + +import { PrivilegeWithAmount } from "@frontend/kitui"; +import type { TMockData } from "./roles"; + +type SeverPrivilegiesResponse = { + templategen: PrivilegeWithAmount[]; +}; + +const baseUrl = + process.env.NODE_ENV === "production" + ? "/strator" + : "https://admin.pena.digital/strator"; + +export const getRoles = async (): Promise<[TMockData | null, string?]> => { + try { + const rolesResponse = await makeRequest({ + method: "get", + url: baseUrl + "/role", + }); + + return [rolesResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка запроса ролей. ${error}`]; + } +}; + +export const putPrivilegie = async ( + body: Omit +): Promise<[unknown, string?]> => { + try { + const putedPrivilegie = await makeRequest< + Omit, + unknown + >({ + url: baseUrl + "/privilege", + method: "put", + body, + }); + + return [putedPrivilegie]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка изменения привилегии. ${error}`]; + } +}; + +export const requestServicePrivilegies = async (): Promise< + [SeverPrivilegiesResponse | null, string?] +> => { + try { + const privilegiesResponse = await makeRequest< + never, + SeverPrivilegiesResponse + >({ + url: baseUrl + "/privilege/service", + method: "get", + }); + + return [privilegiesResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка запроса привилегий. ${error}`]; + } +}; + +export const requestPrivilegies = async ( + signal: AbortSignal | undefined +): Promise<[PrivilegeWithAmount[], string?]> => { + try { + const privilegiesResponse = await makeRequest( + { + url: baseUrl + "/privilege", + method: "get", + useToken: true, + signal, + } + ); + + return [privilegiesResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [[], `Ошибка запроса привилегий. ${error}`]; + } +}; diff --git a/src/api/roles.ts b/src/api/roles.ts index 6310a2a..366c178 100644 --- a/src/api/roles.ts +++ b/src/api/roles.ts @@ -1,3 +1,7 @@ +import { makeRequest } from "@frontend/kitui"; + +import { parseAxiosError } from "@root/utils/parse-error"; + export const MOCK_DATA_USERS = [ { key: 0, @@ -31,6 +35,11 @@ export type UserType = { updatedAt: string; }; +const baseUrl = + process.env.NODE_ENV === "production" + ? "/role" + : "https://admin.pena.digital/role"; + export const getRoles_mock = (): Promise => { return new Promise((resolve) => { setTimeout(() => { @@ -38,3 +47,18 @@ export const getRoles_mock = (): Promise => { }, 1000); }); }; + +export const deleteRole = async (id: string): Promise<[unknown, string?]> => { + try { + const deleteRoleResponse = await makeRequest({ + url: `${baseUrl}/${id}`, + method: "delete", + }); + + return [deleteRoleResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка удаления роли. ${error}`]; + } +}; diff --git a/src/api/tariffs.ts b/src/api/tariffs.ts index 4e0e56c..86a566f 100644 --- a/src/api/tariffs.ts +++ b/src/api/tariffs.ts @@ -2,14 +2,49 @@ import { makeRequest } from "@frontend/kitui"; import { parseAxiosError } from "@root/utils/parse-error"; +import type { PrivilegeWithAmount } from "@frontend/kitui"; import type { Tariff } from "@frontend/kitui"; import type { EditTariffRequestBody } from "@root/model/tariff"; +type CreateTariffBackendRequest = { + name: string; + price: number; + isCustom: boolean; + privilegies: Omit[]; +}; + +type GetTariffsResponse = { + totalPages: number; + tariffs: Tariff[]; +}; + const baseUrl = process.env.NODE_ENV === "production" ? "/strator" : "https://admin.pena.digital/strator"; +export const createTariff = async ( + body: CreateTariffBackendRequest +): Promise<[unknown, string?]> => { + try { + const createdTariffResponse = await makeRequest( + { + url: baseUrl + "/tariff/", + method: "post", + body, + } + ); + + debugger; + + return [createdTariffResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка создания тарифа. ${error}`]; + } +}; + export const putTariff = async (tariff: Tariff): Promise<[null, string?]> => { try { const putedTariffResponse = await makeRequest({ @@ -49,22 +84,19 @@ export const deleteTariff = async ( } }; -export async function deleteManyTariffs(tariffIds: string[]) { - const results = await Promise.allSettled( - tariffIds.map((tariffId) => deleteTariff(tariffId)) - ); +export const requestTariffs = async ( + page: number +): Promise<[GetTariffsResponse | null, string?]> => { + try { + const tariffsResponse = await makeRequest({ + url: baseUrl + `/tariff/?page=${page}&limit=${100}`, + method: "get", + }); - let deletedCount = 0; - let errorCount = 0; - const errors: unknown[] = []; + return [tariffsResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); - results.forEach((result) => { - if (result.status === "fulfilled") deletedCount++; - else { - errorCount++; - errors.push(result.reason); - } - }); - - return { deletedCount, errorCount, errors }; -} + return [null, `Ошибка запроса тарифов. ${error}`]; + } +}; diff --git a/src/api/user.ts b/src/api/user.ts index cbdcb1d..873bd74 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -4,6 +4,11 @@ import { parseAxiosError } from "@root/utils/parse-error"; import type { UserType } from "@root/api/roles"; +type RegisteredUsersResponse = { + tatalPages: number; + users: UserType[]; +}; + const baseUrl = process.env.NODE_ENV === "production" ? "/user" @@ -26,3 +31,43 @@ export const getUserInfo = async ( return [null, `Ошибка получения информации о пользователе. ${error}`]; } }; + +export const getRegisteredUsers = async (): Promise< + [RegisteredUsersResponse | null, string?] +> => { + try { + const registeredUsersResponse = await makeRequest< + never, + RegisteredUsersResponse + >({ + method: "get", + url: baseUrl + "/", + }); + + return [registeredUsersResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка при получении пользователей. ${error}`]; + } +}; + +export const getManagersList = async (): Promise< + [RegisteredUsersResponse | null, string?] +> => { + try { + const managersListResponse = await makeRequest< + never, + RegisteredUsersResponse + >({ + method: "get", + url: baseUrl + "/", + }); + + return [managersListResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка при получении менеджеров. ${error}`]; + } +}; diff --git a/src/api/verification.ts b/src/api/verification.ts new file mode 100644 index 0000000..d60e65d --- /dev/null +++ b/src/api/verification.ts @@ -0,0 +1,68 @@ +import { makeRequest } from "@frontend/kitui"; + +import { parseAxiosError } from "@root/utils/parse-error"; + +type File = { + name: "inn" | "rule" | "egrule" | "certificate"; + url: string; +}; + +export type Verification = { + _id: string; + accepted: boolean; + status: "org" | "nko"; + updated_at: string; + comment: string; + files: File[]; +}; + +type PatchVerificationBody = { + id: string; + status: "org" | "nko"; + comment: string; + accepted: boolean; +}; + +const baseUrl = + process.env.NODE_ENV === "production" + ? "/verification" + : "https://admin.pena.digital/verification"; + +export const verification = async ( + userId: string +): Promise<[Verification | null, string?]> => { + try { + const verificationResponse = await makeRequest({ + method: "get", + url: baseUrl + `/verification/${userId}`, + }); + + return [verificationResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка верификации. ${error}`]; + } +}; + +export const patchVerification = async ( + body: PatchVerificationBody +): Promise<[unknown, string?]> => { + try { + const patchedVerificationResponse = await makeRequest< + PatchVerificationBody, + unknown + >({ + method: "patch", + useToken: true, + url: baseUrl + `/verification/verification`, + body, + }); + + return [patchedVerificationResponse]; + } catch (nativeError) { + const [error] = parseAxiosError(nativeError); + + return [null, `Ошибка изменения верификации. ${error}`]; + } +}; diff --git a/src/kitUI/Cart/Cart.tsx b/src/kitUI/Cart/Cart.tsx index 6d10538..b947388 100644 --- a/src/kitUI/Cart/Cart.tsx +++ b/src/kitUI/Cart/Cart.tsx @@ -44,9 +44,7 @@ export default function Cart() { async function handleCalcCartClick() { await requestPrivilegies(); - try { - discounts = await requestDiscounts(); - } catch { } + await requestDiscounts(); const cartTariffs = tariffs.filter(tariff => selectedTariffIds.includes(tariff._id)); diff --git a/src/pages/Authorization/signin.tsx b/src/pages/Authorization/signin.tsx index 2e1ca07..8c0fa26 100644 --- a/src/pages/Authorization/signin.tsx +++ b/src/pages/Authorization/signin.tsx @@ -3,12 +3,18 @@ import { enqueueSnackbar } from "notistack"; import { useTheme } from "@mui/material/styles"; import { Formik, Field, Form, FormikHelpers } from "formik"; import { Link } from "react-router-dom"; -import { Box, Checkbox, Typography, FormControlLabel, Button } from "@mui/material"; +import { + Box, + Checkbox, + Typography, + FormControlLabel, + Button, +} from "@mui/material"; import Logo from "@pages/Logo"; import OutlinedInput from "@kitUI/outlinedInput"; import EmailOutlinedIcon from "@mui/icons-material/EmailOutlined"; import LockOutlinedIcon from "@mui/icons-material/LockOutlined"; -import { makeRequest } from "@frontend/kitui"; +import { signin } from "@root/api/auth"; interface Values { email: string; @@ -44,30 +50,29 @@ const SigninForm = () => { password: "", }; - const onSignFormSubmit = (values: Values, formikHelpers: FormikHelpers) => { + const onSignFormSubmit = async ( + values: Values, + formikHelpers: FormikHelpers + ) => { formikHelpers.setSubmitting(true); - makeRequest({ - url: "https://admin.pena.digital/auth/login", - body: { - login: values.email, - password: values.password, - }, - useToken: false, - }) - .then((e) => { - navigate("/users"); - }) - .catch((e) => { - console.log(e); - enqueueSnackbar(e.message ? e.message : `Unknown error`); - }) - .finally(() => { - formikHelpers.setSubmitting(false); - }); + + const [_, signinError] = await signin(values.email, values.password); + + formikHelpers.setSubmitting(false); + + if (signinError) { + return enqueueSnackbar(signinError); + } + + navigate("/users"); }; return ( - + {(props) => (
{ Мы рады что вы выбрали нас! - *": { marginRight: "10px" } }}> + *": { marginRight: "10px" }, + }} + > { } /> - *": { marginRight: "10px" } }}> + *": { marginRight: "10px" }, + }} + > { /> - Забыли пароль? + + Забыли пароль? + - У меня уже есть аккаунт + + У меня уже есть аккаунт + diff --git a/src/pages/Setting/CardPrivilegie.tsx b/src/pages/Setting/CardPrivilegie.tsx index 6927870..0e9b857 100644 --- a/src/pages/Setting/CardPrivilegie.tsx +++ b/src/pages/Setting/CardPrivilegie.tsx @@ -2,163 +2,158 @@ import { useRef, useState } from "react"; import { enqueueSnackbar } from "notistack"; import { Box, IconButton, TextField, Tooltip, Typography } from "@mui/material"; import ModeEditOutlineOutlinedIcon from "@mui/icons-material/ModeEditOutlineOutlined"; -import { PrivilegeWithAmount, makeRequest } from "@frontend/kitui"; - +import { PrivilegeWithAmount } from "@frontend/kitui"; +import { putPrivilegie } from "@root/api/privilegies"; interface CardPrivilegie { - privilege: PrivilegeWithAmount; + privilege: PrivilegeWithAmount; } -const baseUrl = - process.env.NODE_ENV === "production" - ? "/strator" - : "https://admin.pena.digital/strator"; - export const СardPrivilegie = ({ privilege }: CardPrivilegie) => { - const [inputOpen, setInputOpen] = useState(false); - const [inputValue, setInputValue] = useState(""); - const priceRef = useRef(null); + const [inputOpen, setInputOpen] = useState(false); + const [inputValue, setInputValue] = useState(""); + const priceRef = useRef(null); - const translationType = { - count: "за единицу", - day: "за день", - mb: "за МБ", - }; + const translationType = { + count: "за единицу", + day: "за день", + mb: "за МБ", + }; - const PutPrivilegies = () => { - makeRequest>({ - url: baseUrl + "/privilege/", - method: "put", - body: { - name: privilege.name, - privilegeId: privilege.privilegeId, - serviceKey: privilege.serviceKey, - description: privilege.description, - amount: 1, - type: privilege.type, - value: privilege.value, - price: Number(inputValue), - }, - }) - .then(() => { - priceRef.current.innerText = "price: " + inputValue; - setInputValue(""); - setInputOpen(false); - }) - .catch((error) => { - enqueueSnackbar(error.message); - }); - }; + const putPrivilegies = async () => { + const [_, putedPrivilegieError] = await putPrivilegie({ + name: privilege.name, + privilegeId: privilege.privilegeId, + serviceKey: privilege.serviceKey, + description: privilege.description, + amount: 1, + type: privilege.type, + value: privilege.value, + price: Number(inputValue), + }); - const requestOnclickEnter = (event: any) => { - if (event.key === "Enter" && inputValue !== "") { - PutPrivilegies(); - setInputOpen(false); - } - }; + if (putedPrivilegieError) { + return enqueueSnackbar(putedPrivilegieError); + } - const onCloseInput = (event: any) => { - if (event.key === "Escape") { - setInputOpen(false); - } - }; + priceRef.current.innerText = "price: " + inputValue; + setInputValue(""); + setInputOpen(false); + }; - return ( - { + if (event.key === "Enter" && inputValue !== "") { + putPrivilegies(); + setInputOpen(false); + } + }; + + const onCloseInput = (event: any) => { + if (event.key === "Escape") { + setInputOpen(false); + } + }; + + return ( + + + + - - - - {privilege.name} - - {privilege.description} - } - > - - - - - - - - setInputOpen(!inputOpen)}> - - - - - - {inputOpen ? ( - setInputValue(event.target.value)} - sx={{ - alignItems: "center", - width: "400px", - "& .MuiInputBase-root": { - backgroundColor: "#F2F3F7", - height: "48px", - }, - }} - inputProps={{ - sx: { - borderRadius: "10px", - fontSize: "18px", - lineHeight: "21px", - py: 0, - }, - }} - /> - ) : ( -
- price: {privilege.price} -
- )} - {translationType[privilege.type]} -
+ > + {privilege.name} + + + {privilege.description} + + } + > + + + + + + + + setInputOpen(!inputOpen)}> + +
- ); +
+ + {inputOpen ? ( + setInputValue(event.target.value)} + sx={{ + alignItems: "center", + width: "400px", + "& .MuiInputBase-root": { + backgroundColor: "#F2F3F7", + height: "48px", + }, + }} + inputProps={{ + sx: { + borderRadius: "10px", + fontSize: "18px", + lineHeight: "21px", + py: 0, + }, + }} + /> + ) : ( +
+ price: {privilege.price} +
+ )} + + {translationType[privilege.type]} + +
+ + ); }; diff --git a/src/pages/Setting/FormDeleteRoles.tsx b/src/pages/Setting/FormDeleteRoles.tsx index 5a85ab7..4559106 100644 --- a/src/pages/Setting/FormDeleteRoles.tsx +++ b/src/pages/Setting/FormDeleteRoles.tsx @@ -10,7 +10,8 @@ import { TextField, } from "@mui/material"; import { MOCK_DATA_USERS } from "@root/api/roles"; -import { makeRequest } from "@frontend/kitui"; +import { deleteRole } from "@root/api/roles"; +import { enqueueSnackbar } from "notistack"; const ITEM_HEIGHT = 48; const ITEM_PADDING_TOP = 8; @@ -22,9 +23,6 @@ const MenuProps = { }, }; -const baseUrl = - process.env.NODE_ENV === "production" ? "" : "https://admin.pena.digital"; - export default function DeleteForm() { const [personName, setPersonName] = useState([]); const [roleId, setRoleId] = useState(); @@ -36,9 +34,14 @@ export default function DeleteForm() { setPersonName(typeof value === "string" ? value.split(",") : value); }; - const rolesDelete = (id = "") => { - makeRequest({ url: baseUrl + "/role/" + id, method: "delete" }); + const rolesDelete = async (id = "") => { + const [_, deletedRoleError] = await deleteRole(id); + + if (deletedRoleError) { + return enqueueSnackbar(deletedRoleError); + } }; + return ( <> - diff --git a/src/services/discounts.service.ts b/src/services/discounts.service.ts index 8ecb484..2090b67 100644 --- a/src/services/discounts.service.ts +++ b/src/services/discounts.service.ts @@ -1,12 +1,7 @@ import { setDiscounts } from "@root/stores/discounts"; -import type { GetDiscountResponse } from "@root/model/discount"; -import { Discount, makeRequest } from "@frontend/kitui"; - -const baseUrl = - process.env.NODE_ENV === "production" - ? "/price" - : "https://admin.pena.digital/price"; +import { requestDiscounts as requestDiscountsRequest } from "@root/api/discounts"; +import type { Discount } from "@frontend/kitui"; const filterDiscounts = (discounts: Discount[]) => { const activeDiscounts = discounts.filter((discount) => !discount.Deprecated); @@ -15,17 +10,19 @@ const filterDiscounts = (discounts: Discount[]) => { }; export const requestDiscounts = async (): Promise => { - try { - const { Discounts } = await makeRequest({ - url: baseUrl + "/discounts", - method: "get", - useToken: true, - }); + const [discounts, discountsError] = await requestDiscountsRequest(); - filterDiscounts(Discounts); + if (discountsError) { + console.error(discountsError); - return Discounts - } catch { - throw new Error("Ошибка при получении скидок"); + return []; } + + if (discounts) { + filterDiscounts(discounts.Discounts); + + return discounts.Discounts; + } + + return []; }; diff --git a/src/services/privilegies.service.ts b/src/services/privilegies.service.ts index 17dd7e0..dfeca46 100644 --- a/src/services/privilegies.service.ts +++ b/src/services/privilegies.service.ts @@ -1,16 +1,8 @@ import { resetPrivilegeArray } from "@root/stores/privilegesStore"; import { exampleCartValues } from "@stores/mocks/exampleCartValues"; +import { requestServicePrivilegies } from "@root/api/privilegies"; -import { PrivilegeWithAmount, makeRequest } from "@frontend/kitui"; - -type SeverPrivilegiesResponse = { - templategen: PrivilegeWithAmount[]; -}; - -const baseUrl = - process.env.NODE_ENV === "production" - ? "/strator" - : "https://admin.pena.digital/strator"; +import type { PrivilegeWithAmount } from "@frontend/kitui"; const mutatePrivilegies = (privilegies: PrivilegeWithAmount[]) => { let extracted: PrivilegeWithAmount[] = []; @@ -34,12 +26,14 @@ const mutatePrivilegies = (privilegies: PrivilegeWithAmount[]) => { }; export const requestPrivilegies = async () => { - await makeRequest({ - url: baseUrl + "/privilege/service", - method: "get", - }) - .then(({ templategen }) => mutatePrivilegies(templategen)) - .catch(() => { - console.log("Ошибка при получении привилегий"); - }); + const [privilegiesResponse, privilegiesError] = + await requestServicePrivilegies(); + + if (privilegiesError) { + return console.error(privilegiesError); + } + + if (privilegiesResponse) { + mutatePrivilegies(privilegiesResponse.templategen); + } }; diff --git a/src/services/tariffs.service.ts b/src/services/tariffs.service.ts index 19cf59d..28fc083 100644 --- a/src/services/tariffs.service.ts +++ b/src/services/tariffs.service.ts @@ -1,43 +1,36 @@ -import { Tariff, makeRequest } from "@frontend/kitui"; import { updateTariffs } from "@root/stores/tariffs"; +import { requestTariffs as requestTariffsRequest } from "@root/api/tariffs"; - -type GetTariffsResponse = { - totalPages: number; - tariffs: Tariff[]; -}; - -const baseUrl = - process.env.NODE_ENV === "production" - ? "/strator" - : "https://admin.pena.digital/strator"; +import type { Tariff } from "@frontend/kitui"; const mutateTariffs = (tariffs: Tariff[]) => { - const nonDeletedTariffs = tariffs - .filter(({ isDeleted }) => !isDeleted); + const nonDeletedTariffs = tariffs.filter(({ isDeleted }) => !isDeleted); - updateTariffs(nonDeletedTariffs); + updateTariffs(nonDeletedTariffs); }; export const requestTariffs = async ( - page: number = 1, - existingTariffs: Tariff[] = [] + page: number = 1, + existingTariffs: Tariff[] = [] ): Promise => { - try { - const { tariffs, totalPages } = await makeRequest< - never, - GetTariffsResponse - >({ - url: baseUrl + `/tariff/?page=${page}&limit=${100}`, - method: "get", - }); + const [tariffsResponse, tariffsResponseError] = await requestTariffsRequest( + page + ); - if (page < totalPages) { - return requestTariffs(page + 1, [...existingTariffs, ...tariffs]); - } + if (tariffsResponseError) { + console.error(tariffsResponseError); - mutateTariffs([...existingTariffs, ...tariffs]); - } catch { - throw new Error("Ошибка при получении тарифов"); + return; + } + + if (tariffsResponse) { + if (page < tariffsResponse.totalPages) { + return requestTariffs(page + 1, [ + ...existingTariffs, + ...tariffsResponse.tariffs, + ]); } + + mutateTariffs([...existingTariffs, ...tariffsResponse.tariffs]); + } }; diff --git a/src/utils/hooks/usePrivileges.ts b/src/utils/hooks/usePrivileges.ts index 7e452dd..7509c89 100644 --- a/src/utils/hooks/usePrivileges.ts +++ b/src/utils/hooks/usePrivileges.ts @@ -1,25 +1,29 @@ -import { PrivilegeWithAmount, makeRequest } from "@frontend/kitui"; import { useEffect } from "react"; +import { requestPrivilegies } from "@root/api/privilegies"; -export default function usePrivileges({ onError, onNewPrivileges }: { - onNewPrivileges: (response: PrivilegeWithAmount[]) => void; - onError?: (error: any) => void; +import type { PrivilegeWithAmount } from "@frontend/kitui"; + +export default function usePrivileges({ + onError, + onNewPrivileges, +}: { + onNewPrivileges: (response: PrivilegeWithAmount[]) => void; + onError?: (error: any) => void; }) { - useEffect(() => { - const controller = new AbortController(); + useEffect(() => { + const controller = new AbortController(); - makeRequest({ - url: "https://admin.pena.digital/strator/privilege", - method: "get", - useToken: true, - signal: controller.signal, - }).then(result => { - onNewPrivileges(result); - }).catch(error => { - onError?.(error); - }); + requestPrivilegies(controller.signal).then( + ([privilegiesResponse, privilegiesError]) => { + if (privilegiesError) { + return onError?.(privilegiesError); + } - return () => controller.abort(); - }, [onError, onNewPrivileges]); + onNewPrivileges(privilegiesResponse); + } + ); + + return () => controller.abort(); + }, [onError, onNewPrivileges]); }