UNPKG

reactflow-canvas-store

Version:

Global and multi-canvas state store for React Flow projects.

128 lines (96 loc) 2.9 kB
# reactflow-canvas-store Global and multi-canvas state management solution for [React Flow](https://reactflow.dev/) projects. --- ## ✨ Features - ✅ Global store shared across all canvases. - ✅ Canvas-level isolated store with `canvasId` scoping. - ✅ React Context + hooks for reactive updates. - ✅ Simple API for imperative or hook-based access. - ✅ Written in 100% TypeScript. --- ## 📦 Installation ```bash npm install reactflow-canvas-store Make sure to also install React as a peer dependency: ```bash npm install react react-dom ``` ## 🚀 Usage ### 🔸 1. Wrap your app with Providers ```tsx import { GlobalStoreProvider, CanvasStoreProvider, } from 'reactflow-canvas-store'; function App() { return ( <GlobalStoreProvider> <CanvasStoreProvider> <YourReactFlowApp /> </CanvasStoreProvider> </GlobalStoreProvider> ); } ``` ### 🔸 2. Using Global Store ```tsx import { useGlobalStore } from 'reactflow-canvas-store'; function SettingsPanel() { const [theme, setTheme] = useGlobalStore<string>('theme'); return ( <button onClick={() => setTheme('dark')}>Set Dark Mode</button> ); } ``` ### 🔸 3. Using Canvas Store (per canvasId) ```tsx import { useCanvasStore } from 'reactflow-canvas-store'; function CanvasNode({ canvasId }: { canvasId: string }) { const [nodes, setNodes] = useCanvasStore<any[]>(canvasId, 'nodes'); return ( <button onClick={() => setNodes([...nodes, { id: 'new' }])}> Add Node </button> ); } ``` ⚠️ Use (nodes || []) to avoid errors on initial undefined. ###🔸 4. Imperative Access (without hooks) ```ts import { setGlobalStore, getGlobalStore, setCanvasStore, getCanvasStore, } from 'reactflow-canvas-store'; setGlobalStore('language', 'en'); console.log(getGlobalStore('language')); // 'en' setCanvasStore('canvas1', 'edges', []); console.log(getCanvasStore('canvas1', 'edges')); ``` ## 📚 API | Function | Description | | --------------------- | ---------------------------------------- | | `useGlobalStore()` | Reactive global state hook | | `getGlobalStore()` | Non-reactive global getter | | `setGlobalStore()` | Global setter | | `useCanvasStore(id)` | Reactive canvas-specific hook | | `getCanvasStore(id)` | Non-reactive canvas-specific getter | | `setCanvasStore(id)` | Canvas-specific setter | | `GlobalStoreProvider` | Wraps app for global context | | `CanvasStoreProvider` | Wraps a canvas and provides scoped store | ## 📂 Folder Structure ```css src/ global/ globalStore.ts GlobalStoreProvider.tsx useGlobalStore.ts canvas/ canvasStore.ts CanvasStoreProvider.tsx useCanvasStore.ts index.ts ``` ## 📜 License MIT © Seesa Sandeep Kumar