diff --git a/frontend/src/pages/QuickStartPage.tsx b/frontend/src/pages/QuickStartPage.tsx index 9afbbc85..aeb005ba 100644 --- a/frontend/src/pages/QuickStartPage.tsx +++ b/frontend/src/pages/QuickStartPage.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useRef } from 'react' +import { useState, useEffect, useRef, useMemo } from 'react' import { useNavigate, Link } from 'react-router-dom' import { Search, Plus, Loader2, Star, ChevronDown, ChevronLeft, ChevronRight, Sparkles, FolderTree, ListOrdered, Wrench } from 'lucide-react' import { treesApi } from '@/api/trees' @@ -8,7 +8,7 @@ import type { Session } from '@/types/session' import { getTreeNavigatePath } from '@/lib/routing' import { usePermissions } from '@/hooks/usePermissions' import { useAuthStore } from '@/store/authStore' -import { usePinnedFlowsStore, selectPinnedTreeIds, selectPinLoadingTreeIds } from '@/store/pinnedFlowsStore' +import { usePinnedFlowsStore } from '@/store/pinnedFlowsStore' import { useUserPreferencesStore } from '@/store/userPreferencesStore' import { usePaginationParams } from '@/hooks/usePaginationParams' import { useCachedQuota } from '@/hooks/useCachedQuota' @@ -70,10 +70,15 @@ export function QuickStartPage() { const pinnedItems = usePinnedFlowsStore((s) => s.items) const pinnedIsLoading = usePinnedFlowsStore((s) => s.isLoading) const loadPinned = usePinnedFlowsStore((s) => s.load) - const pinnedTreeIds = usePinnedFlowsStore(selectPinnedTreeIds) - const pinLoadingTreeIds = usePinnedFlowsStore(selectPinLoadingTreeIds) + const isMutatingByTreeId = usePinnedFlowsStore((s) => s.isMutatingByTreeId) const togglePin = usePinnedFlowsStore((s) => s.toggle) + const pinnedTreeIds = useMemo(() => new Set(pinnedItems.map((f) => f.tree_id)), [pinnedItems]) + const pinLoadingTreeIds = useMemo( + () => new Set(Object.entries(isMutatingByTreeId).filter(([, v]) => v).map(([k]) => k)), + [isMutatingByTreeId] + ) + // Preferences const { dashboardMyFlowsView, setDashboardMyFlowsView } = useUserPreferencesStore() diff --git a/frontend/src/pages/TreeLibraryPage.tsx b/frontend/src/pages/TreeLibraryPage.tsx index 603ca4b5..57f38738 100644 --- a/frontend/src/pages/TreeLibraryPage.tsx +++ b/frontend/src/pages/TreeLibraryPage.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState, useCallback } from 'react' +import { useEffect, useState, useCallback, useMemo } from 'react' import { useNavigate, Link, useSearchParams } from 'react-router-dom' import { Plus, X, RotateCcw, Play, ChevronDown, Sparkles, FolderTree, ListOrdered, Wrench } from 'lucide-react' import { treesApi } from '@/api/trees' @@ -17,7 +17,7 @@ import { cn, safeGetItem } from '@/lib/utils' import { getSessionResumePath } from '@/lib/routing' import { usePermissions } from '@/hooks/usePermissions' import { useUserPreferencesStore } from '@/store/userPreferencesStore' -import { usePinnedFlowsStore, selectPinnedTreeIds, selectPinLoadingTreeIds } from '@/store/pinnedFlowsStore' +import { usePinnedFlowsStore } from '@/store/pinnedFlowsStore' import { useCachedQuota } from '@/hooks/useCachedQuota' import { AIFlowBuilderModal } from '@/components/ai-builder/AIFlowBuilderModal' import { toast } from '@/lib/toast' @@ -78,8 +78,13 @@ export function TreeLibraryPage() { const { aiEnabled } = useCachedQuota() // Pin store - const pinnedTreeIds = usePinnedFlowsStore(selectPinnedTreeIds) - const pinLoadingTreeIds = usePinnedFlowsStore(selectPinLoadingTreeIds) + const pinnedItems = usePinnedFlowsStore((s) => s.items) + const isMutatingByTreeId = usePinnedFlowsStore((s) => s.isMutatingByTreeId) + const pinnedTreeIds = useMemo(() => new Set(pinnedItems.map((f) => f.tree_id)), [pinnedItems]) + const pinLoadingTreeIds = useMemo( + () => new Set(Object.entries(isMutatingByTreeId).filter(([, v]) => v).map(([k]) => k)), + [isMutatingByTreeId] + ) const togglePin = usePinnedFlowsStore((s) => s.toggle) const loadPinned = usePinnedFlowsStore((s) => s.load) diff --git a/frontend/src/store/pinnedFlowsStore.ts b/frontend/src/store/pinnedFlowsStore.ts index 249600ba..567b8177 100644 --- a/frontend/src/store/pinnedFlowsStore.ts +++ b/frontend/src/store/pinnedFlowsStore.ts @@ -102,12 +102,3 @@ export const usePinnedFlowsStore = create()((set, get) => ({ }, })) -export const selectPinnedTreeIds = (state: PinnedFlowsState): Set => - new Set(state.items.map((f) => f.tree_id)) - -export const selectPinLoadingTreeIds = (state: PinnedFlowsState): Set => - new Set( - Object.entries(state.isMutatingByTreeId) - .filter(([, v]) => v) - .map(([k]) => k) - )