diff options
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; |
