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, name: e.target.value }) }} />
{ mutatePersonalSettingsInfo({ ...personalSettingsInfo, email: e.target.value }) }} /> {registrationWhiteList.length !== 0 && (
{t('page_register.form_help.email')}
    {registrationWhiteList.map(data =>
  • {data}
  • )}
)}
mutatePersonalSettingsInfo({ ...personalSettingsInfo, isEmailPublished: true })} />
mutatePersonalSettingsInfo({ ...personalSettingsInfo, isEmailPublished: false })} />
{ localeMetadatas.map(meta => (
{ mutatePersonalSettingsInfo({ ...personalSettingsInfo, lang: meta.id }) }} />
)) }
{ mutatePersonalSettingsInfo({ ...personalSettingsInfo, slackMemberId: e.target.value }) }} />
); } } 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;