diff options
Diffstat (limited to 'apps/web/src/stores')
| -rw-r--r-- | apps/web/src/stores/project-store.ts | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/apps/web/src/stores/project-store.ts b/apps/web/src/stores/project-store.ts index 69aca3ec..bfabba1f 100644 --- a/apps/web/src/stores/project-store.ts +++ b/apps/web/src/stores/project-store.ts @@ -11,6 +11,7 @@ interface ProjectStore { savedProjects: TProject[]; isLoading: boolean; isInitialized: boolean; + invalidProjectIds?: Set<string>; // Actions createNewProject: (name: string) => Promise<string>; @@ -27,7 +28,7 @@ interface ProjectStore { options?: { backgroundColor?: string; blurIntensity?: number } ) => Promise<void>; updateProjectFps: (fps: number) => Promise<void>; - + // Bookmark methods toggleBookmark: (time: number) => Promise<void>; isBookmarked: (time: number) => boolean; @@ -37,6 +38,11 @@ interface ProjectStore { searchQuery: string, sortOption: string ) => TProject[]; + + // Global invalid project ID tracking + isInvalidProjectId: (id: string) => boolean; + markProjectIdAsInvalid: (id: string) => void; + clearInvalidProjectIds: () => void; } export const useProjectStore = create<ProjectStore>((set, get) => ({ @@ -44,24 +50,25 @@ export const useProjectStore = create<ProjectStore>((set, get) => ({ savedProjects: [], isLoading: true, isInitialized: false, - + invalidProjectIds: new Set<string>(), + // Implementation of bookmark methods toggleBookmark: async (time: number) => { const { activeProject } = get(); if (!activeProject) return; - + // Round time to the nearest frame const fps = activeProject.fps || 30; const frameTime = Math.round(time * fps) / fps; - + const bookmarks = activeProject.bookmarks || []; let updatedBookmarks: number[]; - + // Check if already bookmarked const bookmarkIndex = bookmarks.findIndex( - bookmark => Math.abs(bookmark - frameTime) < 0.001 + (bookmark) => Math.abs(bookmark - frameTime) < 0.001 ); - + if (bookmarkIndex !== -1) { // Remove bookmark updatedBookmarks = bookmarks.filter((_, i) => i !== bookmarkIndex); @@ -69,13 +76,13 @@ export const useProjectStore = create<ProjectStore>((set, get) => ({ // Add bookmark updatedBookmarks = [...bookmarks, frameTime].sort((a, b) => a - b); } - + const updatedProject = { ...activeProject, bookmarks: updatedBookmarks, updatedAt: new Date(), }; - + try { await storageService.saveProject(updatedProject); set({ activeProject: updatedProject }); @@ -87,43 +94,43 @@ export const useProjectStore = create<ProjectStore>((set, get) => ({ }); } }, - + isBookmarked: (time: number) => { const { activeProject } = get(); if (!activeProject || !activeProject.bookmarks) return false; - + // Round time to the nearest frame const fps = activeProject.fps || 30; const frameTime = Math.round(time * fps) / fps; - + return activeProject.bookmarks.some( - bookmark => Math.abs(bookmark - frameTime) < 0.001 + (bookmark) => Math.abs(bookmark - frameTime) < 0.001 ); }, - + removeBookmark: async (time: number) => { const { activeProject } = get(); if (!activeProject || !activeProject.bookmarks) return; - + // Round time to the nearest frame const fps = activeProject.fps || 30; const frameTime = Math.round(time * fps) / fps; - + const updatedBookmarks = activeProject.bookmarks.filter( - bookmark => Math.abs(bookmark - frameTime) >= 0.001 + (bookmark) => Math.abs(bookmark - frameTime) >= 0.001 ); - + if (updatedBookmarks.length === activeProject.bookmarks.length) { // No bookmark found to remove return; } - + const updatedProject = { ...activeProject, bookmarks: updatedBookmarks, updatedAt: new Date(), }; - + try { await storageService.saveProject(updatedProject); set({ activeProject: updatedProject }); @@ -454,4 +461,23 @@ export const useProjectStore = create<ProjectStore>((set, get) => ({ return sortedProjects; }, + + // Global invalid project ID tracking implementation + isInvalidProjectId: (id: string) => { + const invalidIds = get().invalidProjectIds || new Set(); + return invalidIds.has(id); + }, + + markProjectIdAsInvalid: (id: string) => { + set((state) => ({ + invalidProjectIds: new Set([ + ...(state.invalidProjectIds || new Set()), + id, + ]), + })); + }, + + clearInvalidProjectIds: () => { + set({ invalidProjectIds: new Set() }); + }, })); |
