move bookmark preview to its own route
This commit is contained in:
63
packages/web/src/app/bookmarks/-store.tsx
Normal file
63
packages/web/src/app/bookmarks/-store.tsx
Normal file
@@ -0,0 +1,63 @@
|
||||
import type { LinkBookmark } from "@markone/core/bookmark"
|
||||
import { create } from "zustand/react"
|
||||
import { BookmarkListItemAction } from "./-bookmark-list"
|
||||
import { router } from "~/router"
|
||||
|
||||
enum LayoutMode {
|
||||
Popup = "Popup",
|
||||
SideBySide = "SideBySide",
|
||||
}
|
||||
|
||||
enum ActiveDialog {
|
||||
None = "None",
|
||||
AddBookmark = "AddBookmark",
|
||||
DeleteBookmark = "DeleteBookmark",
|
||||
}
|
||||
|
||||
interface BookmarkPageState {
|
||||
bookmarkToBeDeleted: LinkBookmark | null
|
||||
layoutMode: LayoutMode
|
||||
activeDialog: ActiveDialog
|
||||
|
||||
handleBookmarkListItemAction: (bookmark: LinkBookmark, action: BookmarkListItemAction) => void
|
||||
setActiveDialog: (dialog: ActiveDialog) => void
|
||||
setLayoutMode: (mode: LayoutMode) => void
|
||||
}
|
||||
|
||||
const useBookmarkPageStore = create<BookmarkPageState>()((set, get) => ({
|
||||
bookmarkCount: 0,
|
||||
bookmarks: [],
|
||||
selectedBookmarkId: "",
|
||||
selectedBookmarkIndex: 0,
|
||||
isBookmarkItemExpanded: false,
|
||||
isBookmarkPreviewOpened: false,
|
||||
bookmarkToBeDeleted: null,
|
||||
layoutMode: LayoutMode.Popup,
|
||||
activeDialog: ActiveDialog.None,
|
||||
actionBarHeight: 0,
|
||||
|
||||
handleBookmarkListItemAction(bookmark: LinkBookmark, action: BookmarkListItemAction) {
|
||||
switch (action) {
|
||||
case BookmarkListItemAction.Open:
|
||||
router.navigate({ to: `/bookmarks/${bookmark.id}` })
|
||||
break
|
||||
|
||||
case BookmarkListItemAction.Delete:
|
||||
set({ bookmarkToBeDeleted: bookmark, activeDialog: ActiveDialog.DeleteBookmark })
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
},
|
||||
|
||||
setActiveDialog(dialog: ActiveDialog) {
|
||||
set({ activeDialog: dialog })
|
||||
},
|
||||
|
||||
setLayoutMode(mode: LayoutMode) {
|
||||
set({ layoutMode: mode })
|
||||
},
|
||||
}))
|
||||
|
||||
export { LayoutMode, ActiveDialog, useBookmarkPageStore }
|
||||
export type { BookmarkPageState }
|
Reference in New Issue
Block a user