fix: auto-add tracks when drag exceeds track count

Compute maxTargetIdx across all multiIds items. Prepend new
tracks to prev array before mapping if needed.
This commit is contained in:
2026-07-29 11:08:11 +07:00
parent 9abb0e6a50
commit ad6fa1feb9
3 changed files with 24 additions and 1 deletions
+16
View File
@@ -12075,6 +12075,22 @@ const App = () => {
if (drag.multiIds) {
var dragOrigStart = drag.multiIds[drag.itemId] ? drag.multiIds[drag.itemId].start : 0;
var delta = newStart - dragOrigStart;
// Ensure enough tracks exist for all displaced items
var maxTrg = 0;
Object.keys(drag.multiIds).forEach(function(mid) {
var inf = drag.multiIds[mid];
var origIdx = trkIds.indexOf(inf.trackId);
if (origIdx < 0) origIdx = baseIdx;
var trg = Math.max(0, origIdx + crossOffset);
if (trg > maxTrg) maxTrg = trg;
});
var tracksToAdd = [];
while (prev.length <= maxTrg) {
var newId = (prev.length + tracksToAdd.length + 1).toString();
var colors = ['#0f766e', '#1d4ed8', '#701a75', '#a21caf', '#b45309'];
tracksToAdd.push({ id: newId, name: 'Track ' + newId, buffer: null, startTime: 0, volumeDb: 0, pan: 0, muted: false, solo: false, color: colors[(prev.length + tracksToAdd.length) % colors.length], clips: [], midiItems: [], sections: [], markers: [], isArmed: false, height: 140 });
}
if (tracksToAdd.length > 0) prev = prev.concat(tracksToAdd);
return prev.map(function(t) {
var resS = (t.sections || []).slice();
var resM = (t.midiItems || []).slice();