summaryrefslogtreecommitdiff
path: root/apps/web/src/stores/media-store.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2025-07-08 22:51:42 +0200
committerMaze Winther <mazewinther@gmail.com>2025-07-08 22:51:42 +0200
commit3ef17cecb44f8e4fd2bf64afd229d0175a0d3f38 (patch)
treeef736e34a3f8889b28f0e9e8c5ecc5689da53503 /apps/web/src/stores/media-store.ts
parent24b9c89084fdba61aebe872432561d06012fb4a1 (diff)
downloadopencut-3ef17cecb44f8e4fd2bf64afd229d0175a0d3f38.tar.gz
refactor: centralize logic to zustand store
Diffstat (limited to 'apps/web/src/stores/media-store.ts')
-rw-r--r--apps/web/src/stores/media-store.ts22
1 files changed, 22 insertions, 0 deletions
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<MediaStore>((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),