aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/lib
diff options
context:
space:
mode:
authorlexafaxine <40200356+lexafaxine@users.noreply.github.com>2025-02-10 00:11:17 +0900
committerGitHub <noreply@github.com>2025-02-09 15:11:17 +0000
commitf9c2557f98baab00245efb9f97461d7b9b7c186a (patch)
tree0ce814795c58d2b7dac14178d880cef4f0cfef67 /apps/web/lib
parentd6456ebb6adb05eb8b5705bf44dc5ad77948c634 (diff)
downloadkarakeep-f9c2557f98baab00245efb9f97461d7b9b7c186a.tar.zst
feat(web): bulk tag deletion. Fixes #872 (#900)
* feat(web): #872 bulk tag deletion * revert lock file change * change bulk tag action type def and fix small issue * fix prettier * minor fixes --------- Co-authored-by: Mohamed Bassem <me@mbassem.com>
Diffstat (limited to 'apps/web/lib')
-rw-r--r--apps/web/lib/bulkTagActions.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/apps/web/lib/bulkTagActions.ts b/apps/web/lib/bulkTagActions.ts
new file mode 100644
index 00000000..aa49f4f1
--- /dev/null
+++ b/apps/web/lib/bulkTagActions.ts
@@ -0,0 +1,56 @@
+import { create } from "zustand";
+
+interface TagState {
+ selectedTagIds: string[];
+ visibleTagIds: string[];
+ isBulkEditEnabled: boolean;
+ setIsBulkEditEnabled: (isEnabled: boolean) => void;
+ toggleTag: (tagId: string) => void;
+ setVisibleTagIds: (visibleTagIds: string[]) => void;
+ selectAll: () => void;
+ unSelectAll: () => void;
+ isEverythingSelected: () => boolean;
+ isTagSelected: (tagId: string) => boolean;
+}
+
+const useBulkTagActionsStore = create<TagState>((set, get) => ({
+ selectedTagIds: [],
+ visibleTagIds: [],
+ isBulkEditEnabled: false,
+
+ toggleTag: (tagId: string) => {
+ const selectedTagIds = get().selectedTagIds;
+ set({
+ selectedTagIds: selectedTagIds.includes(tagId)
+ ? selectedTagIds.filter((id) => id !== tagId)
+ : [...selectedTagIds, tagId],
+ });
+ },
+
+ selectAll: () => {
+ set({ selectedTagIds: get().visibleTagIds });
+ },
+ unSelectAll: () => {
+ set({ selectedTagIds: [] });
+ },
+
+ isEverythingSelected: () => {
+ return get().selectedTagIds.length === get().visibleTagIds.length;
+ },
+
+ setIsBulkEditEnabled: (isEnabled) => {
+ set({
+ isBulkEditEnabled: isEnabled,
+ selectedTagIds: [],
+ });
+ },
+
+ setVisibleTagIds: (visibleTagIds: string[]) => {
+ set({ visibleTagIds });
+ },
+ isTagSelected: (tagId: string) => {
+ return get().selectedTagIds.includes(tagId);
+ },
+}));
+
+export default useBulkTagActionsStore;