From f9c2557f98baab00245efb9f97461d7b9b7c186a Mon Sep 17 00:00:00 2001 From: lexafaxine <40200356+lexafaxine@users.noreply.github.com> Date: Mon, 10 Feb 2025 00:11:17 +0900 Subject: 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 --- apps/web/lib/bulkTagActions.ts | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 apps/web/lib/bulkTagActions.ts (limited to 'apps/web/lib') 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((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; -- cgit v1.2.3-70-g09d2