From dbe059b7b526f9a1cea926ec7edd31d7fa98bf41 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Thu, 12 Feb 2026 14:03:01 +0530 Subject: [PATCH] fix: workitem description input inital load (#8617) --- .../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 86c9741eed..fefa49f9cc 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);