feat: implement mixer categorization by group_id
Adds useEffect to categorize mixers into track-specific arrays:
- metronomeTrackMixers (group_id: 16)
- backingTrackMixers (group_id: 11)
- jamTrackMixers (group_id: 12)
- recordingTrackMixers (group_id: 13)
- adhocTrackMixers (other types)
Each mixer categorized as {master, personal, mixer} pair.
Dispatches to Redux for component consumption.
Resolves TODO at line 243 about groupMixersByType logic.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
be3d39bff6
commit
fc3bbeeafe
|
|
@ -34,7 +34,12 @@ import {
|
|||
setMetronome as setMetronomeAction,
|
||||
setMediaSummary,
|
||||
setSimulatedMusicCategoryMixers as setSimulatedMusicAction,
|
||||
setSimulatedChatCategoryMixers as setSimulatedChatAction
|
||||
setSimulatedChatCategoryMixers as setSimulatedChatAction,
|
||||
setRecordingTrackMixers,
|
||||
setBackingTrackMixers,
|
||||
setJamTrackMixers,
|
||||
setMetronomeTrackMixers,
|
||||
setAdhocTrackMixers
|
||||
} from '../store/features/mixersSlice';
|
||||
import {
|
||||
selectBackingTracks,
|
||||
|
|
@ -236,8 +241,68 @@ const useMixerHelper = () => {
|
|||
dispatch(organizeMixers());
|
||||
}, [currentSession, masterMixers, personalMixers, dispatch]);
|
||||
|
||||
// Note: groupMixersByType logic is handled by WebSocket MIXER_CHANGES handler
|
||||
// which updates backingTrackMixers, jamTrackMixers, etc. via Redux actions
|
||||
// Categorize mixers by group_id and dispatch to Redux
|
||||
useEffect(() => {
|
||||
if (!masterMixers || !personalMixers || masterMixers.length === 0) return;
|
||||
|
||||
console.log('[useMixerHelper] Categorizing mixers by group_id');
|
||||
|
||||
const metronomeTrackMixers = [];
|
||||
const backingTrackMixers = [];
|
||||
const jamTrackMixers = [];
|
||||
const recordingTrackMixers = [];
|
||||
const adhocTrackMixers = [];
|
||||
|
||||
// Process master/personal mixer pairs
|
||||
for (const masterMixer of masterMixers) {
|
||||
const personalMixer = personalMixers.find(p => p.rid === masterMixer.rid);
|
||||
const mixerPair = {
|
||||
master: masterMixer,
|
||||
personal: personalMixer,
|
||||
mixer: mixMode === MIX_MODES.PERSONAL ? personalMixer : masterMixer
|
||||
};
|
||||
|
||||
// Categorize by group_id (from ChannelGroupIds)
|
||||
switch (masterMixer.group_id) {
|
||||
case ChannelGroupIds.MetronomeGroup: // 16
|
||||
metronomeTrackMixers.push(mixerPair);
|
||||
console.log('[useMixerHelper] Found metronome mixer:', masterMixer.id);
|
||||
break;
|
||||
case ChannelGroupIds.BackingTrackGroup: // 11
|
||||
backingTrackMixers.push(mixerPair);
|
||||
break;
|
||||
case ChannelGroupIds.JamTrackGroup: // 12
|
||||
jamTrackMixers.push(mixerPair);
|
||||
break;
|
||||
case ChannelGroupIds.RecordingGroup: // 13
|
||||
recordingTrackMixers.push(mixerPair);
|
||||
break;
|
||||
default:
|
||||
// Other mixer types go into adhoc
|
||||
if (masterMixer.group_id !== ChannelGroupIds.UserMusicInputGroup &&
|
||||
masterMixer.group_id !== ChannelGroupIds.ChatMicGroup &&
|
||||
masterMixer.group_id !== ChannelGroupIds.BroadcastGroup) {
|
||||
adhocTrackMixers.push(mixerPair);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[useMixerHelper] Categorized mixers:', {
|
||||
metronome: metronomeTrackMixers.length,
|
||||
backing: backingTrackMixers.length,
|
||||
jam: jamTrackMixers.length,
|
||||
recording: recordingTrackMixers.length,
|
||||
adhoc: adhocTrackMixers.length
|
||||
});
|
||||
|
||||
// Dispatch to Redux
|
||||
dispatch(setMetronomeTrackMixers(metronomeTrackMixers));
|
||||
dispatch(setBackingTrackMixers(backingTrackMixers));
|
||||
dispatch(setJamTrackMixers(jamTrackMixers));
|
||||
dispatch(setRecordingTrackMixers(recordingTrackMixers));
|
||||
dispatch(setAdhocTrackMixers(adhocTrackMixers));
|
||||
|
||||
}, [masterMixers, personalMixers, mixMode, dispatch]);
|
||||
|
||||
// Sync local isReady ref with Redux isReady state
|
||||
// This ensures VU meter callbacks have immediate access to the ready state
|
||||
|
|
|
|||
Loading…
Reference in New Issue