fix(26): pass jamServer to loadJamTrack and improve error handling

- Add jamServer to useMediaActions by creating object from subscribe/unsubscribe
- Pass jamServer to loadJamTrackThunk so it can subscribe to packaging progress
- Improve error handling to extract message from Response objects (not just Error)
- Fixes "Failed to start packaging: undefined" error

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Nuwan 2026-02-26 11:52:53 +05:30
parent e4300aecb4
commit 3d847ece7f
2 changed files with 13 additions and 5 deletions

View File

@ -1,4 +1,4 @@
import { useCallback } from 'react'; import { useCallback, useMemo } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { import {
openBackingTrack as openBackingTrackThunk, openBackingTrack as openBackingTrackThunk,
@ -32,7 +32,13 @@ import { syncTracksToServer } from '../services/trackSyncService';
const useMediaActions = () => { const useMediaActions = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const sessionId = useSelector(selectSessionId); const sessionId = useSelector(selectSessionId);
const { jamClient } = useJamServerContext(); const { jamClient, subscribe, unsubscribe } = useJamServerContext();
// Create jamServer object with subscribe/unsubscribe for thunks
const jamServer = useMemo(() => ({
subscribe,
unsubscribe
}), [subscribe, unsubscribe]);
/** /**
* Open a backing track file * Open a backing track file
@ -144,7 +150,7 @@ const useMediaActions = () => {
*/ */
const loadJamTrack = useCallback(async (jamTrack) => { const loadJamTrack = useCallback(async (jamTrack) => {
try { try {
await dispatch(loadJamTrackThunk({ jamTrack, jamClient })).unwrap(); await dispatch(loadJamTrackThunk({ jamTrack, jamClient, jamServer })).unwrap();
// Update media summary // Update media summary
dispatch(updateMediaSummary({ dispatch(updateMediaSummary({
@ -161,7 +167,7 @@ const useMediaActions = () => {
console.error('Error loading jam track:', error); console.error('Error loading jam track:', error);
throw error; throw error;
} }
}, [dispatch, jamClient, sessionId]); }, [dispatch, jamClient, jamServer, sessionId]);
/** /**
* Stop and close the currently playing JamTrack * Stop and close the currently playing JamTrack

View File

@ -148,7 +148,9 @@ export const downloadJamTrack = createAsyncThunk(
}); });
} catch (err) { } catch (err) {
console.error('[JamTrack] Failed to enqueue mixdown:', err); console.error('[JamTrack] Failed to enqueue mixdown:', err);
throw new Error(`Failed to start packaging: ${err.message}`); // Handle both Error objects and Response objects (from apiFetch)
const errorMessage = err?.message || err?.statusText || `HTTP ${err?.status}` || 'Unknown error';
throw new Error(`Failed to start packaging: ${errorMessage}`);
} }
// Subscribe to WebSocket notifications for packaging progress // Subscribe to WebSocket notifications for packaging progress