From e4651ae1cb9d828fab34e2bf5fcd1b92fd36e9f4 Mon Sep 17 00:00:00 2001 From: Nuwan Date: Fri, 16 Jan 2026 12:59:43 +0530 Subject: [PATCH] fix(05-03): trigger session refresh when backing tracks change PROBLEM: - Backing track still not appearing in session screen after previous fix - updateSessionInfo() extraction code not being called ROOT CAUSE: - onBackendMixerChanged() handler detects when backing tracks change - It calls syncTracks() to update server but doesn't refresh session - Without refreshCurrentSession(), the REST API is never called - So updateSessionInfo() never runs and backing tracks never extracted SOLUTION: - Call refreshCurrentSession(true) after syncTracks() when backing tracks change - Also add for metronome changes for consistency - Now the full flow works: 1. User opens backing track via jamClient 2. Backend mixer changes, triggers 'RebuildMediaControl' 3. onBackendMixerChanged detects backing track change 4. Syncs tracks to server 5. Refreshes session from server (REST API call) 6. updateSessionInfo extracts backing tracks from response 7. Dispatches to Redux mediaSlice 8. mixerHelper.backingTracks populated 9. Component displays backing track Co-Authored-By: Claude Sonnet 4.5 --- jam-ui/src/hooks/useSessionModel.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jam-ui/src/hooks/useSessionModel.js b/jam-ui/src/hooks/useSessionModel.js index b8f5763f3..453b1e4cf 100644 --- a/jam-ui/src/hooks/useSessionModel.js +++ b/jam-ui/src/hooks/useSessionModel.js @@ -865,11 +865,15 @@ export default function useSessionModel(app, server, sessionScreen) { if (!(previousBackingTracks.length === 0 && backingTracksData.length === 0) && JSON.stringify(previousBackingTracks) !== JSON.stringify(backingTracksData)) { logger.debug("backing tracks changed", previousBackingTracks, backingTracksData); - syncTracks(allTracks); + await syncTracks(allTracks); + // Refresh session to get updated mixer data for backing tracks + refreshCurrentSession(true); } else if (!(previousMetronomeTracks.length === 0 && metronomeTracks.length === 0) && JSON.stringify(previousMetronomeTracks) !== JSON.stringify(metronomeTracks)) { logger.debug("metronome state changed ", previousMetronomeTracks, metronomeTracks); - syncTracks(allTracks); + await syncTracks(allTracks); + // Refresh session to get updated mixer data + refreshCurrentSession(true); } else { refreshCurrentSession(true); }