diff --git a/jam-ui/src/components/client/JKSessionJamTrackPlayer.js b/jam-ui/src/components/client/JKSessionJamTrackPlayer.js index d48eb71e4..eae14dcc2 100644 --- a/jam-ui/src/components/client/JKSessionJamTrackPlayer.js +++ b/jam-ui/src/components/client/JKSessionJamTrackPlayer.js @@ -183,6 +183,29 @@ const JKSessionJamTrackPlayer = ({ } }, [isOperating, jamClient, dispatch]); + // Seek handler + const handleSeek = useCallback(async (newPositionMs) => { + if (isOperating || !jamClient || !fqIdRef.current) return; + + try { + setError(null); + + // UAT-003 fix: if paused, store pending seek + if (jamTrackState.isPaused) { + pendingSeekRef.current = newPositionMs; + dispatch(setJamTrackState({ currentPositionMs: newPositionMs })); + return; + } + + // If playing, seek immediately + await jamClient.JamTrackSeekMs(fqIdRef.current, newPositionMs); + dispatch(setJamTrackState({ currentPositionMs: newPositionMs })); + } catch (err) { + console.error('[JamTrack] Seek error:', err); + setError({ type: 'playback', message: 'Failed to seek' }); + } + }, [isOperating, jamClient, jamTrackState.isPaused, dispatch]); + // Helper: Format milliseconds to MM:SS const formatTime = (ms) => { if (!ms || isNaN(ms)) return '00:00'; @@ -279,6 +302,18 @@ const JKSessionJamTrackPlayer = ({ +
{formatTime(jamTrackState.currentPositionMs)} / {formatTime(jamTrackState.durationMs)}