import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import AppContainer from '~/client/services/AppContainer';
import PersonalContainer from '~/client/services/PersonalContainer';
import { toastSuccess, toastError } from '~/client/util/apiNotification';
import { localeMetadatas } from '~/client/util/i18n';
import { usePersonalSettingsInfo } from '~/stores/personal-settings';
import { withUnstatedContainers } from '../UnstatedUtils';
class BasicInfoSettings extends React.Component {
constructor() {
super();
this.onClickSubmit = this.onClickSubmit.bind(this);
}
async onClickSubmit() {
const { t, personalContainer } = this.props;
try {
await personalContainer.updateBasicInfo();
toastSuccess(t('toaster.update_successed', { target: t('Basic Info') }));
}
catch (err) {
toastError(err);
}
}
render() {
const {
t, appContainer, personalSettingsInfo, mutatePersonalSettingsInfo, error,
} = this.props;
const { registrationWhiteList } = appContainer.getConfig();
return (
<>
{ mutatePersonalSettingsInfo({ ...personalSettingsInfo, email: e.target.value }) }}
/>
{registrationWhiteList.length !== 0 && (
{t('page_register.form_help.email')}
{registrationWhiteList.map(data => {data} )}
)}
{
localeMetadatas.map(meta => (
{ mutatePersonalSettingsInfo({ ...personalSettingsInfo, lang: meta.id }) }}
/>
))
}
>
);
}
}
BasicInfoSettings.propTypes = {
t: PropTypes.func.isRequired, // i18next
appContainer: PropTypes.instanceOf(AppContainer).isRequired,
personalContainer: PropTypes.instanceOf(PersonalContainer).isRequired,
personalSettingsInfo: PropTypes.object,
mutatePersonalSettingsInfo: PropTypes.func,
error: PropTypes.object,
};
const BasicInfoSettingsWrapperFC = (props) => {
const { t } = useTranslation();
const usePersonalSettingsInfoResult = usePersonalSettingsInfo();
useEffect(() => {
// Sync only when getting personal settings data from DB
usePersonalSettingsInfoResult.sync();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [usePersonalSettingsInfoResult.personalSettingsDataFromDB]);
return (
);
};
/**
* Wrapper component for using unstated
*/
const BasicInfoSettingsWrapper = withUnstatedContainers(BasicInfoSettingsWrapperFC, [AppContainer, PersonalContainer]);
export default BasicInfoSettingsWrapper;