From ce8a4d230b56a1296a3d0c8f6e46b5a655c14e2d Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Wed, 1 Jul 2026 08:39:47 +0200 Subject: [PATCH] refactor(translations): allow resetting to default values --- .../CustomTranslationModal.module.scss | 3 ++ .../composite/CustomTranslationModal.tsx | 42 ++++++++++++------- 2 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.module.scss diff --git a/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.module.scss b/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.module.scss new file mode 100644 index 000000000..ff822393f --- /dev/null +++ b/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.module.scss @@ -0,0 +1,3 @@ +.footer { + width: 100%; +} diff --git a/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.tsx b/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.tsx index cd4584e43..4f894e3ca 100644 --- a/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.tsx +++ b/apps/client/src/features/app-settings/panel/settings-panel/composite/CustomTranslationModal.tsx @@ -1,5 +1,5 @@ import { TranslationObject, langEn } from 'ontime-types'; -import { useMemo } from 'react'; +import { useEffect, useMemo } from 'react'; import { useForm } from 'react-hook-form'; import { maybeAxiosError } from '../../../../../common/api/utils'; @@ -10,6 +10,8 @@ import Modal from '../../../../../common/components/modal/Modal'; import { useTranslation } from '../../../../../translation/TranslationProvider'; import * as Panel from '../../../panel-utils/PanelUtils'; +import style from './CustomTranslationModal.module.scss'; + interface CustomTranslationModalProps { isOpen: boolean; onClose: () => void; @@ -17,14 +19,7 @@ interface CustomTranslationModalProps { export default function CustomTranslationModal({ isOpen, onClose }: CustomTranslationModalProps) { const { userTranslation, postUserTranslation } = useTranslation(); - - const defaultValues = useMemo(() => { - const values: Record = {}; - Object.keys(langEn).forEach((key) => { - values[toFormKey(key)] = userTranslation[key as keyof TranslationObject] || ''; - }); - return values; - }, [userTranslation]); + const customTranslationFormValues = useMemo(() => toFormValues(userTranslation), [userTranslation]); const { handleSubmit, @@ -33,13 +28,17 @@ export default function CustomTranslationModal({ isOpen, onClose }: CustomTransl formState: { isSubmitting, isDirty, errors, isValid }, setError, } = useForm({ - defaultValues, - resetOptions: { - keepDirtyValues: true, - }, + defaultValues: customTranslationFormValues, mode: 'onChange', }); + // keep data up to date + useEffect(() => { + if (isOpen) { + reset(customTranslationFormValues); + } + }, [customTranslationFormValues, isOpen, reset]); + const onSubmit = async (formData: Record) => { try { const translationData: Record = {}; @@ -54,6 +53,10 @@ export default function CustomTranslationModal({ isOpen, onClose }: CustomTransl } }; + const resetToEnglish = () => { + reset(toFormValues(langEn), { keepDefaultValues: true }); + }; + return ( } footerElements={ -
+
{errors?.root && {errors.root.message}} +