|
@@ -1,4 +1,4 @@
|
|
|
-import React, { useCallback } from 'react';
|
|
|
|
|
|
|
+import React, { useCallback, useState } from 'react';
|
|
|
|
|
|
|
|
import { useTranslation } from 'next-i18next';
|
|
import { useTranslation } from 'next-i18next';
|
|
|
import { useRouter } from 'next/router';
|
|
import { useRouter } from 'next/router';
|
|
@@ -18,6 +18,7 @@ export const InvitedForm = (props: InvitedFormProps): JSX.Element => {
|
|
|
const { t } = useTranslation();
|
|
const { t } = useTranslation();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const { data: user } = useCurrentUser();
|
|
const { data: user } = useCurrentUser();
|
|
|
|
|
+ const [loginErrors, setLoginErrors] = useState<Error[]>([]);
|
|
|
|
|
|
|
|
const { invitedFormUsername, invitedFormName } = props;
|
|
const { invitedFormUsername, invitedFormName } = props;
|
|
|
|
|
|
|
@@ -39,24 +40,45 @@ export const InvitedForm = (props: InvitedFormProps): JSX.Element => {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- await apiv3Post('/invited/activateInvited', { invitedForm });
|
|
|
|
|
- router.push('/');
|
|
|
|
|
|
|
+ const res = await apiv3Post('/invited/activateInvited', { invitedForm });
|
|
|
|
|
+ const { redirectTo } = res.data;
|
|
|
|
|
+ router.push(redirectTo);
|
|
|
}
|
|
}
|
|
|
catch (err) {
|
|
catch (err) {
|
|
|
- // TODO: show errors
|
|
|
|
|
|
|
+ setLoginErrors(err);
|
|
|
}
|
|
}
|
|
|
}, [router]);
|
|
}, [router]);
|
|
|
|
|
|
|
|
|
|
+ const formNotification = useCallback(() => {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <>
|
|
|
|
|
+ { loginErrors != null && loginErrors.length > 0 ? (
|
|
|
|
|
+ <p className="alert alert-danger">
|
|
|
|
|
+ {loginErrors.map((err, index) => {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <span key={index}>
|
|
|
|
|
+ {t(err.message)}<br/>
|
|
|
|
|
+ </span>
|
|
|
|
|
+ );
|
|
|
|
|
+ })}
|
|
|
|
|
+ </p>
|
|
|
|
|
+ ) : (
|
|
|
|
|
+ <p className="alert alert-success">
|
|
|
|
|
+ <strong>{ t('invited.discription_heading') }</strong><br></br>
|
|
|
|
|
+ <small>{ t('invited.discription') }</small>
|
|
|
|
|
+ </p>
|
|
|
|
|
+ ) }
|
|
|
|
|
+ </>
|
|
|
|
|
+ );
|
|
|
|
|
+ }, [loginErrors, t]);
|
|
|
|
|
+
|
|
|
if (user == null) {
|
|
if (user == null) {
|
|
|
return <></>;
|
|
return <></>;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<div className="noLogin-dialog p-3 mx-auto" id="noLogin-dialog">
|
|
<div className="noLogin-dialog p-3 mx-auto" id="noLogin-dialog">
|
|
|
- <p className="alert alert-success">
|
|
|
|
|
- <strong>{ t('invited.discription_heading') }</strong><br></br>
|
|
|
|
|
- <small>{ t('invited.discription') }</small>
|
|
|
|
|
- </p>
|
|
|
|
|
|
|
+ { formNotification() }
|
|
|
<form role="form" onSubmit={submitHandler} id="invited-form">
|
|
<form role="form" onSubmit={submitHandler} id="invited-form">
|
|
|
{/* Email Form */}
|
|
{/* Email Form */}
|
|
|
<div className="input-group">
|
|
<div className="input-group">
|
|
@@ -120,6 +142,7 @@ export const InvitedForm = (props: InvitedFormProps): JSX.Element => {
|
|
|
placeholder={t('Password')}
|
|
placeholder={t('Password')}
|
|
|
name="invitedForm[password]"
|
|
name="invitedForm[password]"
|
|
|
required
|
|
required
|
|
|
|
|
+ minLength={6}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
{/* Create Button */}
|
|
{/* Create Button */}
|