iachat/app/javascript/dashboard/components-next
Sivin Varghese 72c9e1775b
fix: Prevent article editor from resetting content while typing (#14014)
# Pull Request Template

## Description


### Description

This PR fixes an issue where the editor would reset content and move the
cursor while typing. The issue was caused by a dual debounce setup
(400ms + 2500ms) that saved content and then overwrote local state with
stale API responses while the user was still typing.

### What changed

* Editor now uses local state (`localTitle`, `localContent`) as the
source of truth while editing
* Vuex store is only used on initial load or navigation
* Replaced dual debounce with a single 500ms debounce (fewer API calls)
* `UPDATE_ARTICLE` now merges updates instead of replacing the article
  * Prevents status changes from wiping unsaved content
* Removed `updateAsync` for a simpler update flow

### How it works

User types
→ local ref updates immediately (editor reads from this)
→ 500ms debounce triggers
→ dispatches `articles/update`
→ API persists the change
→ on success: store merges the response (used by other components)
→ editor remains unaffected (continues using local state)



Fixes
https://linear.app/chatwoot/issue/CW-6727/better-syncing-of-content-the-editor-randomly-updates-the-content

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

1. Open any Help Center article for editing
2. Type continuously for a few seconds — content should not reset or
jump
3. Change article status (publish/archive/draft) while editing — content
should remain intact
4. Test on a slow network (use DevTools throttling) — typing should
remain smooth


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
2026-04-14 16:48:38 +04:00
..
Accordion feat: Allow customizing the responses, flows in Captain (#11385) 2025-04-29 15:42:15 -07:00
AssignmentPolicy feat: allow zero conversation limit capacity policy (#13964) 2026-04-06 11:39:14 +05:30
avatar feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
banner chore: Update buttons in dashboard (#11145) 2025-03-31 17:21:32 -07:00
breadcrumb chore: Optimize contact page for smaller displays (#12183) 2025-08-14 19:07:20 +05:30
button chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
buttonGroup feat: Enhance button interactions (#12738) 2025-11-06 16:24:05 +05:30
Campaigns fix: ProseMirror prompt modal UI issue (#13722) 2026-03-09 16:51:49 +05:30
captain feat(captain): Add paywall and expose Custom Tools (#13977) 2026-04-07 10:58:29 +05:30
changelog-card chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
checkbox feat: Add support for bulk action for Captain FAQs (#10905) 2025-02-27 17:05:33 -08:00
colorpicker chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
combobox feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
Companies feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
Contacts fix(contacts): Show telegram id in contact details form (#13611) 2026-02-23 19:26:45 +04:00
content-templates feat: Add twilio content templates (#12277) 2025-08-29 16:13:25 +05:30
Conversation chore(v5): update priority icons (#13905) 2026-03-26 09:20:36 +05:30
ConversationWorkflow fix: Adjust inbox settings pages layout width (#13590) 2026-02-20 20:20:32 +05:30
copilot fix: skip Enter key submission during IME composition in AI inputs (#13779) 2026-03-13 10:26:51 +05:30
CustomAttributes feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
dialog fix: ProseMirror prompt modal UI issue (#13722) 2026-03-09 16:51:49 +05:30
dropdown-menu chore: Remove vue-multiselect and migrate to next components (#13506) 2026-02-17 16:40:12 +05:30
Editor feat: compose form improvements (#13668) 2026-03-02 18:27:51 +05:30
feature-spotlight feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
filter chore: Remove vue-multiselect and migrate to next components (#13506) 2026-02-17 16:40:12 +05:30
flag feat: Flag icon component (#10564) 2024-12-10 11:53:24 +05:30
HelpCenter fix: Prevent article editor from resetting content while typing (#14014) 2026-04-14 16:48:38 +04:00
icon feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
Inbox chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
inline-input chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
input feat: allow zero conversation limit capacity policy (#13964) 2026-04-06 11:39:14 +05:30
label feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
message fix: Respect app direction for incoming email content (#14011) 2026-04-14 13:45:34 +05:30
NewConversation fix: ProseMirror prompt modal UI issue (#13722) 2026-03-09 16:51:49 +05:30
pagination feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
phonenumberinput fix: Accidental contact creation on country dropdown toggle (#11494) 2025-05-16 16:14:00 +05:30
radioCard feat(inbox): Enable conversation continuity for social channels (#11079) 2026-02-25 13:56:51 +04:00
select feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
selectmenu feat: Update conversation basic filter (#11415) 2025-05-06 12:44:23 +05:30
Settings feat(widget): Allow widget loading in mobile app WebViews when domain restrictions are set (#13763) 2026-03-17 14:29:41 +04:00
sidebar feat(captain): Add paywall and expose Custom Tools (#13977) 2026-04-07 10:58:29 +05:30
spinner feat: Add Spinner to new components (#10303) 2024-10-16 17:53:46 -07:00
switch feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
tabbar chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
table feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
taginput feat: compose form improvements (#13668) 2026-03-02 18:27:51 +05:30
textarea feat: Conversation workflows(EE) (#13040) 2026-01-27 11:36:20 +04:00
whatsapp feat: Add media_name support for WhatsApp templates document files (#12462) 2025-09-18 15:25:31 +05:30
year-in-review feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
CardLayout.vue feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
EmptyStateLayout.vue feat(V5): Update settings pages UI (#13396) 2026-02-19 15:04:40 +05:30
SidebarActionsHeader.story.vue feat: Update the UI to support the change for Copilot as a universal copilot (#11618) 2025-05-29 12:35:10 +05:30
SidebarActionsHeader.vue feat: Update the UI to support the change for Copilot as a universal copilot (#11618) 2025-05-29 12:35:10 +05:30
TeleportWithDirection.vue feat: Add Teleport component to fix RTL/LTR utility classes (#11455) 2025-05-12 11:49:23 -07:00