Skip to content

Commit 2d02452

Browse files
author
shuai
committed
fix: Changes in the editor content will reset the values of other form fields.
1 parent 630ac20 commit 2d02452

2 files changed

Lines changed: 60 additions & 36 deletions

File tree

i18n/zh_CN.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1760,7 +1760,7 @@ ui:
17601760
users: 用户管理
17611761
badges: 徽章
17621762
flags: 举报管理
1763-
settings: 站点设置
1763+
settings: 设置
17641764
general: 一般
17651765
interface: 界面
17661766
smtp: SMTP

ui/src/pages/Questions/Ask/index.tsx

Lines changed: 59 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,11 @@ const Ask = () => {
147147
if (prefill || draft) {
148148
if (prefill) {
149149
const file = fm<any>(decodeURIComponent(prefill));
150-
formData.title.value = file.attributes?.title;
151-
formData.content.value = file.body;
150+
setFormData((prev) => ({
151+
...prev,
152+
title: { ...prev.title, value: file.attributes?.title || '' },
153+
content: { ...prev.content, value: file.body || '' },
154+
}));
152155
if (!queryTags && file.attributes?.tags) {
153156
// Remove spaces in file.attributes.tags
154157
const filterTags = file.attributes.tags
@@ -158,14 +161,19 @@ const Ask = () => {
158161
updateTags(filterTags);
159162
}
160163
} else if (draft) {
161-
formData.title.value = draft.title;
162-
formData.content.value = draft.content;
163-
formData.tags.value = draft.tags;
164-
formData.answer_content.value = draft.answer_content;
164+
setFormData((prev) => ({
165+
...prev,
166+
title: { ...prev.title, value: draft.title || '' },
167+
content: { ...prev.content, value: draft.content || '' },
168+
tags: { ...prev.tags, value: draft.tags || [] },
169+
answer_content: {
170+
...prev.answer_content,
171+
value: draft.answer_content || '',
172+
},
173+
}));
165174
setCheckState(Boolean(draft.answer_content));
166175
setHasDraft(true);
167176
}
168-
setFormData({ ...formData });
169177
} else {
170178
resetForm();
171179
}
@@ -231,17 +239,25 @@ const Ask = () => {
231239
return;
232240
}
233241
questionDetail(qid).then((res) => {
234-
formData.title.value = res.title;
235-
formData.content.value = res.content;
236-
formData.tags.value = res.tags.map((item) => {
237-
return {
238-
...item,
239-
parsed_text: '',
240-
original_text: '',
242+
setFormData((prev) => {
243+
const updatedFormData = {
244+
...prev,
245+
title: { ...prev.title, value: res.title },
246+
content: { ...prev.content, value: res.content },
247+
tags: {
248+
...prev.tags,
249+
value: res.tags.map((item) => {
250+
return {
251+
...item,
252+
parsed_text: '',
253+
original_text: '',
254+
};
255+
}),
256+
},
241257
};
258+
setImmData(updatedFormData);
259+
return updatedFormData;
242260
});
243-
setImmData({ ...formData });
244-
setFormData({ ...formData });
245261
});
246262
}, [qid]);
247263

@@ -255,10 +271,10 @@ const Ask = () => {
255271
);
256272

257273
const handleTitleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
258-
setFormData({
259-
...formData,
274+
setFormData((prev) => ({
275+
...prev,
260276
title: { value: e.currentTarget.value, errorMsg: '', isInvalid: false },
261-
});
277+
}));
262278
if (e.currentTarget.value.length >= 10) {
263279
querySimilarQuestions(e.currentTarget.value);
264280
}
@@ -267,31 +283,31 @@ const Ask = () => {
267283
}
268284
};
269285
const handleContentChange = (value: string) => {
270-
setFormData({
271-
...formData,
286+
setFormData((prev) => ({
287+
...prev,
272288
content: { value, errorMsg: '', isInvalid: false },
273-
});
289+
}));
274290
};
275291
const handleTagsChange = (value) =>
276-
setFormData({
277-
...formData,
292+
setFormData((prev) => ({
293+
...prev,
278294
tags: { value, errorMsg: '', isInvalid: false },
279-
});
295+
}));
280296

281297
const handleAnswerChange = (value: string) =>
282-
setFormData({
283-
...formData,
298+
setFormData((prev) => ({
299+
...prev,
284300
answer_content: { value, errorMsg: '', isInvalid: false },
285-
});
301+
}));
286302

287303
const handleSummaryChange = (evt: React.ChangeEvent<HTMLInputElement>) =>
288-
setFormData({
289-
...formData,
304+
setFormData((prev) => ({
305+
...prev,
290306
edit_summary: {
291-
...formData.edit_summary,
307+
...prev.edit_summary,
292308
value: evt.currentTarget.value,
293309
},
294-
});
310+
}));
295311

296312
const deleteDraft = () => {
297313
const res = window.confirm(t('discard_confirm', { keyPrefix: 'draft' }));
@@ -413,9 +429,17 @@ const Ask = () => {
413429
const handleSelectedRevision = (e) => {
414430
const index = e.target.value;
415431
const revision = revisions[index];
416-
formData.content.value = revision.content?.content || '';
417-
setImmData({ ...formData });
418-
setFormData({ ...formData });
432+
setFormData((prev) => {
433+
const updated = {
434+
...prev,
435+
content: {
436+
...prev.content,
437+
value: revision.content?.content || '',
438+
},
439+
};
440+
setImmData(updated);
441+
return updated;
442+
});
419443
};
420444
const bool = similarQuestions.length > 0 && !isEdit;
421445
let pageTitle = t('ask_a_question', { keyPrefix: 'page_title' });

0 commit comments

Comments
 (0)