2022-11-16 10:08:09 +01:00
|
|
|
import { useState } from 'react';
|
|
|
|
import * as React from 'react';
|
2022-03-18 19:44:30 +01:00
|
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
import { SettingName } from '../../models/setting';
|
|
|
|
import { IApplication } from '../../models/application';
|
|
|
|
import { react2angular } from 'react2angular';
|
|
|
|
import SettingAPI from '../../api/setting';
|
|
|
|
import { Loader } from '../base/loader';
|
|
|
|
import { FabButton } from '../base/fab-button';
|
|
|
|
import { BooleanSetting } from './boolean-setting';
|
|
|
|
import { CheckListSetting } from './check-list-setting';
|
2022-06-20 15:35:38 +02:00
|
|
|
import { FabAlert } from '../base/fab-alert';
|
2022-03-18 19:44:30 +01:00
|
|
|
|
|
|
|
declare const Application: IApplication;
|
|
|
|
|
|
|
|
interface UserValidationSettingProps {
|
|
|
|
onSuccess: (message: string) => void,
|
|
|
|
onError: (message: string) => void,
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-06-20 18:06:15 +02:00
|
|
|
* This component allows an admin to configure the settings related to the user account validation.
|
2022-03-18 19:44:30 +01:00
|
|
|
*/
|
2022-06-01 15:24:25 +02:00
|
|
|
export const UserValidationSetting: React.FC<UserValidationSettingProps> = ({ onSuccess, onError }) => {
|
2022-03-18 19:44:30 +01:00
|
|
|
const { t } = useTranslation('admin');
|
|
|
|
|
|
|
|
const [userValidationRequired, setUserValidationRequired] = useState<string>('false');
|
|
|
|
const userValidationRequiredListDefault = ['subscription', 'machine', 'event', 'space', 'training', 'pack'];
|
|
|
|
const [userValidationRequiredList, setUserValidationRequiredList] = useState<string>(null);
|
|
|
|
const userValidationRequiredOptions = userValidationRequiredListDefault.map(l => {
|
2022-06-20 18:06:15 +02:00
|
|
|
return [l, t(`app.admin.settings.account.user_validation_setting.user_validation_required_list.${l}`)];
|
2022-03-18 19:44:30 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save the built string to the Setting API
|
|
|
|
*/
|
|
|
|
const updateSetting = (name: SettingName, value: string) => {
|
|
|
|
SettingAPI.update(name, value)
|
|
|
|
.then(() => {
|
2022-08-23 13:12:13 +02:00
|
|
|
if (name === 'user_validation_required') {
|
2022-06-20 18:06:15 +02:00
|
|
|
onSuccess(t('app.admin.settings.account.user_validation_setting.customization_of_SETTING_successfully_saved', {
|
|
|
|
SETTING: t(`app.admin.settings.account.${name}`) // eslint-disable-line fabmanager/scoped-translation
|
|
|
|
}));
|
2022-03-18 19:44:30 +01:00
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
if (err.status === 304) return;
|
|
|
|
|
|
|
|
if (err.status === 423) {
|
2022-08-23 13:12:13 +02:00
|
|
|
if (name === 'user_validation_required') {
|
2022-06-20 18:06:15 +02:00
|
|
|
onError(t('app.admin.settings.account.user_validation_setting.error_SETTING_locked', {
|
|
|
|
SETTING: t(`app.admin.settings.account.${name}`) // eslint-disable-line fabmanager/scoped-translation
|
|
|
|
}));
|
2022-03-18 19:44:30 +01:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(err);
|
2022-06-20 18:06:15 +02:00
|
|
|
onError(t('app.admin.settings.account.user_validation_setting.an_error_occurred_saving_the_setting'));
|
2022-03-18 19:44:30 +01:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Callback triggered when the 'save' button is clicked.
|
|
|
|
*/
|
|
|
|
const handleSave = () => {
|
2022-08-23 13:12:13 +02:00
|
|
|
updateSetting('user_validation_required', userValidationRequired);
|
2022-03-18 19:44:30 +01:00
|
|
|
if (userValidationRequiredList !== null) {
|
|
|
|
if (userValidationRequired === 'true') {
|
2022-08-23 13:12:13 +02:00
|
|
|
updateSetting('user_validation_required_list', userValidationRequiredList);
|
2022-03-18 19:44:30 +01:00
|
|
|
} else {
|
2022-08-23 13:12:13 +02:00
|
|
|
updateSetting('user_validation_required_list', null);
|
2022-03-18 19:44:30 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="user-validation-setting">
|
2022-08-23 13:12:13 +02:00
|
|
|
<BooleanSetting name={'user_validation_required'}
|
2022-06-22 15:37:41 +02:00
|
|
|
label={t('app.admin.settings.account.user_validation_setting.user_validation_required_option_label')}
|
2022-03-18 19:44:30 +01:00
|
|
|
hideSave={true}
|
|
|
|
onChange={setUserValidationRequired}
|
|
|
|
onSuccess={onSuccess}
|
|
|
|
onError={onError}>
|
|
|
|
</BooleanSetting>
|
|
|
|
{userValidationRequired === 'true' &&
|
|
|
|
<div>
|
2022-06-22 15:37:41 +02:00
|
|
|
<h4>{t('app.admin.settings.account.user_validation_setting.user_validation_required_list_title')}</h4>
|
2022-03-18 19:44:30 +01:00
|
|
|
<p>
|
2022-06-22 15:37:41 +02:00
|
|
|
{t('app.admin.settings.account.user_validation_setting.user_validation_required_list_info')}
|
2022-03-18 19:44:30 +01:00
|
|
|
</p>
|
2022-06-20 15:35:38 +02:00
|
|
|
<FabAlert level="warning">
|
2022-06-22 15:37:41 +02:00
|
|
|
{t('app.admin.settings.account.user_validation_setting.user_validation_required_list_other_info')}
|
2022-06-20 15:35:38 +02:00
|
|
|
</FabAlert>
|
2022-08-23 13:12:13 +02:00
|
|
|
<CheckListSetting name={'user_validation_required_list'}
|
2022-03-18 19:44:30 +01:00
|
|
|
label=""
|
|
|
|
availableOptions={userValidationRequiredOptions}
|
|
|
|
defaultValue={userValidationRequiredListDefault.join(',')}
|
|
|
|
hideSave={true}
|
|
|
|
onChange={setUserValidationRequiredList}
|
|
|
|
onSuccess={onSuccess}
|
|
|
|
onError={onError}>
|
|
|
|
</CheckListSetting>
|
|
|
|
</div>
|
|
|
|
}
|
2022-06-22 15:45:53 +02:00
|
|
|
<FabButton className="save-btn" onClick={handleSave}>{t('app.admin.settings.account.user_validation_setting.save')}</FabButton>
|
2022-03-18 19:44:30 +01:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
const UserValidationSettingWrapper: React.FC<UserValidationSettingProps> = ({ onSuccess, onError }) => {
|
|
|
|
return (
|
|
|
|
<Loader>
|
|
|
|
<UserValidationSetting onError={onError} onSuccess={onSuccess} />
|
|
|
|
</Loader>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
Application.Components.component('userValidationSetting', react2angular(UserValidationSettingWrapper, ['onSuccess', 'onError']));
|