diff --git a/frontend/src/contexts/featureContext.ts b/frontend/src/contexts/featureContext.ts new file mode 100644 index 0000000000000000000000000000000000000000..0fd76a4e800c9e5483994834b9ad0a06cb9717f9 --- /dev/null +++ b/frontend/src/contexts/featureContext.ts @@ -0,0 +1,15 @@ +import { createContext, useContext } from 'react' + +export interface IFeatureContext { + // Controls whether the contact person at unit field is shown in the register new guest wizard + displayContactAtUnit: boolean + // Controls whether the optional field is shown in the register new guest wizard + displayComment: boolean +} + +export const FeatureContext = createContext<IFeatureContext>({ + displayContactAtUnit: true, + displayComment: true, +}) + +export const useFeatureContext = () => useContext(FeatureContext) diff --git a/frontend/src/contexts/index.ts b/frontend/src/contexts/index.ts index d6231cb0f551c506eac6042db83d5a4f601f1c01..c7483440839d9287712efcb094b305e4a826db75 100644 --- a/frontend/src/contexts/index.ts +++ b/frontend/src/contexts/index.ts @@ -1,3 +1,4 @@ import { UserContext, useUserContext } from './userContext' +import { FeatureContext } from './featureContext' -export { UserContext, useUserContext } +export { UserContext, useUserContext, FeatureContext } diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index becf7b9f7675bec4c76f55837779dc279adbc1f6..6532d0cc78dfe24c6ba31242d36bb480a220afe3 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -11,19 +11,22 @@ import getTheme from 'themes' import App from 'routes' import { UserProvider } from 'providers' import reportWebVitals from './reportWebVitals' +import FeatureProvider from './providers/featureProvider' function appRoot() { return ( <React.StrictMode> <Router> <LocalizationProvider dateAdapter={AdapterDateFns}> - <ThemeProvider theme={getTheme()}> - <UserProvider> - <Suspense fallback={<CircularProgress />}> - <App /> - </Suspense> - </UserProvider> - </ThemeProvider> + <FeatureProvider> + <ThemeProvider theme={getTheme()}> + <UserProvider> + <Suspense fallback={<CircularProgress />}> + <App /> + </Suspense> + </UserProvider> + </ThemeProvider> + </FeatureProvider> </LocalizationProvider> </Router> </React.StrictMode> diff --git a/frontend/src/providers/featureProvider.tsx b/frontend/src/providers/featureProvider.tsx new file mode 100644 index 0000000000000000000000000000000000000000..962e46aa14d866dd640a5ded31bce38c039753c0 --- /dev/null +++ b/frontend/src/providers/featureProvider.tsx @@ -0,0 +1,32 @@ +import { FeatureContext } from 'contexts' +import React from 'react' +import { appInst } from '../appConfig' +import { IFeatureContext } from '../contexts/featureContext' + +type FeatureProviderProps = { + children: React.ReactNode +} + +function FeatureProvider(props: FeatureProviderProps) { + const { children } = props + + let features: IFeatureContext + switch (appInst) { + case 'uib': + features = { displayContactAtUnit: false, displayComment: false } + break + + case 'uio': + default: + features = { displayContactAtUnit: true, displayComment: true } + break + } + + return ( + <FeatureContext.Provider value={features}> + {children} + </FeatureContext.Provider> + ) +} + +export default FeatureProvider diff --git a/frontend/src/routes/sponsor/register/stepPersonForm.tsx b/frontend/src/routes/sponsor/register/stepPersonForm.tsx index c13e7b5e541a58e145e2c1db3dee6e70cc220e69..7de1357d8b545571324e562a3c0297c849ca5a55 100644 --- a/frontend/src/routes/sponsor/register/stepPersonForm.tsx +++ b/frontend/src/routes/sponsor/register/stepPersonForm.tsx @@ -11,9 +11,10 @@ import { } from '@mui/material' import { Controller, SubmitHandler, useForm } from 'react-hook-form' import { DatePicker } from '@mui/lab' -import { +import React, { forwardRef, Ref, + useContext, useEffect, useImperativeHandle, useState, @@ -24,6 +25,7 @@ import { PersonFormMethods } from './personFormMethods' import useOus, { enSort, nbSort } from '../../../hooks/useOus' import useRoleTypes, { RoleTypeData } from '../../../hooks/useRoleTypes' import { isValidEmail } from '../../../utils' +import { FeatureContext } from '../../../contexts' interface StepPersonFormProperties { nextHandler(formState: RegisterFormData): void @@ -43,6 +45,7 @@ const StepPersonForm = forwardRef( formData.role_type ? formData.role_type : '' ) const roleTypes = useRoleTypes() + const { displayContactAtUnit, displayComment } = useContext(FeatureContext) const roleTypeSort = () => (a: RoleTypeData, b: RoleTypeData) => { if (i18n.language === 'en') { @@ -239,19 +242,23 @@ const StepPersonForm = forwardRef( )} /> - <TextField - id="contact_person" - label={t('input.contactPersonUnit')} - {...register(`contact_person_unit`)} - /> + {displayContactAtUnit && ( + <TextField + id="contact_person" + label={t('input.contactPersonUnit')} + {...register(`contact_person_unit`)} + /> + )} - <TextField - id="comment" - label={t('input.comment')} - multiline - rows={5} - {...register(`comment`)} - /> + {displayComment && ( + <TextField + id="comment" + label={t('input.comment')} + multiline + rows={5} + {...register(`comment`)} + /> + )} </Stack> </form> </Box>