From 14e6b2190c87160ee063a7a4a384b6dfe872402d Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Mon, 9 Feb 2026 14:57:00 +0530 Subject: [PATCH] fix: workitem description input inital load --- .../editor/rich-text/description-input/root.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/web/core/components/editor/rich-text/description-input/root.tsx b/apps/web/core/components/editor/rich-text/description-input/root.tsx index 188a1f046f3..b2adb24661f 100644 --- a/apps/web/core/components/editor/rich-text/description-input/root.tsx +++ b/apps/web/core/components/editor/rich-text/description-input/root.tsx @@ -119,6 +119,8 @@ export const DescriptionInput = observer(function DescriptionInput(props: Props) }); // ref to track if there are unsaved changes const hasUnsavedChanges = useRef(false); + // ref to track last saved content (to skip onChange when content hasn't actually changed) + const lastSavedContent = useRef(initialValue?.trim() === "" ? "

" : (initialValue ?? "

")); // store hooks const { getWorkspaceBySlug } = useWorkspace(); const { uploadEditorAsset, duplicateEditorAsset } = useEditorAsset(); @@ -139,6 +141,8 @@ export const DescriptionInput = observer(function DescriptionInput(props: Props) const handleDescriptionFormSubmit = useCallback( async (formData: TFormData) => { await onSubmit(formData.description_html, formData.isMigrationUpdate); + // Update lastSavedContent after successful save + lastSavedContent.current = formData.description_html; }, [onSubmit] ); @@ -146,14 +150,17 @@ export const DescriptionInput = observer(function DescriptionInput(props: Props) // reset form values useEffect(() => { if (!entityId) return; + const normalizedValue = initialValue?.trim() === "" ? "

" : (initialValue ?? "

"); + // Update last saved content when entity/initialValue changes + lastSavedContent.current = normalizedValue; reset({ id: entityId, - description_html: initialValue?.trim() === "" ? "

" : (initialValue ?? "

"), + description_html: normalizedValue, isMigrationUpdate: false, }); setLocalDescription({ id: entityId, - description_html: initialValue?.trim() === "" ? "

" : (initialValue ?? "

"), + description_html: normalizedValue, isMigrationUpdate: false, }); // Reset unsaved changes flag when form is reset @@ -219,6 +226,8 @@ export const DescriptionInput = observer(function DescriptionInput(props: Props) projectId={projectId} dragDropEnabled onChange={(_description, description_html, options) => { + // Skip if content hasn't actually changed (handles editor normalization on init) + if (description_html === lastSavedContent.current) return; setIsSubmitting("submitting"); onChange(description_html); setValue("isMigrationUpdate", options?.isMigrationUpdate ?? false);