import React, { useEffect } from 'react'; 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 { useSWRxPersonalSettings } from '~/stores/personal-settings'; import { withUnstatedContainers } from '../UnstatedUtils'; type Props = { appContainer: AppContainer, personalContainer: PersonalContainer, } const BasicInfoSettings = (props: Props) => { const { t } = useTranslation(); const { appContainer, personalContainer, } = props; const { data: personalSettingsInfo, mutate, error, } = useSWRxPersonalSettings(); useEffect(() => { // Mutate only when getting personal settings data from DB mutate(personalSettingsInfo); // eslint-disable-next-line react-hooks/exhaustive-deps }, [personalSettingsInfo]); const submitHandler = async() => { try { // TODO: SWRize apiv3Put /personal-setting/ -> https://redmine.weseek.co.jp/issues/98160 await personalContainer.updateBasicInfo(); toastSuccess(t('toaster.update_successed', { target: t('Basic Info') })); } catch (err) { toastError(err); } }; const { registrationWhiteList } = appContainer.getConfig(); const isLoading = personalSettingsInfo == null; if (isLoading) { return (
); } const changePersonalSettingsHandler = (updateData) => { if (personalSettingsInfo == null) { return; } mutate({ ...personalSettingsInfo, ...updateData }); }; return ( <>
changePersonalSettingsHandler({ name: e.target.value })} />
changePersonalSettingsHandler({ email: e.target.value })} /> {registrationWhiteList.length !== 0 && (
{t('page_register.form_help.email')}
    {registrationWhiteList.map(data =>
  • {data}
  • )}
)}
changePersonalSettingsHandler({ isEmailPublished: true })} />
changePersonalSettingsHandler({ isEmailPublished: false })} />
{ localeMetadatas.map(meta => (
changePersonalSettingsHandler({ lang: meta.id })} />
)) }
changePersonalSettingsHandler({ slackMemberId: e.target.value })} />
); }; /** * Wrapper component for using unstated */ const BasicInfoSettingsWrapper = withUnstatedContainers(BasicInfoSettings, [AppContainer, PersonalContainer]); export default BasicInfoSettingsWrapper;