64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
|
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 }
|