feat(22-01): add UIStore modal states, AddToCollectionModal, and sonner toasts
- Extend UIStore with addToCollectionModal, addToThreadModal, catalogSessionThreadId - Create AddToCollectionModal with category dropdown, notes, purchase price - Install sonner and add Toaster + AddToCollectionModal to root layout - closeCatalogSearch now resets catalogSessionThreadId Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -57,6 +57,20 @@ interface UIState {
|
||||
catalogSearchMode: "collection" | "thread" | null;
|
||||
openCatalogSearch: (mode: "collection" | "thread") => void;
|
||||
closeCatalogSearch: () => void;
|
||||
|
||||
// Add-to-collection modal
|
||||
addToCollectionModal: { open: boolean; globalItemId: number | null; globalItemName: string | null };
|
||||
openAddToCollection: (globalItemId: number, globalItemName: string) => void;
|
||||
closeAddToCollection: () => void;
|
||||
|
||||
// Add-to-thread modal
|
||||
addToThreadModal: { open: boolean; globalItemId: number | null; globalItemName: string | null };
|
||||
openAddToThread: (globalItemId: number, globalItemName: string) => void;
|
||||
closeAddToThread: () => void;
|
||||
|
||||
// Session thread tracking
|
||||
catalogSessionThreadId: number | null;
|
||||
setCatalogSessionThreadId: (id: number | null) => void;
|
||||
}
|
||||
|
||||
export const useUIStore = create<UIState>((set) => ({
|
||||
@@ -123,5 +137,23 @@ export const useUIStore = create<UIState>((set) => ({
|
||||
fabMenuOpen: false,
|
||||
}),
|
||||
closeCatalogSearch: () =>
|
||||
set({ catalogSearchOpen: false, catalogSearchMode: null }),
|
||||
set({ catalogSearchOpen: false, catalogSearchMode: null, catalogSessionThreadId: null }),
|
||||
|
||||
// Add-to-collection modal
|
||||
addToCollectionModal: { open: false, globalItemId: null, globalItemName: null },
|
||||
openAddToCollection: (globalItemId, globalItemName) =>
|
||||
set({ addToCollectionModal: { open: true, globalItemId, globalItemName } }),
|
||||
closeAddToCollection: () =>
|
||||
set({ addToCollectionModal: { open: false, globalItemId: null, globalItemName: null } }),
|
||||
|
||||
// Add-to-thread modal
|
||||
addToThreadModal: { open: false, globalItemId: null, globalItemName: null },
|
||||
openAddToThread: (globalItemId, globalItemName) =>
|
||||
set({ addToThreadModal: { open: true, globalItemId, globalItemName } }),
|
||||
closeAddToThread: () =>
|
||||
set({ addToThreadModal: { open: false, globalItemId: null, globalItemName: null } }),
|
||||
|
||||
// Session thread tracking
|
||||
catalogSessionThreadId: null,
|
||||
setCatalogSessionThreadId: (id) => set({ catalogSessionThreadId: id }),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user