This is an automated email from the ASF dual-hosted git repository.

shuai pushed a commit to branch test
in repository https://gitbox.apache.org/repos/asf/answer.git


The following commit(s) were added to refs/heads/test by this push:
     new 2d02452e fix: Changes in the editor content will reset the values of 
other form fields.
2d02452e is described below

commit 2d02452e172068268fd5099ee88c980096d67561
Author: shuai <[email protected]>
AuthorDate: Thu Jan 22 14:50:53 2026 +0800

    fix: Changes in the editor content will reset the values of other form 
fields.
---
 i18n/zh_CN.yaml                      |  2 +-
 ui/src/pages/Questions/Ask/index.tsx | 94 ++++++++++++++++++++++--------------
 2 files changed, 60 insertions(+), 36 deletions(-)

diff --git a/i18n/zh_CN.yaml b/i18n/zh_CN.yaml
index 29e18151..59ef41be 100644
--- a/i18n/zh_CN.yaml
+++ b/i18n/zh_CN.yaml
@@ -1760,7 +1760,7 @@ ui:
     users: 用户管理
     badges: 徽章
     flags: 举报管理
-    settings: 站点设置
+    settings: 设置
     general: 一般
     interface: 界面
     smtp: SMTP
diff --git a/ui/src/pages/Questions/Ask/index.tsx 
b/ui/src/pages/Questions/Ask/index.tsx
index cac75dd8..386fd213 100644
--- a/ui/src/pages/Questions/Ask/index.tsx
+++ b/ui/src/pages/Questions/Ask/index.tsx
@@ -147,8 +147,11 @@ const Ask = () => {
       if (prefill || draft) {
         if (prefill) {
           const file = fm<any>(decodeURIComponent(prefill));
-          formData.title.value = file.attributes?.title;
-          formData.content.value = file.body;
+          setFormData((prev) => ({
+            ...prev,
+            title: { ...prev.title, value: file.attributes?.title || '' },
+            content: { ...prev.content, value: file.body || '' },
+          }));
           if (!queryTags && file.attributes?.tags) {
             // Remove spaces in file.attributes.tags
             const filterTags = file.attributes.tags
@@ -158,14 +161,19 @@ const Ask = () => {
             updateTags(filterTags);
           }
         } else if (draft) {
-          formData.title.value = draft.title;
-          formData.content.value = draft.content;
-          formData.tags.value = draft.tags;
-          formData.answer_content.value = draft.answer_content;
+          setFormData((prev) => ({
+            ...prev,
+            title: { ...prev.title, value: draft.title || '' },
+            content: { ...prev.content, value: draft.content || '' },
+            tags: { ...prev.tags, value: draft.tags || [] },
+            answer_content: {
+              ...prev.answer_content,
+              value: draft.answer_content || '',
+            },
+          }));
           setCheckState(Boolean(draft.answer_content));
           setHasDraft(true);
         }
-        setFormData({ ...formData });
       } else {
         resetForm();
       }
@@ -231,17 +239,25 @@ const Ask = () => {
       return;
     }
     questionDetail(qid).then((res) => {
-      formData.title.value = res.title;
-      formData.content.value = res.content;
-      formData.tags.value = res.tags.map((item) => {
-        return {
-          ...item,
-          parsed_text: '',
-          original_text: '',
+      setFormData((prev) => {
+        const updatedFormData = {
+          ...prev,
+          title: { ...prev.title, value: res.title },
+          content: { ...prev.content, value: res.content },
+          tags: {
+            ...prev.tags,
+            value: res.tags.map((item) => {
+              return {
+                ...item,
+                parsed_text: '',
+                original_text: '',
+              };
+            }),
+          },
         };
+        setImmData(updatedFormData);
+        return updatedFormData;
       });
-      setImmData({ ...formData });
-      setFormData({ ...formData });
     });
   }, [qid]);
 
@@ -255,10 +271,10 @@ const Ask = () => {
   );
 
   const handleTitleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
-    setFormData({
-      ...formData,
+    setFormData((prev) => ({
+      ...prev,
       title: { value: e.currentTarget.value, errorMsg: '', isInvalid: false },
-    });
+    }));
     if (e.currentTarget.value.length >= 10) {
       querySimilarQuestions(e.currentTarget.value);
     }
@@ -267,31 +283,31 @@ const Ask = () => {
     }
   };
   const handleContentChange = (value: string) => {
-    setFormData({
-      ...formData,
+    setFormData((prev) => ({
+      ...prev,
       content: { value, errorMsg: '', isInvalid: false },
-    });
+    }));
   };
   const handleTagsChange = (value) =>
-    setFormData({
-      ...formData,
+    setFormData((prev) => ({
+      ...prev,
       tags: { value, errorMsg: '', isInvalid: false },
-    });
+    }));
 
   const handleAnswerChange = (value: string) =>
-    setFormData({
-      ...formData,
+    setFormData((prev) => ({
+      ...prev,
       answer_content: { value, errorMsg: '', isInvalid: false },
-    });
+    }));
 
   const handleSummaryChange = (evt: React.ChangeEvent<HTMLInputElement>) =>
-    setFormData({
-      ...formData,
+    setFormData((prev) => ({
+      ...prev,
       edit_summary: {
-        ...formData.edit_summary,
+        ...prev.edit_summary,
         value: evt.currentTarget.value,
       },
-    });
+    }));
 
   const deleteDraft = () => {
     const res = window.confirm(t('discard_confirm', { keyPrefix: 'draft' }));
@@ -413,9 +429,17 @@ const Ask = () => {
   const handleSelectedRevision = (e) => {
     const index = e.target.value;
     const revision = revisions[index];
-    formData.content.value = revision.content?.content || '';
-    setImmData({ ...formData });
-    setFormData({ ...formData });
+    setFormData((prev) => {
+      const updated = {
+        ...prev,
+        content: {
+          ...prev.content,
+          value: revision.content?.content || '',
+        },
+      };
+      setImmData(updated);
+      return updated;
+    });
   };
   const bool = similarQuestions.length > 0 && !isEdit;
   let pageTitle = t('ask_a_question', { keyPrefix: 'page_title' });

Reply via email to