Skip to content

Commit 861aca1

Browse files
committed
fix: prevent edit form reset
1 parent 371609b commit 861aca1

1 file changed

Lines changed: 34 additions & 19 deletions

File tree

  • ui/front/src/app/[route_name]/edit

ui/front/src/app/[route_name]/edit/page.tsx

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -92,23 +92,8 @@ export default function EditPage() {
9292
const { getFilteredGroups } = useGroupData()
9393
const [summaryModalOpen, setSummaryModalOpen] = useState(false)
9494
const [summaryDraft, setSummaryDraft] = useState('')
95-
96-
const {
97-
run,
98-
loading,
99-
data: discussion,
100-
} = useRequest(() => getDiscussionDiscId({ discId: queryId! }), {
101-
manual: true,
102-
onSuccess: (result) => {
103-
reset({
104-
title: result.title || '',
105-
summary: result.summary || '',
106-
content: result.content || '',
107-
group_ids: result.group_ids || [],
108-
type: (result.type as ModelDiscussionType) || ModelDiscussionType.DiscussionTypeBlog,
109-
})
110-
},
111-
})
95+
const requestedDiscussionIdRef = useRef<string | undefined>(undefined)
96+
const hasUserEditedRef = useRef(false)
11297
const schema = useMemo(
11398
() =>
11499
z.object({
@@ -136,7 +121,7 @@ export default function EditPage() {
136121
resolver: zodResolver(schema),
137122
mode: 'onBlur',
138123
defaultValues: {
139-
title: urlTitle ? decodeURIComponent(urlTitle) : discussion?.title || '',
124+
title: urlTitle ? decodeURIComponent(urlTitle) : '',
140125
summary: '',
141126
content:
142127
urlType === ModelDiscussionType.DiscussionTypeQA && !queryId && systemConfig?.content_placeholder
@@ -147,6 +132,25 @@ export default function EditPage() {
147132
},
148133
})
149134

135+
const {
136+
run,
137+
loading,
138+
data: discussion,
139+
} = useRequest((discId: string) => getDiscussionDiscId({ discId }), {
140+
manual: true,
141+
onSuccess: (result) => {
142+
if (hasUserEditedRef.current) return
143+
144+
reset({
145+
title: result.title || '',
146+
summary: result.summary || '',
147+
content: result.content || '',
148+
group_ids: result.group_ids || [],
149+
type: (result.type as ModelDiscussionType) || ModelDiscussionType.DiscussionTypeBlog,
150+
})
151+
},
152+
})
153+
150154
// summary 字段没有显式输入框,依赖侧边栏 setValue 写入;
151155
// 这里主动 register,确保 handleSubmit 的 vals 中能拿到最新的 summary。
152156
useEffect(() => {
@@ -190,9 +194,20 @@ export default function EditPage() {
190194

191195
useEffect(() => {
192196
if (!queryId) return
193-
run()
197+
if (requestedDiscussionIdRef.current === queryId) return
198+
requestedDiscussionIdRef.current = queryId
199+
hasUserEditedRef.current = false
200+
run(queryId)
194201
}, [queryId, run])
195202

203+
useEffect(() => {
204+
const subscription = watch(() => {
205+
hasUserEditedRef.current = true
206+
})
207+
208+
return () => subscription.unsubscribe()
209+
}, [watch])
210+
196211
// 当systemConfig加载完成时,如果是新建Q&A帖子且内容为空,则设置默认内容
197212
useEffect(() => {
198213
if (

0 commit comments

Comments
 (0)