7e23e59782
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
5608f5a1a2
|
fix: Widget shows 'away' on initial load despite agents being online (#12869)
## Description Fixes #12868 This PR fixes a Vue 3 reactivity bug that causes the widget to display "We are away at the moment" on initial page load, even when agents are online and the API correctly returns their availability. ## Problem The widget welcome screen shows "We are away" on first render, only updating to show correct agent status after navigating to the conversation view and back. This misleads visitors into thinking no agents are available. **Reproduction:** Open website with widget in fresh incognito window, click bubble immediately → shows "away" despite agents being online. ## Root Cause Vue 3 reactivity chain breaks in the `useAvailability` composable: **Before (broken):** ```javascript // AvailabilityContainer.vue const { isOnline } = useAvailability(props.agents); // Passes VALUE // useAvailability.js const availableAgents = toRef(agents); // Creates ref from VALUE, doesn't track changes ``` When the API responds and updates the Vuex store, the parent component's computed `props.agents` updates correctly, but the composable's `toRef()` doesn't know about the change because it was created from a static value, not a reactive source. ## Solution **After (fixed):** ```javascript // AvailabilityContainer.vue const { isOnline } = useAvailability(toRef(props, 'agents')); // Passes REACTIVE REF // useAvailability.js const availableAgents = computed(() => unref(agents)); // Unwraps ref and tracks changes ``` Now when `props.agents` updates after the API response, the `computed()` re-evaluates and all downstream reactive properties (`hasOnlineAgents`, `isOnline`) update correctly. ## Testing - ✅ Initial page load shows correct agent status immediately - ✅ Status changes via WebSocket update correctly - ✅ No configuration changes or workarounds needed - ✅ Tested with network monitoring (Puppeteer) confirming API returns correct data ## Files Changed 1. `app/javascript/widget/components/Availability/AvailabilityContainer.vue` - Pass `toRef(props, 'agents')` instead of `props.agents` 2. `app/javascript/widget/composables/useAvailability.js` - Use `computed(() => unref(agents))` instead of `toRef(agents)` - Added explanatory comments ## Related Issues - #5918 - Similar symptoms, closed with workaround (business hours toggle) rather than fixing root cause - #5763 - Different issue (mobile app presence) This is a genuine Vue 3 reactivity bug affecting all widgets, independent of business hours configuration. Co-authored-by: rcoenen <rcoenen@users.noreply.github.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Shivam Mishra <scm.mymail@gmail.com> |
||
|
|
6ca38e10e9
|
feat: Migrate availability mixins to composable and helper (#11596)
# Pull Request Template ## Description **This PR includes:** * Refactored two legacy mixins (`availability.js`, `nextAvailability.js`) into a Vue 3 composable (`useAvailability`), helper module and component based rendering logic. * Fixed an issue where the widget wouldn't load if business hours were enabled but all days were unchecked. * Fixed translation issue [[#11280](https://github.com/chatwoot/chatwoot/issues/11280)](https://github.com/chatwoot/chatwoot/issues/11280). * Reduced code complexity and size. * Added test coverage for both the composable and helper functions. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/2bc3ed694b4349419505e275d14d0b98?sid=22d585e4-0dc7-4242-bcb6-e3edc16e3aee ### Story <img width="995" height="442" alt="image" src="https://github.com/user-attachments/assets/d6340738-07db-41d5-86fa-a8ecf734cc70" /> ## 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 - [x] 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 Fixes https://github.com/chatwoot/chatwoot/issues/12012 --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Pranav <pranav@chatwoot.com> Co-authored-by: Shivam Mishra <scm.mymail@gmail.com> |