import React, { useCallback, useEffect } from 'react'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import AdminAppContainer from '~/client/services/AdminAppContainer'; import { toastSuccess, toastError } from '~/client/util/toastr'; import loggerFactory from '~/utils/logger'; import { withUnstatedContainers } from '../../UnstatedUtils'; import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow'; const logger = loggerFactory('growi:appSettings'); type Props = { adminAppContainer: AdminAppContainer, } const SiteUrlSetting = (props: Props) => { const { t } = useTranslation('admin', { keyPrefix: 'app_setting' }); const { t: tCommon } = useTranslation('commons'); const { adminAppContainer } = props; const { register, handleSubmit, reset, } = useForm(); // Reset form when adminAppContainer state changes useEffect(() => { reset({ siteUrl: adminAppContainer.state.siteUrl || '', }); }, [adminAppContainer.state.siteUrl, reset]); const onSubmit = useCallback(async(data) => { try { // Await setState completion before API call await adminAppContainer.changeSiteUrl(data.siteUrl); await adminAppContainer.updateSiteUrlSettingHandler(); toastSuccess(tCommon('toaster.update_successed', { target: t('site_url.title') })); } catch (err) { toastError(err); logger.error(err); } }, [adminAppContainer, t, tCommon]); return (

{t('site_url.desc')}

{!adminAppContainer.state.isSetSiteUrl && (

error {t('site_url.warn')}

)} { adminAppContainer.state.siteUrlUseOnlyEnvVars && (

) }
Database Environment variables

{/* eslint-disable-next-line react/no-danger */}

{/* eslint-disable-next-line react/no-danger */}

); }; /** * Wrapper component for using unstated */ const SiteUrlSettingWrapper = withUnstatedContainers(SiteUrlSetting, [AdminAppContainer]); export default SiteUrlSettingWrapper;