## 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>
2.2 KiB
2.2 KiB