Fix confirm link invite

This commit is contained in:
Alexey Safronov 2023-12-06 15:40:03 +04:00
parent 66ea36b36f
commit 39d8a9b85b
5 changed files with 81 additions and 37 deletions

View File

@ -1,13 +1,20 @@
import React from "react";
import { useLocation, Navigate } from "react-router-dom";
import { ValidationResult } from "./../helpers/constants";
import { AuthenticatedAction, ValidationResult } from "./../helpers/constants";
import Loader from "@docspace/components/loader";
import Section from "@docspace/common/components/Section";
import { checkConfirmLink } from "@docspace/common/api/user"; //TODO: Move AuthStore
import { combineUrl, getObjectByLocation } from "@docspace/common/utils";
import { inject, observer } from "mobx-react";
const ConfirmRoute = (props) => {
const ConfirmRoute = ({
doAuthenticated,
isAuthenticated,
storeIsLoaded,
logout,
defaultPage,
children,
}) => {
const [state, setState] = React.useState({
linkData: {},
isLoaded: false,
@ -35,10 +42,13 @@ const ConfirmRoute = (props) => {
);
React.useEffect(() => {
const { forUnauthorized, isAuthenticated } = props;
if (!storeIsLoaded) return;
if (forUnauthorized && isAuthenticated) {
props.logout();
if (isAuthenticated && doAuthenticated != AuthenticatedAction.None) {
if (doAuthenticated == AuthenticatedAction.Redirect)
return window.location.replace(defaultPage);
if (doAuthenticated == AuthenticatedAction.Logout) logout();
}
const { search } = location;
@ -135,7 +145,7 @@ const ConfirmRoute = (props) => {
"/error"
);
});
}, [getData]);
}, [getData, doAuthenticated, isAuthenticated, storeIsLoaded, logout]);
// console.log(`ConfirmRoute render`, this.props, this.state);
@ -146,17 +156,24 @@ const ConfirmRoute = (props) => {
</Section.SectionBody>
</Section>
) : (
React.cloneElement(props.children, {
React.cloneElement(children, {
linkData: state.linkData,
roomData: state.roomData,
})
);
};
ConfirmRoute.defaultProps = {
doAuthenticated: AuthenticatedAction.None,
};
export default inject(({ auth }) => {
const { isAuthenticated, logout } = auth;
const { isAuthenticated, logout, isLoaded, settingsStore } = auth;
const { defaultPage } = settingsStore;
return {
isAuthenticated,
logout,
storeIsLoaded: isLoaded,
defaultPage,
};
})(observer(ConfirmRoute));

View File

@ -154,3 +154,9 @@ export const ARTICLE_ALERTS = Object.freeze({
TeamTraining: "TeamTraining",
SubmitToFormGallery: "SubmitToFormGallery",
});
export const AuthenticatedAction = Object.freeze({
None: 0,
Logout: 1,
Redirect: 2,
});

View File

@ -179,4 +179,10 @@ export const RegisterContainer = styled.div`
.password-field-wrapper {
width: 100%;
}
.signin-container {
width: 100%;
margin-top: 24px;
text-align: center;
}
}`;

View File

@ -37,6 +37,7 @@ import {
GreetingContainer,
RegisterContainer,
} from "./StyledCreateUser";
import combineUrl from "@docspace/common/utils/combineUrl";
const CreateUserForm = (props) => {
const {
@ -107,12 +108,7 @@ const CreateUserForm = (props) => {
}, []);*/
useEffect(() => {
const { isAuthenticated, logout, linkData } = props;
if (isAuthenticated) {
const path = window.location;
logout().then(() => window.location.replace(path));
}
const { linkData } = props;
const fetchData = async () => {
if (linkData.type === "LinkInvite") {
@ -128,7 +124,7 @@ const CreateUserForm = (props) => {
};
fetchData();
}, [props.isAuthenticated]);
}, []);
const onSubmit = () => {
const { linkData, hashSettings } = props;
@ -419,6 +415,12 @@ const CreateUserForm = (props) => {
setIsPasswordErrorShow(true);
};
const onSignIn = () => {
return window.location.replace(
combineUrl(window.DocSpaceConfig?.proxy?.url, "/login")
);
};
const userAvatar = user && user.hasAvatar ? user.avatar : DefaultUserPhoto;
return (
@ -431,7 +433,8 @@ const CreateUserForm = (props) => {
fontSize="23px"
fontWeight={700}
textAlign="left"
className="greeting-title">
className="greeting-title"
>
{greetingTitle}
</Text>
@ -462,7 +465,8 @@ const CreateUserForm = (props) => {
t={t}
i18nKey="WelcomeToRoom"
ns="Confirm"
key={roomName}>
key={roomName}
>
Welcome to the <strong>{{ roomName }}</strong> room!
</Trans>
) : (
@ -500,7 +504,8 @@ const CreateUserForm = (props) => {
fontWeight="600"
color={currentColorScheme?.main?.accent}
className="more-label"
onClick={moreAuthOpen}>
onClick={moreAuthOpen}
>
{t("Common:ShowMore")}
</Link>
)}
@ -529,7 +534,8 @@ const CreateUserForm = (props) => {
emailErrorText
? t(`Common:${emailErrorText}`)
: t("Common:RequiredField")
}>
}
>
<EmailInput
id="login"
name="login"
@ -562,7 +568,8 @@ const CreateUserForm = (props) => {
: fname.trim().length === 0
? t("Common:RequiredField")
: t("Common:IncorrectFirstName")
}>
}
>
<TextInput
id="first-name"
name="first-name"
@ -590,7 +597,8 @@ const CreateUserForm = (props) => {
: sname.trim().length === 0
? t("Common:RequiredField")
: t("Common:IncorrectLastName")
}>
}
>
<TextInput
id="last-name"
name="last-name"
@ -614,7 +622,8 @@ const CreateUserForm = (props) => {
hasError={isPasswordErrorShow && !passwordValid}
errorMessage={`${t(
"Common:PasswordLimitMessage"
)}: ${getPasswordErrorMessage(t, settings)}`}>
)}: ${getPasswordErrorMessage(t, settings)}`}
>
<PasswordInput
simpleView={false}
hideNewPasswordButton
@ -670,6 +679,19 @@ const CreateUserForm = (props) => {
onClick={onSubmit}
/>
</div>
<div className="signin-container">
<Link
isHovered
type="action"
fontSize="13px"
fontWeight="600"
color={currentColorScheme?.main?.accent}
className="signin-button"
onClick={onSignIn}
>
{t("Common:LoginButton")}
</Link>
</div>
</form>
)}
@ -710,14 +732,7 @@ const CreateUserForm = (props) => {
};
export default inject(({ auth }) => {
const {
logout,
isAuthenticated,
settingsStore,
providers,
thirdPartyLogin,
capabilities,
} = auth;
const { settingsStore, providers, thirdPartyLogin, capabilities } = auth;
const {
passwordSettings,
greetingSettings,
@ -733,8 +748,7 @@ export default inject(({ auth }) => {
greetingTitle: greetingSettings,
hashSettings,
defaultPage,
isAuthenticated,
logout,
getSettings,
getPortalPasswordSettings,
thirdPartyLogin,

View File

@ -5,6 +5,7 @@ import ConfirmRoute from "../helpers/confirmRoute";
import ErrorBoundary from "@docspace/common/components/ErrorBoundary";
import Error404 from "SRC_DIR/pages/Errors/404";
import { AuthenticatedAction } from "../helpers/constants";
const Confirm = loadable(() => import("../pages/Confirm"));
@ -53,7 +54,7 @@ const confirmRoutes = [
{
path: "EmpInvite",
element: (
<ConfirmRoute forUnauthorized>
<ConfirmRoute doAuthenticated={AuthenticatedAction.Redirect}>
<CreateUserForm />
</ConfirmRoute>
),
@ -61,7 +62,7 @@ const confirmRoutes = [
{
path: "LinkInvite",
element: (
<ConfirmRoute forUnauthorized>
<ConfirmRoute doAuthenticated={AuthenticatedAction.Redirect}>
<CreateUserForm />
</ConfirmRoute>
),
@ -69,7 +70,7 @@ const confirmRoutes = [
{
path: "Activation",
element: (
<ConfirmRoute forUnauthorized>
<ConfirmRoute doAuthenticated={AuthenticatedAction.Logout}>
<ActivateUserForm />
</ConfirmRoute>
),
@ -93,7 +94,7 @@ const confirmRoutes = [
{
path: "PasswordChange",
element: (
<ConfirmRoute forUnauthorized>
<ConfirmRoute doAuthenticated={AuthenticatedAction.Logout}>
<ChangePasswordForm />
</ConfirmRoute>
),
@ -165,7 +166,7 @@ const confirmRoutes = [
{
path: "Auth",
element: (
<ConfirmRoute forUnauthorized>
<ConfirmRoute doAuthenticated={AuthenticatedAction.Logout}>
<Auth />
</ConfirmRoute>
),