diff options
| author | lexafaxine <40200356+lexafaxine@users.noreply.github.com> | 2025-02-10 00:11:17 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-09 15:11:17 +0000 |
| commit | f9c2557f98baab00245efb9f97461d7b9b7c186a (patch) | |
| tree | 0ce814795c58d2b7dac14178d880cef4f0cfef67 /apps/web/lib | |
| parent | d6456ebb6adb05eb8b5705bf44dc5ad77948c634 (diff) | |
| download | karakeep-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.ts | 56 |
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; |
