From 3ef17cecb44f8e4fd2bf64afd229d0175a0d3f38 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Tue, 8 Jul 2025 22:51:42 +0200 Subject: refactor: centralize logic to zustand store --- apps/web/src/stores/media-store.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'apps/web/src/stores') diff --git a/apps/web/src/stores/media-store.ts b/apps/web/src/stores/media-store.ts index 268fd0fc..40aa2c66 100644 --- a/apps/web/src/stores/media-store.ts +++ b/apps/web/src/stores/media-store.ts @@ -1,5 +1,6 @@ import { create } from "zustand"; import { storageService } from "@/lib/storage/storage-service"; +import { useTimelineStore } from "./timeline-store"; export type MediaType = "image" | "video" | "audio"; @@ -192,6 +193,27 @@ export const useMediaStore = create((set, get) => ({ } } + // CASCADE DELETION - Remove timeline elements that use this media + const { tracks, removeElementFromTrack, removeTrack } = + useTimelineStore.getState(); + + tracks.forEach((track) => { + const elementsToRemove = track.elements.filter( + (element) => element.type === "media" && element.mediaId === id + ); + elementsToRemove.forEach((element) => { + removeElementFromTrack(track.id, element.id); + }); + }); + + // Clean up empty tracks after removing elements + const updatedTracks = useTimelineStore.getState().tracks; + updatedTracks.forEach((track) => { + if (track.elements.length === 0) { + removeTrack(track.id); + } + }); + // Remove from local state immediately set((state) => ({ mediaItems: state.mediaItems.filter((media) => media.id !== id), -- cgit v1.3.1