mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-08 22:48:14 -05:00
* feat(kb): emcn alignment; sidebar: popover primary; settings-modal: expand * feat: EMCN breadcrumb; improvement(KB): UI * fix: hydration error * improvement(KB): UI * feat: emcn modal sizing, KB tags; refactor: deleted old sidebar * feat(logs): UI * fix: add documents modal name * feat: logs, emcn, cursorrules; refactor: logs * feat: dashboard * feat: notifications; improvement: logs details * fixed random rectangle on canvas * fixed the name of the file to align * fix build --------- Co-authored-by: waleed <walif6@gmail.com>
58 lines
1.2 KiB
Plaintext
58 lines
1.2 KiB
Plaintext
---
|
|
description: Zustand store patterns
|
|
globs: ["apps/sim/**/store.ts", "apps/sim/**/stores/**/*.ts"]
|
|
---
|
|
|
|
# Zustand Store Patterns
|
|
|
|
## Structure
|
|
```typescript
|
|
import { create } from 'zustand'
|
|
import { persist } from 'zustand/middleware'
|
|
|
|
interface FeatureState {
|
|
// State
|
|
items: Item[]
|
|
activeId: string | null
|
|
|
|
// Actions
|
|
setItems: (items: Item[]) => void
|
|
addItem: (item: Item) => void
|
|
clearState: () => void
|
|
}
|
|
|
|
const createInitialState = () => ({
|
|
items: [],
|
|
activeId: null,
|
|
})
|
|
|
|
export const useFeatureStore = create<FeatureState>()(
|
|
persist(
|
|
(set) => ({
|
|
...createInitialState(),
|
|
|
|
setItems: (items) => set({ items }),
|
|
|
|
addItem: (item) => set((state) => ({
|
|
items: [...state.items, item],
|
|
})),
|
|
|
|
clearState: () => set(createInitialState()),
|
|
}),
|
|
{
|
|
name: 'feature-state',
|
|
partialize: (state) => ({ items: state.items }),
|
|
}
|
|
)
|
|
)
|
|
```
|
|
|
|
## Rules
|
|
1. Interface includes state and actions
|
|
2. Extract config to module constants
|
|
3. TSDoc on store
|
|
4. Only persist what's needed
|
|
5. Immutable updates only - never mutate
|
|
6. Use `set((state) => ...)` when depending on previous state
|
|
7. Provide clear/reset actions
|