Files
astuto/app/javascript/components/TenantSignUp/TenantSignUpForm.tsx

84 lines
2.8 KiB
TypeScript
Raw Normal View History

2022-07-18 10:47:54 +02:00
import * as React from 'react';
2022-07-22 16:50:36 +02:00
import { SubmitHandler, useForm } from 'react-hook-form';
2022-07-18 10:47:54 +02:00
import I18n from 'i18n-js';
import Box from '../common/Box';
import Button from '../common/Button';
import Spinner from '../common/Spinner';
import { DangerText } from '../common/CustomTexts';
2022-07-22 16:50:36 +02:00
import { ITenantSignUpTenantForm } from './TenantSignUpP';
import HttpStatus from '../../constants/http_status';
import { getLabel, getValidationMessage } from '../../helpers/formUtils';
2022-07-18 10:47:54 +02:00
interface Props {
isSubmitting: boolean;
error: string;
2022-07-22 16:50:36 +02:00
handleSignUpSubmit(siteName: string, subdomain: string): void;
2022-07-18 10:47:54 +02:00
}
2022-07-22 16:50:36 +02:00
const TenantSignUpForm = ({
isSubmitting,
error,
handleSignUpSubmit,
}: Props) => {
const { register, handleSubmit, formState: { errors } } = useForm<ITenantSignUpTenantForm>();
const onSubmit: SubmitHandler<ITenantSignUpTenantForm> = data => {
handleSignUpSubmit(data.siteName, data.subdomain);
2022-07-18 10:47:54 +02:00
}
2022-07-22 16:50:36 +02:00
return (
<Box customClass="tenantSignUpStep2">
<h3>{ I18n.t('signup.step2.title') }</h3>
2022-07-18 10:47:54 +02:00
2022-07-22 16:50:36 +02:00
<form onSubmit={handleSubmit(onSubmit)}>
<div className="formRow">
<input
{...register('siteName', { required: true })}
autoFocus
placeholder={getLabel('tenant', 'site_name')}
2022-07-22 16:50:36 +02:00
id="tenantSiteName"
className="formControl"
/>
<DangerText>{errors.siteName?.type === 'required' && getValidationMessage('required', 'tenant', 'site_name')}</DangerText>
2022-07-22 16:50:36 +02:00
</div>
2022-07-18 10:47:54 +02:00
2022-07-22 16:50:36 +02:00
<div className="formRow">
<div className="input-group">
2022-07-18 10:47:54 +02:00
<input
2022-07-22 16:50:36 +02:00
{...register('subdomain', {
required: true,
validate: async (newSubdomain) => {
const res = await fetch(`/is_available?new_subdomain=${newSubdomain}`);
return res.status === HttpStatus.OK;
},
})}
placeholder={getLabel('tenant', 'subdomain')}
2022-07-22 16:50:36 +02:00
id="tenantSubdomain"
2022-07-18 10:47:54 +02:00
className="formControl"
/>
2022-07-22 16:50:36 +02:00
<div className="input-group-append">
<div className="input-group-text">.astuto.io</div>
2022-07-18 10:47:54 +02:00
</div>
</div>
2022-07-22 16:50:36 +02:00
<DangerText>
{errors.subdomain?.type === 'required' && getValidationMessage('required', 'tenant', 'subdomain')}
2022-07-22 16:50:36 +02:00
</DangerText>
<DangerText>
{errors.subdomain?.type === 'validate' && I18n.t('signup.step2.validations.subdomain_already_taken')}
</DangerText>
</div>
2022-07-18 10:47:54 +02:00
2022-07-22 16:50:36 +02:00
<Button
onClick={() => null}
className="tenantConfirm"
>
{ isSubmitting ? <Spinner /> : I18n.t('signup.step2.create_button') }
</Button>
2022-07-18 10:47:54 +02:00
2022-07-22 16:50:36 +02:00
{ error !== '' && <DangerText>{ error }</DangerText> }
</form>
</Box>
);
2022-07-18 10:47:54 +02:00
}
export default TenantSignUpForm;