Web: fix confirm pages

This commit is contained in:
Timofey Boyko 2023-04-07 17:54:49 +03:00
parent bc27f6684e
commit 809929f18b
9 changed files with 167 additions and 135 deletions

View File

@ -466,7 +466,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
} }
/> />
<Route path={"/confirm"} element={<ConfirmRoute />} /> <Route path={"/confirm/*"} element={<ConfirmRoute />} />
<Route <Route
path={"/portal-settings"} path={"/portal-settings"}

View File

@ -1,5 +1,5 @@
import React from "react"; import React from "react";
import { Route } from "react-router-dom"; import { useLocation } from "react-router-dom";
import { ValidationResult } from "./../helpers/constants"; import { ValidationResult } from "./../helpers/constants";
import Loader from "@docspace/components/loader"; import Loader from "@docspace/components/loader";
import Section from "@docspace/common/components/Section"; import Section from "@docspace/common/components/Section";
@ -7,23 +7,21 @@ import { checkConfirmLink } from "@docspace/common/api/user"; //TODO: Move AuthS
import { combineUrl, getObjectByLocation } from "@docspace/common/utils"; import { combineUrl, getObjectByLocation } from "@docspace/common/utils";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
class ConfirmRoute extends React.Component { const ConfirmRoute = (props) => {
constructor(props) { const [state, setState] = React.useState({
super(props); linkData: {},
this.state = { isLoaded: false,
linkData: {}, });
isLoaded: false,
};
}
componentDidMount() { const location = useLocation();
const { forUnauthorized, isAuthenticated } = this.props;
React.useEffect(() => {
const { forUnauthorized, isAuthenticated } = props;
if (forUnauthorized && isAuthenticated) { if (forUnauthorized && isAuthenticated) {
this.props.logout(); props.logout();
} }
const { location } = this.props;
const { search } = location; const { search } = location;
const queryParams = getObjectByLocation(location); const queryParams = getObjectByLocation(location);
@ -53,10 +51,7 @@ class ConfirmRoute extends React.Component {
linkData, linkData,
}); });
this.setState({ setState((val) => ({ ...val, isLoaded: true, linkData }));
isLoaded: true,
linkData,
});
break; break;
case ValidationResult.Invalid: case ValidationResult.Invalid:
console.error("invlid link", { confirmLinkData, validationResult }); console.error("invlid link", { confirmLinkData, validationResult });
@ -98,33 +93,22 @@ class ConfirmRoute extends React.Component {
"/error" "/error"
); );
}); });
} }, []);
render() { // console.log(`ConfirmRoute render`, this.props, this.state);
const { component: Component, ...rest } = this.props;
// console.log(`ConfirmRoute render`, this.props, this.state); return !state.isLoaded ? (
<Section>
return ( <Section.SectionBody>
<Route <Loader className="pageLoader" type="rombs" size="40px" />
{...rest} </Section.SectionBody>
render={(props) => </Section>
!this.state.isLoaded ? ( ) : (
<Section> React.cloneElement(props.children, {
<Section.SectionBody> linkData: state.linkData,
<Loader className="pageLoader" type="rombs" size="40px" /> })
</Section.SectionBody> );
</Section> };
) : (
<Component
{...(props = { ...props, linkData: this.state.linkData })}
/>
)
}
/>
);
}
}
export default inject(({ auth }) => { export default inject(({ auth }) => {
const { isAuthenticated, logout } = auth; const { isAuthenticated, logout } = auth;

View File

@ -100,10 +100,10 @@ export const onItemClick = (e) => {
export const getPasswordErrorMessage = (t, settings) => { export const getPasswordErrorMessage = (t, settings) => {
return `${t("Common:PasswordMinimumLength")} ${ return `${t("Common:PasswordMinimumLength")} ${
settings ? settings.minLength : 8 settings ? settings?.minLength : 8
} ${settings.digits ? t("Common:PasswordLimitDigits") : ""} ${ } ${settings?.digits ? t("Common:PasswordLimitDigits") : ""} ${
settings.upperCase ? t("Common:PasswordLimitUpperCase") : "" settings?.upperCase ? t("Common:PasswordLimitUpperCase") : ""
} ${settings.specSymbols ? t("Common:PasswordLimitSpecialSymbols") : ""}`; } ${settings?.specSymbols ? t("Common:PasswordLimitSpecialSymbols") : ""}`;
}; };
export const getCategoryType = (location) => { export const getCategoryType = (location) => {

View File

@ -1,5 +1,5 @@
import React, { lazy } from "react"; import React, { lazy } from "react";
import { Switch } from "react-router-dom"; import { Routes, Route } from "react-router-dom";
import ConfirmRoute from "../../helpers/confirmRoute"; import ConfirmRoute from "../../helpers/confirmRoute";
import ConfirmWrapper from "./ConfirmWrapper"; import ConfirmWrapper from "./ConfirmWrapper";
@ -22,78 +22,137 @@ const DeactivatePortal = lazy(() =>
const ContinuePortal = lazy(() => import("./sub-components/continuePortal")); const ContinuePortal = lazy(() => import("./sub-components/continuePortal"));
const Auth = lazy(() => import("./sub-components/auth")); const Auth = lazy(() => import("./sub-components/auth"));
const Confirm = ({ match }) => { const Confirm = () => {
//console.log("Confirm render"); //console.log("Confirm render");
const path = match.path;
return (
<>
<Switch>
<ConfirmRoute
forUnauthorized
path={`${path}/LinkInvite`}
component={CreateUserForm}
/>
<ConfirmRoute
forUnauthorized
path={`${path}/Activation`}
component={ActivateUserForm}
/>
<ConfirmRoute
exact
path={`${path}/EmailActivation`}
component={ActivateEmailForm}
/>
<ConfirmRoute
exact
path={`${path}/EmailChange`}
component={ChangeEmailForm}
/>
<ConfirmRoute
forUnauthorized
path={`${path}/PasswordChange`}
component={ChangePasswordForm}
/>
<ConfirmRoute
exact
path={`${path}/ProfileRemove`}
component={ProfileRemoveForm}
/>
<ConfirmRoute
exact
path={`${path}/PhoneActivation`}
component={ChangePhoneForm}
/>
<ConfirmRoute
exact
path={`${path}/PortalOwnerChange`}
component={ChangeOwnerForm}
/>
<ConfirmRoute exact path={`${path}/TfaAuth`} component={TfaAuthForm} />
<ConfirmRoute
exact
path={`${path}/TfaActivation`}
component={TfaActivationForm}
/>
<ConfirmRoute
exact
path={`${path}/PortalRemove`}
component={RemovePortal}
/>
<ConfirmRoute
exact
path={`${path}/PortalSuspend`}
component={DeactivatePortal}
/>
<ConfirmRoute
exact
path={`${path}/PortalContinue`}
component={ContinuePortal}
/>
<ConfirmRoute forUnauthorized path={`${path}/Auth`} component={Auth} />
{/* <Route component={Error404} /> */} return (
</Switch> <Routes>
</> <Route
path={`LinkInvite`}
element={
<ConfirmRoute forUnauthorized>
<CreateUserForm />
</ConfirmRoute>
}
/>
<Route
path={`Activation`}
element={
<ConfirmRoute forUnauthorized>
<ActivateUserForm />
</ConfirmRoute>
}
/>
<Route
path={`EmailActivation`}
element={
<ConfirmRoute>
<ActivateEmailForm />
</ConfirmRoute>
}
/>
<Route
path={`EmailChange`}
element={
<ConfirmRoute>
<ChangeEmailForm />
</ConfirmRoute>
}
/>
<Route
path={`PasswordChange`}
element={
<ConfirmRoute forUnauthorized>
<ChangePasswordForm />
</ConfirmRoute>
}
/>
<Route
path={`ProfileRemove`}
element={
<ConfirmRoute>
<ProfileRemoveForm />
</ConfirmRoute>
}
/>
<Route
path={`PhoneActivation`}
element={
<ConfirmRoute>
<ChangePhoneForm />
</ConfirmRoute>
}
/>
<Route
path={`PortalOwnerChange`}
element={
<ConfirmRoute>
<ChangeOwnerForm />
</ConfirmRoute>
}
/>
<Route
path={`TfaAuth`}
element={
<ConfirmRoute>
<TfaAuthForm />
</ConfirmRoute>
}
/>
<Route
path={`TfaActivation`}
element={
<ConfirmRoute>
<TfaActivationForm />
</ConfirmRoute>
}
/>
<Route
path={`PortalRemove`}
element={
<ConfirmRoute>
<RemovePortal />
</ConfirmRoute>
}
/>
<Route
path={`PortalSuspend`}
element={
<ConfirmRoute>
<DeactivatePortal />
</ConfirmRoute>
}
/>
<Route
path={`PortalContinue`}
element={
<ConfirmRoute>
<ContinuePortal />
</ConfirmRoute>
}
/>
<Route
path={`Auth`}
element={
<ConfirmRoute forUnauthorized>
<Auth />
</ConfirmRoute>
}
/>
</Routes>
); );
}; };

View File

@ -71,7 +71,6 @@ class ChangeEmail extends React.PureComponent {
} }
ChangeEmail.propTypes = { ChangeEmail.propTypes = {
location: PropTypes.object.isRequired,
changeEmail: PropTypes.func.isRequired, changeEmail: PropTypes.func.isRequired,
}; };
const ChangeEmailForm = (props) => ( const ChangeEmailForm = (props) => (

View File

@ -29,7 +29,7 @@ const ContinuePortal = (props) => {
try { try {
await continuePortal(linkData.confirmHeader); await continuePortal(linkData.confirmHeader);
setIsReactivate(true); setIsReactivate(true);
setTimeout(() => (location.href = "/"), 10000); setTimeout(() => (window.location.href = "/"), 10000);
} catch (e) { } catch (e) {
toastr.error(e); toastr.error(e);
} }

View File

@ -42,7 +42,7 @@ const CreateUserForm = (props) => {
const { settings, t, greetingTitle, providers, isDesktop, linkData } = props; const { settings, t, greetingTitle, providers, isDesktop, linkData } = props;
const inputRef = React.useRef(null); const inputRef = React.useRef(null);
const emailFromLink = linkData.email ? linkData.email : ""; const emailFromLink = linkData?.email ? linkData.email : "";
const [moreAuthVisible, setMoreAuthVisible] = useState(false); const [moreAuthVisible, setMoreAuthVisible] = useState(false);
const [ssoLabel, setSsoLabel] = useState(""); const [ssoLabel, setSsoLabel] = useState("");
@ -636,10 +636,6 @@ const CreateUserForm = (props) => {
); );
}; };
CreateUserForm.propTypes = {
location: PropTypes.object.isRequired,
};
export default inject(({ auth }) => { export default inject(({ auth }) => {
const { const {
login, login,

View File

@ -33,7 +33,7 @@ const DeactivatePortal = (props) => {
try { try {
await suspendPortal(linkData.confirmHeader); await suspendPortal(linkData.confirmHeader);
setIsDeactivate(true); setIsDeactivate(true);
setTimeout(() => (location.href = url), 10000); setTimeout(() => (window.location.href = url), 10000);
} catch (e) { } catch (e) {
toastr.error(e); toastr.error(e);
} }

View File

@ -35,15 +35,9 @@ const App: React.FC<ILoginProps> = (props) => {
<MobxProvider {...loginStore}> <MobxProvider {...loginStore}>
<SimpleNav {...props} /> <SimpleNav {...props} />
<Routes> <Routes>
<Route path="/login/error"> <Route path="/login/error" element={<InvalidRoute />} />
<InvalidRoute /> <Route path="/login/code" element={<CodeLogin {...props} />} />
</Route> <Route path="/login" element={<Login {...props} />} />
<Route path="/login/code">
<CodeLogin {...props} />
</Route>
<Route path="/login">
<Login {...props} />
</Route>
</Routes> </Routes>
</MobxProvider> </MobxProvider>
); );