4 changed files with 95 additions and 32 deletions
@ -0,0 +1,45 @@ |
|||||||
|
import { create } from "zustand"; |
||||||
|
import { persist } from "zustand/middleware"; |
||||||
|
import { immer } from "zustand/middleware/immer"; |
||||||
|
|
||||||
|
import { PlayerMeta } from "@/stores/player/slices/source"; |
||||||
|
|
||||||
|
export interface BookmarkMediaItem { |
||||||
|
title: string; |
||||||
|
year: number; |
||||||
|
poster?: string; |
||||||
|
type: "show" | "movie"; |
||||||
|
} |
||||||
|
|
||||||
|
export interface ProgressStore { |
||||||
|
bookmarks: Record<string, BookmarkMediaItem>; |
||||||
|
addBookmark(meta: PlayerMeta): void; |
||||||
|
removeBookmark(id: string): void; |
||||||
|
} |
||||||
|
|
||||||
|
// TODO add migration from previous bookmark store
|
||||||
|
export const useBookmarkStore = create( |
||||||
|
persist( |
||||||
|
immer<ProgressStore>((set) => ({ |
||||||
|
bookmarks: {}, |
||||||
|
removeBookmark(id) { |
||||||
|
set((s) => { |
||||||
|
delete s.bookmarks[id]; |
||||||
|
}); |
||||||
|
}, |
||||||
|
addBookmark(meta) { |
||||||
|
set((s) => { |
||||||
|
s.bookmarks[meta.tmdbId] = { |
||||||
|
type: meta.type, |
||||||
|
title: meta.title, |
||||||
|
year: meta.releaseYear, |
||||||
|
poster: meta.poster, |
||||||
|
}; |
||||||
|
}); |
||||||
|
}, |
||||||
|
})), |
||||||
|
{ |
||||||
|
name: "__MW::bookmarks", |
||||||
|
} |
||||||
|
) |
||||||
|
); |
Loading…
Reference in new issue