124 lines
6.5 KiB
TypeScript
Raw Normal View History

2021-03-06 14:42:56 +01:00
import { memo } from "react";
2021-03-04 18:15:48 +01:00
import { Template } from "./Template";
2021-03-06 14:42:56 +01:00
import type { KcProps } from "./KcProps";
2021-06-23 08:16:51 +02:00
import type { KcContextBase } from "../getKcContext/KcContextBase";
2021-03-07 15:37:37 +01:00
import { useKcMessage } from "../i18n/useKcMessage";
2021-03-04 18:15:48 +01:00
import { cx } from "tss-react";
2021-06-23 08:16:51 +02:00
export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Register; } & KcProps) => {
2021-03-04 18:15:48 +01:00
2021-03-07 15:37:37 +01:00
const { msg, msgStr } = useKcMessage();
2021-03-04 18:15:48 +01:00
2021-03-06 14:42:56 +01:00
const {
2021-03-04 18:15:48 +01:00
url,
messagesPerField,
register,
realm,
passwordRequired,
recaptchaRequired,
recaptchaSiteKey
2021-03-06 14:42:56 +01:00
} = kcContext;
2021-03-04 18:15:48 +01:00
return (
<Template
2021-03-08 00:09:52 +01:00
{...{ kcContext, ...props }}
2021-03-07 15:37:37 +01:00
headerNode={msg("registerTitle")}
2021-03-04 18:15:48 +01:00
formNode={
2021-03-06 14:42:56 +01:00
<form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
2021-03-04 18:15:48 +01:00
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('firstName', props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
2021-03-07 15:37:37 +01:00
<label htmlFor="firstName" className={cx(props.kcLabelClass)}>{msg("firstName")}</label>
2021-03-04 18:15:48 +01:00
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="firstName" className={cx(props.kcInputClass)} name="firstName"
2021-03-05 00:44:27 +01:00
defaultValue={register.formData.firstName ?? ""}
2021-03-04 18:15:48 +01:00
/>
</div>
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
2021-03-07 15:37:37 +01:00
<label htmlFor="lastName" className={cx(props.kcLabelClass)}>{msg("lastName")}</label>
2021-03-04 18:15:48 +01:00
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="lastName" className={cx(props.kcInputClass)} name="lastName"
2021-03-05 00:44:27 +01:00
defaultValue={register.formData.lastName ?? ""}
2021-03-04 18:15:48 +01:00
/>
</div>
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('email', props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
2021-03-07 15:37:37 +01:00
<label htmlFor="email" className={cx(props.kcLabelClass)}>{msg("email")}</label>
2021-03-04 18:15:48 +01:00
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="email" className={cx(props.kcInputClass)} name="email"
2021-03-05 00:44:27 +01:00
defaultValue={register.formData.email ?? ""} autoComplete="email"
2021-03-04 18:15:48 +01:00
/>
</div>
</div>
{
!realm.registrationEmailAsUsername &&
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('username', props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
2021-03-07 15:37:37 +01:00
<label htmlFor="username" className={cx(props.kcLabelClass)}>{msg("username")}</label>
2021-03-04 18:15:48 +01:00
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="username" className={cx(props.kcInputClass)} name="username"
2021-03-05 00:44:27 +01:00
defaultValue={register.formData.username ?? ""} autoComplete="username" />
2021-03-04 18:15:48 +01:00
</div>
</div >
}
{
passwordRequired &&
<>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
2021-03-07 15:37:37 +01:00
<label htmlFor="password" className={cx(props.kcLabelClass)}>{msg("password")}</label>
2021-03-04 18:15:48 +01:00
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
<input type="password" id="password" className={cx(props.kcInputClass)} name="password" autoComplete="new-password" />
2021-03-04 18:15:48 +01:00
</div>
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
2021-03-07 15:37:37 +01:00
<label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>{msg("passwordConfirm")}</label>
2021-03-04 18:15:48 +01:00
</div>
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
<input type="password" id="password-confirm" className={cx(props.kcInputClass)} name="password-confirm" />
2021-03-04 18:15:48 +01:00
</div>
</div>
</>
}
{
recaptchaRequired &&
<div className="form-group">
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcInputWrapperClass)}>
2021-03-04 18:15:48 +01:00
<div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
</div>
</div>
}
2021-03-06 14:42:56 +01:00
<div className={cx(props.kcFormGroupClass)}>
<div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
<div className={cx(props.kcFormOptionsWrapperClass)}>
2021-03-07 15:37:37 +01:00
<span><a href={url.loginUrl}>{msg("backToLogin")}</a></span>
2021-03-04 18:15:48 +01:00
</div>
</div>
2021-03-06 14:42:56 +01:00
<div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
<input className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)} type="submit"
2021-03-22 05:21:05 +01:00
value={msgStr("doRegister")} />
2021-03-04 18:15:48 +01:00
</div>
</div>
</form >
}
/>
);
});