iachat/app/javascript/dashboard/store/modules
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
..
contacts feat: Add infinite scroll to contacts search page (#13376) 2026-01-27 18:55:19 -08:00
conversations fix: Prevent duplicate conversations in conversation list (#13713) 2026-03-06 14:07:02 +04:00
helpCenterArticles fix: Prevent article editor from resetting content while typing (#14014) 2026-04-14 16:48:38 +04:00
helpCenterCategories feat(help-center): enable drag-and-drop category reordering (#13706) 2026-03-05 12:53:38 +05:30
helpCenterPortals feat(cloud): Add support for viewing status of SSL in custom domains (#12011) 2025-07-30 10:52:47 -07:00
inboxes feat: Voice channel creation Flow (#11775) 2025-06-25 14:21:03 -07:00
notifications feat: Display notification count in sidebar inbox item (#12324) 2025-09-01 15:55:09 +05:30
specs fix: Prevent duplicate conversations in conversation list (#13713) 2026-03-06 14:07:02 +04:00
teams feat(v4): Update the report pages to show aggregate values (#10766) 2025-01-28 09:19:18 +05:30
accounts.js feat: Add AI credit topup flow for Stripe (#12988) 2025-12-02 17:53:44 -08:00
agentBots.js feat: sign webhooks for API channel and agentbots (#13892) 2026-04-06 15:28:25 +05:30
agentCapacityPolicies.js feat: Agent capacity policy Create/Edit pages (#12424) 2025-09-12 18:42:55 +05:30
agents.js feat(v4): Update the report pages to show aggregate values (#10766) 2025-01-28 09:19:18 +05:30
assignmentPolicies.js feat: Agent assignment policy Create/Edit pages (#12400) 2025-09-10 20:02:11 +05:30
attributes.js fix: Update contact details page errors (#10536) 2024-12-04 13:58:53 -08:00
auditlogs.js feat: audit logs UI (#6803) 2023-04-17 19:11:05 +05:30
auth.js fix: Prevent display_name reset when updating password (#10374) 2025-06-11 19:05:30 -04:00
automations.js feat: Update the design for automation (#10002) 2024-08-22 16:22:54 +05:30
bulkActions.js feat: Adds support for all snooze option in bulk actions (#9361) 2024-05-09 19:27:31 +05:30
campaigns.js feat: WhatsApp campaigns (#11910) 2025-07-16 09:04:02 +05:30
cannedResponse.js feat: Update the design for canned responses (#9903) 2024-08-07 09:43:47 -07:00
contactConversations.js feat(v4): Add new contact details screen (#10504) 2024-12-03 21:29:47 -08:00
contactLabels.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
contactNotes.js feat(v4): Add new contact details screen (#10504) 2024-12-03 21:29:47 -08:00
conversationLabels.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
conversationMetadata.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
conversationPage.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
conversationSearch.js feat: Advanced Search Backend (#12917) 2026-01-07 15:30:49 +05:30
conversationStats.js chore: add script to throttle bulkreindex job creation and increase meta timeouts(#12626) 2025-10-13 16:21:45 +05:30
conversationTypingStatus.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
conversationWatchers.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
csat.js feat(ee): Review Notes for CSAT Reports (#13289) 2026-01-15 19:53:57 -08:00
customRole.js chore: Custom Roles to manage permissions [ UI ] (#9865) 2024-09-17 11:40:11 -07:00
customViews.js feat: Improve Contact list (#10522) 2024-12-02 18:23:41 -08:00
dashboardApps.js feat: Add the ability to create dashboard apps from the UI (#4924) 2022-07-08 15:55:32 +07:00
draftMessages.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
inboxAssignableAgents.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
inboxes.js feat: sign webhooks for API channel and agentbots (#13892) 2026-04-06 15:28:25 +05:30
inboxMembers.js Chore: Inbox Members API improvements (#3008) 2021-09-14 11:55:02 +05:30
integrations.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
labels.js feat: Refactor reports filters (#13443) 2026-02-06 18:22:30 +05:30
macros.js feat: Add API module and Vuex store for Macros (#5603) 2022-10-11 22:54:17 -07:00
reports.js feat: Add conversations summary CSV export (#13110) 2026-01-13 12:30:26 +04:00
sla.js feat: add option to delete and disable edits for SLA (#9108) 2024-03-15 12:21:32 +05:30
SLAReports.js feat: Download SLA reports (#9201) 2024-04-08 20:51:34 -07:00
summaryReports.js fix: add loading and silent retry to summary reports (#13455) 2026-02-06 19:53:46 +05:30
teamMembers.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
userNotificationSettings.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
webhooks.js feat: add per-webhook secret with backfill migration (#13573) 2026-02-26 17:26:12 +05:30