fix(control): stop stuck spinners and stale room state - #521
Conversation
- Release source bindings for aliases that leave the input/output list, so a room change or join no longer shows the previous room's sources. - Only re-run the tab sync when the driver's `selected_tab` changes, so volume or mute updates no longer jump the user back to another tab. - Clear the loading state and show an error when dialling, routing a source or joining a meeting fails. Close the join confirmation after joining, and check for a cancel before setting its loading state. - Treat `Idle` and `Disconnecting` calls as ended, leave the call page when the far end hangs up, and clear the "Leaving" spinner. - Hide the lighting scenes action when the room has no scenes. - Read the system search result with `hasValue()` so a failed request shows no results instead of throwing in the template.
|
Deployment failed for project frontend-templates with the following error: Learn More: https://vercel.com/placeos?upgradeToPro=build-rate-limit |
|
| await spectator.component.endCall(); | ||
| expect(call_state.hangup).toHaveBeenCalled(); | ||
| expect(router_mock.navigate).not.toHaveBeenCalled(); | ||
| expect(spectator.component.loading()).toBe(''); |
There was a problem hiding this comment.
Hang-up test misses call update
The new call-ended effect and endCall() can both call _onCallEnded() for one local hang-up. The test's mocked hangup() never clears call(), so it cannot catch two navigations if the real call status clears before the command finishes. Change call() during the hang-up test and check that the page leaves once.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Fixed in aba4a0c: the page now leaves only once (_left guard), and a new test clears call() during hangup() and checks for one navigation.
A local hang-up and the call status clearing could both navigate away.
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Several async actions left a spinner up forever when they failed: dialling, routing a source, joining a meeting, and the "Leaving" spinner after a hang-up. Cancelling the join confirmation threw an error, and confirming left the confirmation open. Old source bindings were never released, so after a room change or join the panel could show the previous room's sources. Volume or mute changes jumped the tabbed view back to the driver's tab.
IdleandDisconnectingcalls counted as active, and a far-end hang-up left the call page open. The lighting scenes button showed in every room. A failed system search threw in the bootstrap template.Changes
endCallclears its spinner.bindSourcesreleases bindings for aliases that left the list.selected_tab.IdleandDisconnectingare not active calls. The call page leaves when the call ends remotely.hasValue(), so a failed request shows no results.Testing
fix/control-ux-fixes(bootstrap host visibility, app routing timing, and Escape not closing tooltips, which the last PR in the stack fixes). None of them reach this change. They were not run ondevelopitself.Merge order
2 of 5. Based on
fix/control-security-camera. Next:fix/control-ux-fixes.Changes made by Claude Opus 5.5 (1M context) in Claude Code, running in T3 Code.
🤖 Generated with Claude Code