fix: instrument load from PIANO_ROLL in SECTION-TAB writes to main

updateActiveTracksRef checks sessionTabs by currentActiveTab.
When activeTab is a PIANO_ROLL sub-tab (midi_xxx), none matches
-> falls to setTracks (main). Instrument changes are lost.
Fix: also check subTabs for PIANO_ROLL type, resolve parent
session tab via parent_tab_id, route to setSessionTabs.
This commit is contained in:
2026-07-28 08:11:36 +07:00
parent 447504ea67
commit ed51cab765
3 changed files with 18 additions and 4 deletions
+11 -3
View File
@@ -12380,12 +12380,20 @@ const App = () => {
const updateActiveTracksRef = useCallback(updater => {
const currentSessionTabs = sessionTabsRef.current;
const currentActiveTab = activeTabRef.current;
const st = currentSessionTabs.find(s => s.id === currentActiveTab);
var st = currentSessionTabs.find(s => s.id === currentActiveTab);
if (st) {
setSessionTabs(prev => prev.map(s => s.id === currentActiveTab ? { ...s, tracks: updater(s.tracks), isDirty: true } : s));
} else {
setTracks(updater);
return;
}
var pr = subTabsRef.current ? subTabsRef.current.find(s => s.id === currentActiveTab && s.type === 'PIANO_ROLL') : null;
if (pr && pr.parent_tab_id && pr.parent_tab_id.startsWith('session_')) {
var parentSt = currentSessionTabs.find(s => s.id === pr.parent_tab_id);
if (parentSt) {
setSessionTabs(prev => prev.map(s => s.id === pr.parent_tab_id ? { ...s, tracks: updater(s.tracks), isDirty: true } : s));
return;
}
}
setTracks(updater);
}, []);
const updateActiveTracks = updateActiveTracksRef;