errorreporter
This commit is contained in:
parent
291d059654
commit
0ae7cb702f
@ -20,7 +20,7 @@
|
||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
||||
"@emotion/react": "^11.10.5",
|
||||
"@emotion/styled": "^11.10.5",
|
||||
"@frontend/kitui": "^1.0.108",
|
||||
"@frontend/kitui": "^1.0.110",
|
||||
"@mui/icons-material": "^5.10.14",
|
||||
"@mui/material": "^5.10.14",
|
||||
"@mui/x-date-pickers": "^7.13.0",
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { UserAccount } from "@frontend/kitui";
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import Cart from "@root/pages/Cart/Cart";
|
||||
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { Tariff } from "@frontend/kitui";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
|
||||
export interface GetHistoryResponse {
|
||||
totalPages: number;
|
||||
|
@ -1,48 +0,0 @@
|
||||
import * as KIT from "@frontend/kitui";
|
||||
import { Method, ResponseType, AxiosError } from "axios";
|
||||
import { clearAuthToken } from "@frontend/kitui";
|
||||
import { clearUserData } from "@root/stores/user";
|
||||
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||
import { clearTickets } from "@root/stores/tickets";
|
||||
import { redirect } from "react-router-dom";
|
||||
import { setNotEnoughMoneyAmount } from "@stores/allTypesOfPurchases";
|
||||
|
||||
interface MakeRequest {
|
||||
method?: Method | undefined;
|
||||
url: string;
|
||||
body?: unknown;
|
||||
useToken?: boolean | undefined;
|
||||
contentType?: boolean | undefined;
|
||||
responseType?: ResponseType | undefined;
|
||||
signal?: AbortSignal | undefined;
|
||||
withCredentials?: boolean | undefined;
|
||||
}
|
||||
interface ErrorResponseData {
|
||||
message?: string;
|
||||
}
|
||||
|
||||
async function makeRequest<TRequest = unknown, TResponse = unknown>(
|
||||
data: MakeRequest
|
||||
): Promise<TResponse> {
|
||||
try {
|
||||
const response = await KIT.makeRequest<unknown>(data);
|
||||
|
||||
return response as TResponse;
|
||||
} catch (e) {
|
||||
const error = e as AxiosError;
|
||||
if (
|
||||
error.response?.status === 400 &&
|
||||
(error.response?.data as ErrorResponseData)?.message ===
|
||||
"refreshToken is empty"
|
||||
) {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0);
|
||||
redirect("/");
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
export default makeRequest;
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import type { GetDiscountsResponse } from "@root/model/discount";
|
||||
import { useUserStore } from "@root/stores/user";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
|
||||
import { parseAxiosError } from "@utils/parse-error";
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
||||
const API_URL = `${process.env.REACT_APP_DOMAIN}/customer/v1.0.1`;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import { Tariff } from "@frontend/kitui";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
import { createTicket as createTicketRequest } from "@frontend/kitui";
|
||||
import type { CreateTicketResponse } from "@frontend/kitui";
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { User } from "@frontend/kitui";
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import { PatchUserRequest } from "@root/model/user";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
|
||||
import { jsonToFormdata } from "@root/utils/jsonToFormdata";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
@ -1,4 +1,4 @@
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import { SendPaymentRequest, SendPaymentResponse } from "@root/model/wallet";
|
||||
import { parseAxiosError } from "@root/utils/parse-error";
|
||||
|
||||
|
@ -129,6 +129,7 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) {
|
||||
shown: { me: 1 },
|
||||
ticket_id: "111",
|
||||
user_id: "greetingMessage",
|
||||
system: true,
|
||||
};
|
||||
}, [open]);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import { currencyFormatter } from "@root/utils/currencyFormatter";
|
||||
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||
import { clearTickets } from "@root/stores/tickets";
|
||||
import {setNotEnoughMoneyAmount} from "@stores/allTypesOfPurchases"
|
||||
import { logoutAndRedirect } from "@root/utils/logout";
|
||||
|
||||
interface Props {
|
||||
isLoggedIn: boolean;
|
||||
@ -44,15 +45,8 @@ export default function NavbarFull({ isLoggedIn }: Props) {
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
async function handleLogoutClick() {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0)
|
||||
navigate("/");
|
||||
|
||||
logoutAndRedirect(navigate);
|
||||
const [_, logoutError] = await logout();
|
||||
|
||||
if (logoutError) {
|
||||
return enqueueSnackbar(logoutError);
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import { enqueueSnackbar } from "notistack";
|
||||
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||
import { clearTickets } from "@root/stores/tickets";
|
||||
import {setNotEnoughMoneyAmount} from "@stores/allTypesOfPurchases"
|
||||
import { logoutAndRedirect } from "@root/utils/logout";
|
||||
|
||||
type MenuItem = {
|
||||
name: string;
|
||||
@ -66,15 +67,8 @@ export default function DialogMenu({ handleClose }: DialogMenuProps) {
|
||||
};
|
||||
|
||||
async function handleLogoutClick() {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0)
|
||||
navigate("/");
|
||||
|
||||
logoutAndRedirect(navigate);
|
||||
const [_, logoutError] = await logout();
|
||||
|
||||
if (logoutError) {
|
||||
return enqueueSnackbar(logoutError);
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import { clearTickets } from "@root/stores/tickets";
|
||||
|
||||
import type { ReactNode } from "react";
|
||||
import {setNotEnoughMoneyAmount} from "@stores/allTypesOfPurchases"
|
||||
import { logoutAndRedirect } from "@root/utils/logout";
|
||||
|
||||
interface Props {
|
||||
children: ReactNode;
|
||||
@ -30,15 +31,8 @@ export default function NavbarFull({ children }: Props) {
|
||||
const initials = useUserStore((state) => state.initials);
|
||||
|
||||
async function handleLogoutClick() {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0)
|
||||
navigate("/");
|
||||
|
||||
logoutAndRedirect(navigate);
|
||||
const [_, logoutError] = await logout();
|
||||
|
||||
if (logoutError) {
|
||||
return enqueueSnackbar(logoutError);
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import { currencyFormatter } from "@root/utils/currencyFormatter";
|
||||
|
||||
import walletIcon from "@root/assets/Icons/wallet_icon.svg";
|
||||
import {setNotEnoughMoneyAmount} from "@stores/allTypesOfPurchases"
|
||||
import { logoutAndRedirect } from "@root/utils/logout";
|
||||
|
||||
export const NavbarPanel = () => {
|
||||
const navigate = useNavigate();
|
||||
@ -28,15 +29,8 @@ export const NavbarPanel = () => {
|
||||
const initials = useUserStore((state) => state.initials);
|
||||
|
||||
async function handleLogoutClick() {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0)
|
||||
navigate("/");
|
||||
|
||||
logoutAndRedirect(navigate);
|
||||
const [_, logoutError] = await logout();
|
||||
|
||||
if (logoutError) {
|
||||
return enqueueSnackbar(logoutError);
|
||||
}
|
||||
|
@ -62,6 +62,10 @@ import { ModalRequestCreate } from "./pages/Tariffs/ModalRequestCreate";
|
||||
import * as crutch from "./useUserAccountFetcher";
|
||||
import { useTryBuy } from "./utils/hooks/useTryBuy";
|
||||
import AnyServicePayment from "./pages/AnyServicePayment/AnyServicePayment";
|
||||
import { ErrorBoundary } from "react-error-boundary";
|
||||
import { ApologyFallback } from "./pages/ApologyPage";
|
||||
import { handleComponentError } from "./utils/handleComponentError";
|
||||
import { createMakeRequestConfig } from "@frontend/kitui";
|
||||
|
||||
pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.js`;
|
||||
|
||||
@ -225,11 +229,17 @@ const App = () => {
|
||||
);
|
||||
};
|
||||
|
||||
createMakeRequestConfig(undefined, handleComponentError, () => []);
|
||||
|
||||
const root = ReactDOM.createRoot(
|
||||
document.getElementById("root") as HTMLElement
|
||||
);
|
||||
root.render(
|
||||
// <React.StrictMode>
|
||||
<ErrorBoundary
|
||||
FallbackComponent={ApologyFallback}
|
||||
onError={handleComponentError}
|
||||
>
|
||||
<ThemeProvider theme={theme}>
|
||||
<LocalizationProvider
|
||||
dateAdapter={AdapterMoment}
|
||||
@ -243,6 +253,7 @@ root.render(
|
||||
</BrowserRouter>
|
||||
</LocalizationProvider>
|
||||
</ThemeProvider>
|
||||
</ErrorBoundary>
|
||||
// </React.StrictMode>
|
||||
);
|
||||
|
||||
|
@ -19,6 +19,7 @@ import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||
import { clearTickets } from "@root/stores/tickets";
|
||||
import { cancelPayCartProcess, setAction, setBackWay, setFromDomain, setNotEnoughMoneyAmount, startPayCartProcess } from "@stores/allTypesOfPurchases"
|
||||
import { Action, FromDomain } from "@root/model/autoPay";
|
||||
import { logoutAndRedirect, clearUserSession } from "@root/utils/logout";
|
||||
//http://localhost:3001/payment?fromdomain=localhost:3000&action=buy&dif=96900&userid=68773ec66816e2c659b36dad&sec=
|
||||
let first = true;
|
||||
|
||||
@ -74,11 +75,7 @@ export default function AnyServicePayment() {
|
||||
if (URLaction && URLmoneyDifferent && URLtoken) {
|
||||
(async () => {
|
||||
if (getAuthToken()) {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0)
|
||||
logoutAndRedirect(navigate);
|
||||
await logout();
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { Box, Typography } from "@mui/material";
|
||||
import { FallbackProps } from "react-error-boundary";
|
||||
|
||||
export const ApologyPage = ({ message }: { message: string }) => {
|
||||
return (
|
||||
@ -20,3 +21,7 @@ export const ApologyPage = ({ message }: { message: string }) => {
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export function ApologyFallback({ error }: FallbackProps) {
|
||||
return <ApologyPage message={error?.message || "что-то пошло не так"} />;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ import { useEffect, useLayoutEffect, useRef } from "react";
|
||||
import { createUserAccount, devlog, getAuthToken, setAuthToken } from "@frontend/kitui";
|
||||
import { isAxiosError } from "axios";
|
||||
|
||||
import makeRequest from "@api/makeRequest";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
|
||||
import type { UserAccount } from "@frontend/kitui";
|
||||
|
||||
|
@ -6,6 +6,7 @@ import { clearTickets } from '@root/stores/tickets';
|
||||
import { clearUserData, setUserId, useUserStore } from '@root/stores/user';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useLocation, useNavigate } from 'react-router-dom';
|
||||
import { clearUserSession, logoutAndRedirect } from "@root/utils/logout";
|
||||
|
||||
interface QuizAuthParams {
|
||||
action?: string;
|
||||
@ -62,11 +63,7 @@ export const useReauthorization = () => {
|
||||
try {
|
||||
// Если есть текущий токен, очищаем данные
|
||||
if (getAuthToken()) {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0);
|
||||
logoutAndRedirect(navigate);
|
||||
await logout();
|
||||
}
|
||||
|
||||
@ -95,11 +92,7 @@ export const useReauthorization = () => {
|
||||
// Если есть токен в URL, устанавливаем его
|
||||
// Очищаем данные только если токен действительно изменился
|
||||
if (getAuthToken() !== URLtoken) {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0);
|
||||
clearUserSession();
|
||||
// Не вызываем logout() чтобы избежать перенаправления
|
||||
}
|
||||
setAuthToken(URLtoken);
|
||||
|
25
src/utils/logout.ts
Normal file
25
src/utils/logout.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { clearAuthToken } from "@frontend/kitui";
|
||||
import { clearUserData } from "@root/stores/user";
|
||||
import { clearCustomTariffs } from "@root/stores/customTariffs";
|
||||
import { clearTickets } from "@root/stores/tickets";
|
||||
import { setNotEnoughMoneyAmount } from "@root/stores/allTypesOfPurchases";
|
||||
import { NavigateFunction } from "react-router-dom";
|
||||
|
||||
/**
|
||||
* Очищает все пользовательские данные (без редиректа)
|
||||
*/
|
||||
export function clearUserSession() {
|
||||
clearAuthToken();
|
||||
clearUserData();
|
||||
clearCustomTariffs();
|
||||
clearTickets();
|
||||
setNotEnoughMoneyAmount(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Выполняет полный логаут пользователя и редиректит на главную страницу
|
||||
*/
|
||||
export function logoutAndRedirect(navigate: NavigateFunction) {
|
||||
clearUserSession();
|
||||
navigate("/");
|
||||
}
|
@ -1521,10 +1521,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
|
||||
integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
|
||||
|
||||
"@frontend/kitui@^1.0.108":
|
||||
version "1.0.108"
|
||||
resolved "http://gitea.pena/api/packages/skeris/npm/%40frontend%2Fkitui/-/1.0.108/kitui-1.0.108.tgz#1bb609dfe07668b6fd9a7b8618c229e0bb609f1e"
|
||||
integrity sha512-4DiF7GHX0RbBMZpFioclc3B87N+HrGLv1B3DveUCdHzukfxvFXyEKnRZQ4wYljO2A3FLSD9+4Dr6cSuZYw95OQ==
|
||||
"@frontend/kitui@^1.0.110":
|
||||
version "1.0.110"
|
||||
resolved "http://gitea.pena/api/packages/skeris/npm/%40frontend%2Fkitui/-/1.0.110/kitui-1.0.110.tgz#0c0a968293338537a2811e7761f8efe933893573"
|
||||
integrity sha512-XOCev5zNtNZ8fu3IfK6oFNOqT8lE9jlmUX1kQ3OO+H30/LBpnBrww9nV/aHV2TEm0wYXdRMvaEtU6VOb72sDdg==
|
||||
dependencies:
|
||||
immer "^10.0.2"
|
||||
reconnecting-eventsource "^1.6.2"
|
||||
|
Loading…
Reference in New Issue
Block a user