aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/lib')
-rw-r--r--apps/web/lib/bulkActions.ts23
1 files changed, 23 insertions, 0 deletions
diff --git a/apps/web/lib/bulkActions.ts b/apps/web/lib/bulkActions.ts
index 1e9dbbd7..a2ee6a29 100644
--- a/apps/web/lib/bulkActions.ts
+++ b/apps/web/lib/bulkActions.ts
@@ -5,13 +5,19 @@ import type { ZBookmark } from "@hoarder/shared/types/bookmarks";
interface BookmarkState {
selectedBookmarks: ZBookmark[];
+ visibleBookmarks: ZBookmark[];
isBulkEditEnabled: boolean;
setIsBulkEditEnabled: (isEnabled: boolean) => void;
toggleBookmark: (bookmark: ZBookmark) => void;
+ setVisibleBookmarks: (visibleBookmarks: ZBookmark[]) => void;
+ selectAll: () => void;
+ unSelectAll: () => void;
+ isEverythingSelected: () => boolean;
}
const useBulkActionsStore = create<BookmarkState>((set, get) => ({
selectedBookmarks: [],
+ visibleBookmarks: [],
isBulkEditEnabled: false,
toggleBookmark: (bookmark: ZBookmark) => {
@@ -30,10 +36,27 @@ const useBulkActionsStore = create<BookmarkState>((set, get) => ({
}
},
+ selectAll: () => {
+ set({ selectedBookmarks: get().visibleBookmarks });
+ },
+ unSelectAll: () => {
+ set({ selectedBookmarks: [] });
+ },
+
+ isEverythingSelected: () => {
+ return get().selectedBookmarks.length === get().visibleBookmarks.length;
+ },
+
setIsBulkEditEnabled: (isEnabled) => {
set({ isBulkEditEnabled: isEnabled });
set({ selectedBookmarks: [] });
},
+
+ setVisibleBookmarks: (visibleBookmarks: ZBookmark[]) => {
+ set({
+ visibleBookmarks,
+ });
+ },
}));
export default useBulkActionsStore;