iachat/app
Shivam Mishra 0f659224a7
feat: async update of article [CW-3721] (#10435)
### The problem

Writing in the text editor can be very frustrating, the reason is that
the editor had a debounced save method which would push the article to
the backend and update the current state. This however is a bad idea,
since the can take anywhere between 100-300ms depending on network
conditions.

While this would be in progress, the article is still being edited by
the user. So at the end of the network request, the state returned from
the backend and the current state in the editor is diverged. But since
the update happens anyway, the editor would prepend older context.

```
Time   --> 

User Action:      [Edit 1] ---> [Edit 2] ---> [Edit 3]
Backend Save:           Save Req (Edit 1) ----> Response (Edit 1)
Resulting Editor State: [Edit 3] + [Edit 1] (Outdated state prepended)
```

### The solution

The solution is to unbind the article from the backend state, ensuring
that the article editor is the source of truth and ignoring the
responses. This pull request does this by adding an asynchronous save
functionality. The changes include adding a new `saveArticleAsync` event
and ensuring that the local state is not updated unnecessarily during
asynchronous saves.

```
Time   --> 

User Action:      [Edit 1] ---> [Edit 2] ---> [Edit 3]
Backend Save:           Save Req (Edit 1) ----> Response (ignored)
Resulting Editor State: [Edit 3] (Consistent and up-to-date)
```

Added the following two debounced methods

These complementary debounce methods prevent unnecessary re-renders
while ensuring backend is in sync. `saveArticleAsync` preserves the
editor as the source of truth, while `saveArticle` manages periodic
state updates from the backend with a delay large enough to safely
assume that the user has stopped typing
Method | Delay | Behavior
-- | -- | -- 
`saveArticleAsync` | 400ms | Sends data to backend and ignores the
response
`saveArticle` | 2.5s | Sends data and updates local state with the
backend response

### How to test

1. Remove the following line
dc042f6ddc/app/javascript/dashboard/components-next/HelpCenter/Pages/ArticleEditorPage/ArticleEditor.vue (L64)
1. Update the latency here to 400 (P.S. the diff shows the latency to be
600, but that was added as a stop-gap solution)

dc042f6ddc/app/javascript/dashboard/components-next/HelpCenter/Pages/ArticleEditorPage/ArticleEditor.vue (L51)
1. Set the browser network latency to Slow 3G or 3G
1. Start writing on the editor, try fixing typos with backspace or
moving around with the cursor

---------

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: Pranav <pranav@chatwoot.com>
2024-11-21 19:38:08 -08:00
..
actions fix: downcase email before finding (#8921) 2024-02-21 18:51:00 +05:30
assets feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
builders fix: default return in blocked domains (#10046) 2024-08-29 15:36:57 +05:30
channels chore: Sentry issues (#4623) 2022-05-06 14:50:55 +05:30
controllers fix: Feature flags are not be stored on account creation (#10387) 2024-11-20 21:39:17 +08:00
dashboards feat: Display Account Custom Attributes in Super Admin (#10459) 2024-11-20 09:02:33 -08:00
dispatchers fix: assignee_changed callback not getting triggered during conversation creation (#9334) 2024-05-06 11:48:17 -07:00
drops feat: Add the support for custom attributes in message variables (#8511) 2023-12-08 14:13:35 -08:00
fields feat: Supports masking tokens in super admin (#6491) 2023-02-21 17:50:55 +05:30
finders feat: Conversation API to return applied_sla and sla_events (#9174) 2024-04-01 23:30:07 +05:30
helpers feat: Improve Report API performance (#9476) 2024-05-22 17:34:24 -07:00
javascript feat: async update of article [CW-3721] (#10435) 2024-11-21 19:38:08 -08:00
jobs fix: Undefined method `encode' for nil for avatar from url job (#10450) 2024-11-19 14:24:01 -08:00
listeners fix: Use message sender ID in the analytics for first response time (#9605) 2024-06-06 20:20:35 -07:00
mailboxes chore: Disable throwing error for malformed to address (#10464) 2024-11-20 18:58:54 -08:00
mailers feat: add Google Email fetch and OAuth token refresh service (#9603) 2024-06-11 14:22:03 +05:30
models feat(v4): Update the help center portal design (#10296) 2024-10-23 22:09:36 -07:00
policies chore: Custom Roles to manage permissions [ UI ] (#9865) 2024-09-17 11:40:11 -07:00
presenters fix: Email attachments created with empty filename (#10420) 2024-11-15 09:07:24 +04:00
services fix: Fix line sticker URL to prevent certain images from failing to d… (#10416) 2024-11-15 17:27:58 +04:00
views feat(v4): Update the help center portal design (#10296) 2024-10-23 22:09:36 -07:00
workers fix: Capture delivery errors to avoid false positives (#8790) 2024-01-26 14:22:18 +04:00