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 {
openBackingTrack as openBackingTrackThunk,
@ -32,7 +32,13 @@ import { syncTracksToServer } from '../services/trackSyncService';
const useMediaActions = () => {
const dispatch = useDispatch();
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
@ -144,7 +150,7 @@ const useMediaActions = () => {
*/
const loadJamTrack = useCallback(async (jamTrack) => {
try {
await dispatch(loadJamTrackThunk({ jamTrack, jamClient })).unwrap();
await dispatch(loadJamTrackThunk({ jamTrack, jamClient, jamServer })).unwrap();
// Update media summary
dispatch(updateMediaSummary({
@ -161,7 +167,7 @@ const useMediaActions = () => {
console.error('Error loading jam track:', error);
throw error;
}
}, [dispatch, jamClient, sessionId]);
}, [dispatch, jamClient, jamServer, sessionId]);
/**
* Stop and close the currently playing JamTrack

View File

@ -148,7 +148,9 @@ export const downloadJamTrack = createAsyncThunk(
});
} catch (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