2025-05-21 13:18:16 +01:00
|
|
|
import type { Bookmark } from "@markone/core/bookmark"
|
2025-05-13 18:34:08 +01:00
|
|
|
import { create } from "zustand/react"
|
|
|
|
import { router } from "~/router"
|
2025-05-21 13:18:16 +01:00
|
|
|
import { BookmarkListItemAction } from "./-bookmark-list"
|
2025-05-13 18:34:08 +01:00
|
|
|
|
|
|
|
enum LayoutMode {
|
|
|
|
Popup = "Popup",
|
|
|
|
SideBySide = "SideBySide",
|
|
|
|
}
|
|
|
|
|
|
|
|
enum ActiveDialog {
|
|
|
|
None = "None",
|
|
|
|
AddBookmark = "AddBookmark",
|
|
|
|
DeleteBookmark = "DeleteBookmark",
|
|
|
|
}
|
|
|
|
|
|
|
|
interface BookmarkPageState {
|
2025-05-21 13:18:16 +01:00
|
|
|
bookmarkToBeDeleted: Bookmark | null
|
2025-05-13 18:34:08 +01:00
|
|
|
layoutMode: LayoutMode
|
|
|
|
activeDialog: ActiveDialog
|
|
|
|
|
2025-05-21 13:18:16 +01:00
|
|
|
handleBookmarkListItemAction: (bookmark: Bookmark, action: BookmarkListItemAction) => void
|
2025-05-13 18:34:08 +01:00
|
|
|
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,
|
|
|
|
|
2025-05-21 13:18:16 +01:00
|
|
|
handleBookmarkListItemAction(bookmark: Bookmark, action: BookmarkListItemAction) {
|
2025-05-13 18:34:08 +01:00
|
|
|
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 }
|