Login:Src:Components: remove checkConfirmLink request from ConfirmRoute

This commit is contained in:
Darya Umrikhina 2024-08-16 01:59:27 +04:00
parent dc780ea052
commit 747b0b7a5e

View File

@ -26,23 +26,16 @@
"use client";
import { notFound, usePathname, useSearchParams } from "next/navigation";
import React, { createContext, useCallback, useEffect, useState } from "react";
import { notFound, useSearchParams } from "next/navigation";
import React, { createContext, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { getCookie } from "@docspace/shared/utils";
import { LANGUAGE } from "@docspace/shared/constants";
import { checkConfirmLink, logout } from "@docspace/shared/api/user";
import AppLoader from "@docspace/shared/components/app-loader";
import { logout } from "@docspace/shared/api/user";
import { AuthenticatedAction, ValidationResult } from "@/utils/enums";
import {
TConfirmLinkResult,
TConfirmLinkParams,
ConfirmRouteProps,
TError,
TConfirmRouteContext,
} from "@/types";
import { ConfirmRouteProps, TConfirmRouteContext } from "@/types";
export const ConfirmRouteContext = createContext<TConfirmRouteContext>({
linkData: {},
@ -55,53 +48,18 @@ function ConfirmRoute(props: ConfirmRouteProps) {
defaultPage,
socketUrl,
children,
confirmLinkResult,
confirmLinkParams,
confirmType,
} = props;
const [stateData, setStateData] = useState<TConfirmRouteContext>({
linkData: {},
roomData: {},
});
const [confirmLinkResult, setConfirmLinkResult] =
useState<TConfirmLinkResult>();
const [error, setError] = useState<TError>();
const [loading, setLoading] = useState(true);
const { i18n, t } = useTranslation(["Common"]);
const searchParams = useSearchParams();
const pathname = usePathname();
const isAuthenticated = !!socketUrl;
const getLinkParams = useCallback(() => {
const queryParams = Object.fromEntries(
new URLSearchParams(searchParams.toString()),
) as TConfirmLinkParams;
const posSeparator = pathname.lastIndexOf("/");
const type = !!posSeparator ? pathname?.slice(posSeparator + 1) : "";
const confirmLinkParams: TConfirmLinkParams = Object.assign(
{ type },
queryParams,
const [stateData, setStateData] = useState<TConfirmRouteContext | undefined>(
undefined,
);
return { type, confirmLinkParams };
}, [pathname, searchParams]);
const getConfirmLinkResult = useCallback(async () => {
const { confirmLinkParams } = getLinkParams();
try {
const response = (await checkConfirmLink(
confirmLinkParams,
)) as TConfirmLinkResult;
setConfirmLinkResult(response);
} catch (error) {
const knownError = error as TError;
setError(knownError);
}
}, [getLinkParams]);
const { i18n, t } = useTranslation(["Common"]);
const searchParams = useSearchParams();
const isAuthenticated = !!socketUrl;
useEffect(() => {
if (location.search.includes("culture")) return;
@ -121,15 +79,7 @@ function ConfirmRoute(props: ConfirmRouteProps) {
}
}, [doAuthenticated, isAuthenticated, defaultPage, socketUrl]);
useEffect(() => {
getConfirmLinkResult();
}, [getConfirmLinkResult]);
useEffect(() => {
if (confirmLinkResult?.result == undefined) return;
const { confirmLinkParams } = getLinkParams();
if (!stateData) {
switch (confirmLinkResult.result) {
case ValidationResult.Ok:
const confirmHeader = searchParams.toString();
@ -143,7 +93,6 @@ function ConfirmRoute(props: ConfirmRouteProps) {
title: confirmLinkResult?.title,
};
setStateData((val) => ({ ...val, linkData, roomData }));
setLoading(false);
break;
case ValidationResult.Invalid:
case ValidationResult.Expired:
@ -165,27 +114,19 @@ function ConfirmRoute(props: ConfirmRouteProps) {
});
notFound();
}
}, [confirmLinkResult, getLinkParams, t, searchParams]);
}
const { type, confirmLinkParams } = getLinkParams();
if (!type && confirmLinkParams.type)
if (!confirmType && confirmLinkParams.type)
window.location.replace(
`/confirm/${confirmLinkParams.type}?${searchParams.toString()}`,
);
if (error) {
console.error("FAILED checkConfirmLink", { error, confirmLinkParams });
notFound();
}
if (loading) {
return <AppLoader />;
}
return (
<ConfirmRouteContext.Provider
value={{ linkData: stateData.linkData, roomData: stateData.roomData }}
value={{
linkData: stateData?.linkData ?? {},
roomData: stateData?.roomData ?? {},
}}
>
{children}
</ConfirmRouteContext.Provider>