diff options
| author | enkei64 <imenkei64@gmail.com> | 2025-08-04 18:11:24 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-04 18:11:24 +1000 |
| commit | 21b248718b0d1f6e7f32a8bac0cc1277241b7bd5 (patch) | |
| tree | 70d9c53fc561a9100dd4c7d1cb6d49d45e35b989 /apps/web/src/stores/timeline-store.ts | |
| parent | bb36b2e439bffcaa7059e3c0578a0fc61c2737ac (diff) | |
| parent | d022a78ae2330665e7d763fdc6e831a71f3b9ea1 (diff) | |
| download | opencut-21b248718b0d1f6e7f32a8bac0cc1277241b7bd5.tar.gz | |
Merge branch 'staging' into feature/panel-presets
Diffstat (limited to 'apps/web/src/stores/timeline-store.ts')
| -rw-r--r-- | apps/web/src/stores/timeline-store.ts | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/apps/web/src/stores/timeline-store.ts b/apps/web/src/stores/timeline-store.ts index 0f441176..71ddedca 100644 --- a/apps/web/src/stores/timeline-store.ts +++ b/apps/web/src/stores/timeline-store.ts @@ -1445,16 +1445,24 @@ export const useTimelineStore = create<TimelineStore>((set, get) => { addMediaAtTime: (item, currentTime = 0) => { const trackType = item.type === "audio" ? "audio" : "media"; - const targetTrackId = get().findOrCreateTrack(trackType); - const duration = item.duration || TIMELINE_CONSTANTS.DEFAULT_IMAGE_DURATION; - if (get().checkElementOverlap(targetTrackId, currentTime, duration)) { - toast.error( - "Cannot place element here - it would overlap with existing elements" - ); - return false; + // Get all tracks of the right type + const tracks = get()._tracks.filter((t) => t.type === trackType); + + // Try to find a track with no overlap + let targetTrackId = null; + for (const track of tracks) { + if (!get().checkElementOverlap(track.id, currentTime, duration)) { + targetTrackId = track.id; + break; + } + } + + // If no free track found, create a new one + if (!targetTrackId) { + targetTrackId = get().addTrack(trackType); } get().addElementToTrack(targetTrackId, { |
