import React, { type JSX, useCallback, useEffect } from 'react'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import { PrismAsyncLight } from 'react-syntax-highlighter'; import { oneDark } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { Card, CardBody } from 'reactstrap'; import AdminCustomizeContainer from '~/client/services/AdminCustomizeContainer'; import { toastError, toastSuccess } from '~/client/util/toastr'; import { withUnstatedContainers } from '../../UnstatedUtils'; import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow'; type Props = { adminCustomizeContainer: AdminCustomizeContainer; }; const CustomizeScriptSetting = (props: Props): JSX.Element => { const { adminCustomizeContainer } = props; const { t } = useTranslation(); const { register, handleSubmit, reset } = useForm(); // Sync form with container state useEffect(() => { reset({ customizeScript: adminCustomizeContainer.state.currentCustomizeScript || '', }); }, [adminCustomizeContainer.state.currentCustomizeScript, reset]); const onSubmit = useCallback( async (data) => { try { // Update container state before API call await adminCustomizeContainer.changeCustomizeScript( data.customizeScript, ); await adminCustomizeContainer.updateCustomizeScript(); toastSuccess( t('toaster.update_successed', { target: t('admin:customize_settings.custom_script'), ns: 'commons', }), ); } catch (err) { toastError(err); } }, [t, adminCustomizeContainer], ); return (

{t('admin:customize_settings.custom_script')}

{t('admin:customize_settings.write_java')}
{t('admin:customize_settings.reflect_change')}