Skip to content
Snippets Groups Projects
Unverified Commit 43dd29b2 authored by Samuel Couillard's avatar Samuel Couillard Committed by GitHub
Browse files

Refactor RoomJoinForm to support translation (#5212)


* Refactor Room Join form to support translation

* Remove JoinFormHelpers

* Add missing header

---------

Co-authored-by: default avatarAhmad Farhat <ahmad.af.farhat@gmail.com>
parent e99bbab0
No related branches found
No related tags found
No related merge requests found
...@@ -492,6 +492,11 @@ ...@@ -492,6 +492,11 @@
"min": "Name must be at least 2 characters long" "min": "Name must be at least 2 characters long"
} }
}, },
"room_join": {
"name": {
"required": "Please enter your name."
}
},
"url": { "url": {
"invalid": "Invalid URL" "invalid": "Invalid URL"
} }
...@@ -504,6 +509,21 @@ ...@@ -504,6 +509,21 @@
} }
} }
}, },
"room_join": {
"fields": {
"name": {
"label": "Name",
"placeholder": "Enter your name"
},
"access_code": {
"label": "Access Code",
"placeholder": "Enter the access code"
},
"recording_consent": {
"label": "I acknowledge that this session may be recorded. This may include my voice and video if enabled."
}
}
},
"user": { "user": {
"signup": { "signup": {
"fields": { "fields": {
......
...@@ -25,12 +25,10 @@ import { ...@@ -25,12 +25,10 @@ import {
} from 'react-bootstrap'; } from 'react-bootstrap';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useForm } from 'react-hook-form';
import usePublicRoom from '../../../../hooks/queries/rooms/usePublicRoom'; import usePublicRoom from '../../../../hooks/queries/rooms/usePublicRoom';
import { useAuth } from '../../../../contexts/auth/AuthProvider'; import { useAuth } from '../../../../contexts/auth/AuthProvider';
import useRoomStatus from '../../../../hooks/mutations/rooms/useRoomStatus'; import useRoomStatus from '../../../../hooks/mutations/rooms/useRoomStatus';
import useEnv from '../../../../hooks/queries/env/useEnv'; import useEnv from '../../../../hooks/queries/env/useEnv';
import { joinFormConfig, joinFormFields as fields } from '../../../../helpers/forms/JoinFormHelpers';
import subscribeToRoom from '../../../../channels/rooms_channel'; import subscribeToRoom from '../../../../channels/rooms_channel';
import RequireAuthentication from './RequireAuthentication'; import RequireAuthentication from './RequireAuthentication';
import GGSpinner from '../../../shared_components/utilities/GGSpinner'; import GGSpinner from '../../../shared_components/utilities/GGSpinner';
...@@ -41,6 +39,7 @@ import Form from '../../../shared_components/forms/Form'; ...@@ -41,6 +39,7 @@ import Form from '../../../shared_components/forms/Form';
import FormControl from '../../../shared_components/forms/FormControl'; import FormControl from '../../../shared_components/forms/FormControl';
import FormControlGeneric from '../../../shared_components/forms/FormControlGeneric'; import FormControlGeneric from '../../../shared_components/forms/FormControlGeneric';
import RoomJoinPlaceholder from './RoomJoinPlaceholder'; import RoomJoinPlaceholder from './RoomJoinPlaceholder';
import useRoomJoinForm from '../../../../hooks/forms/rooms/useRoomJoinForm';
export default function RoomJoin() { export default function RoomJoin() {
const { t } = useTranslation(); const { t } = useTranslation();
...@@ -53,7 +52,7 @@ export default function RoomJoin() { ...@@ -53,7 +52,7 @@ export default function RoomJoin() {
const { data: env } = useEnv(); const { data: env } = useEnv();
const methods = useForm(joinFormConfig); const { methods, fields } = useRoomJoinForm();
const location = useLocation(); const location = useLocation();
const path = encodeURIComponent(location.pathname); const path = encodeURIComponent(location.pathname);
......
...@@ -16,43 +16,41 @@ ...@@ -16,43 +16,41 @@
import * as yup from 'yup'; import * as yup from 'yup';
import { yupResolver } from '@hookform/resolvers/yup'; import { yupResolver } from '@hookform/resolvers/yup';
import { useTranslation } from 'react-i18next';
import { useForm } from 'react-hook-form';
import { useCallback, useMemo } from 'react';
const validationSchema = yup.object({ export function useRoomJoinFormValidation() {
// TODO: amir - Revisit validations. const { t } = useTranslation();
name: yup.string().required('Please enter your full name.'), return useMemo(() => (yup.object({
name: yup.string().required(t('forms.validations.room_join.name.required')),
access_code: yup.string(), access_code: yup.string(),
consent: yup.boolean().oneOf([true], ''), consent: yup.boolean().oneOf([true], ''),
}); })), [t]);
}
export const joinFormConfig = { export default function useRoomJoinForm({ defaultValues: _defaultValues, ..._config } = {}) {
mode: 'onSubmit', const { t, i18n } = useTranslation();
criteriaMode: 'firstError',
defaultValues: {
name: '',
access_code: '',
},
resolver: yupResolver(validationSchema),
};
export const joinFormFields = { const fields = useMemo(() => ({
name: { name: {
label: 'Name', label: t('forms.room_join.fields.name.label'),
placeHolder: 'Enter your name', placeHolder: t('forms.room_join.fields.name.placeholder'),
controlId: 'joinFormName', controlId: 'joinFormName',
hookForm: { hookForm: {
id: 'name', id: 'name',
}, },
}, },
accessCode: { accessCode: {
label: 'Access Code', label: t('forms.room_join.fields.access_code.label'),
placeHolder: 'Enter the access code', placeHolder: t('forms.room_join.fields.access_code.placeholder'),
controlId: 'joinFormCode', controlId: 'joinFormCode',
hookForm: { hookForm: {
id: 'access_code', id: 'access_code',
}, },
}, },
recordingConsent: { recordingConsent: {
label: 'I acknowledge that this session may be recorded. This may include my voice and video if enabled.', label: t('forms.room_join.fields.recording_consent.label'),
controlId: 'consentCheck', controlId: 'consentCheck',
hookForm: { hookForm: {
id: 'consent', id: 'consent',
...@@ -61,4 +59,29 @@ export const joinFormFields = { ...@@ -61,4 +59,29 @@ export const joinFormFields = {
}, },
}, },
}, },
}; }), [i18n.resolvedLanguage]);
const validationSchema = useRoomJoinFormValidation();
const config = useMemo(() => ({
...{
mode: 'onSubmit',
criteriaMode: 'firstError',
defaultValues: {
...{
name: '',
access_code: '',
},
..._defaultValues,
},
resolver: yupResolver(validationSchema),
},
..._config,
}), [validationSchema, _defaultValues]);
const methods = useForm(config);
const reset = useCallback(() => methods.reset(config.defaultValues), [methods.reset, config.defaultValues]);
return { methods, fields, reset };
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment