@startsimpli/funnels 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.cjs +0 -2
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +0 -2
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.cjs +0 -1
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/store/index.cjs +0 -2
- package/dist/store/index.cjs.map +1 -1
- package/dist/store/index.js +0 -2
- package/dist/store/index.js.map +1 -1
- package/package.json +1 -1
package/dist/hooks/index.cjs
CHANGED
package/dist/hooks/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useDebouncedValue.ts"],"names":["useState","useEffect"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDebouncedValue.ts"],"names":["useState","useEffect"],"mappings":";;;;AAWO,SAAS,iBAAA,CAAqB,KAAA,EAAU,KAAA,GAAgB,GAAA,EAAQ;AACrE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAY,KAAK,CAAA;AAE7D,EAAAC,eAAA,CAAU,MAAM;AAEd,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,GAAG,KAAK,CAAA;AAGR,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT","file":"index.cjs","sourcesContent":["/**\n * useDebouncedValue Hook\n *\n * Returns a debounced version of the input value that only updates\n * after the specified delay has elapsed without changes.\n *\n * Use for expensive computations that shouldn't run on every keystroke.\n */\n\nimport { useEffect, useState } from 'react';\n\nexport function useDebouncedValue<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n // Set timeout to update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cleanup: cancel timeout if value changes before delay elapses\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"]}
|
package/dist/hooks/index.js
CHANGED
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useDebouncedValue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDebouncedValue.ts"],"names":[],"mappings":";;AAWO,SAAS,iBAAA,CAAqB,KAAA,EAAU,KAAA,GAAgB,GAAA,EAAQ;AACrE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAY,KAAK,CAAA;AAE7D,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IACzB,GAAG,KAAK,CAAA;AAGR,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,cAAA;AACT","file":"index.js","sourcesContent":["/**\n * useDebouncedValue Hook\n *\n * Returns a debounced version of the input value that only updates\n * after the specified delay has elapsed without changes.\n *\n * Use for expensive computations that shouldn't run on every keystroke.\n */\n\nimport { useEffect, useState } from 'react';\n\nexport function useDebouncedValue<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n // Set timeout to update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cleanup: cancel timeout if value changes before delay elapses\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"]}
|
package/dist/store/index.cjs
CHANGED
package/dist/store/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/store/types.ts","../../src/store/create-funnel-store.ts"],"names":["create"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Store types for @startsimpli/funnels\n *\n * Generic Zustand store for managing funnel state.\n * Works with any entity type - no product-specific logic.\n */\n\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\nimport type {\n FunnelListFilters,\n PaginatedResponse,\n} from '../api/client';\n\n/**\n * Store state interface\n *\n * Generic over entity type TEntity\n */\nexport interface FunnelStore<TEntity = any> {\n // ============================================================================\n // Data State\n // ============================================================================\n\n /** All loaded funnels */\n funnels: Funnel<TEntity>[];\n\n /** Currently selected funnel */\n selectedFunnel: Funnel<TEntity> | null;\n\n /** Currently selected stage (for editing) */\n selectedStage: FunnelStage<TEntity> | null;\n\n /** Funnel runs for selected funnel */\n runs: FunnelRun[];\n\n /** Pagination info */\n pagination: {\n count: number;\n next: string | null;\n previous: string | null;\n currentPage: number;\n pageSize: number;\n };\n\n // ============================================================================\n // UI State\n // ============================================================================\n\n /** Loading state */\n isLoading: boolean;\n\n /** Error state */\n error: Error | null;\n\n /** Dirty flag - unsaved changes */\n isDirty: boolean;\n\n /** Optimistic update rollback state */\n rollbackState: {\n funnels: Funnel<TEntity>[];\n selectedFunnel: Funnel<TEntity> | null;\n } | null;\n\n // ============================================================================\n // Funnel Actions\n // ============================================================================\n\n /**\n * Load funnels with optional filters\n *\n * @param filters - Optional filters (status, owner, pagination, etc)\n */\n loadFunnels: (filters?: FunnelListFilters) => Promise<void>;\n\n /**\n * Select funnel for editing\n *\n * @param id - Funnel ID\n */\n selectFunnel: (id: string | null) => void;\n\n /**\n * Create new funnel\n *\n * @param data - Funnel creation data\n * @returns Created funnel\n */\n createFunnel: (data: CreateFunnelInput<TEntity>) => Promise<Funnel<TEntity>>;\n\n /**\n * Update funnel (optimistic update)\n *\n * @param id - Funnel ID\n * @param data - Update data\n * @returns Updated funnel\n */\n updateFunnel: (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => Promise<Funnel<TEntity>>;\n\n /**\n * Delete funnel (optimistic update)\n *\n * @param id - Funnel ID\n */\n deleteFunnel: (id: string) => Promise<void>;\n\n /**\n * Duplicate funnel\n *\n * @param id - Funnel ID to duplicate\n * @returns New funnel\n */\n duplicateFunnel: (id: string) => Promise<Funnel<TEntity>>;\n\n // ============================================================================\n // Stage Actions\n // ============================================================================\n\n /**\n * Select stage for editing\n *\n * @param stageId - Stage ID (null to clear selection)\n */\n selectStage: (stageId: string | null) => void;\n\n /**\n * Create new stage in funnel\n *\n * @param funnelId - Funnel ID\n * @param data - Stage creation data\n * @returns Created stage\n */\n createStage: (\n funnelId: string,\n data: CreateStageInput<TEntity>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Update stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n * @param data - Update data\n * @returns Updated stage\n */\n updateStage: (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Delete stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n */\n deleteStage: (funnelId: string, stageId: string) => Promise<void>;\n\n /**\n * Reorder stages (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageIds - New order of stage IDs\n */\n reorderStages: (funnelId: string, stageIds: string[]) => Promise<void>;\n\n // ============================================================================\n // Run Actions\n // ============================================================================\n\n /**\n * Run funnel\n *\n * @param id - Funnel ID\n * @param options - Run options\n * @returns Created run\n */\n runFunnel: (\n id: string,\n options?: {\n trigger_type?: 'manual' | 'scheduled' | 'webhook' | 'api';\n metadata?: Record<string, any>;\n }\n ) => Promise<FunnelRun>;\n\n /**\n * Load funnel runs\n *\n * @param funnelId - Funnel ID\n * @param filters - Optional filters\n */\n loadRuns: (\n funnelId: string,\n filters?: {\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n page?: number;\n page_size?: number;\n }\n ) => Promise<void>;\n\n /**\n * Cancel running funnel\n *\n * @param runId - Run ID\n */\n cancelRun: (runId: string) => Promise<FunnelRun>;\n\n // ============================================================================\n // UI State Actions\n // ============================================================================\n\n /**\n * Set dirty flag\n *\n * @param dirty - Dirty state\n */\n setDirty: (dirty: boolean) => void;\n\n /**\n * Clear error\n */\n clearError: () => void;\n\n /**\n * Reset store to initial state\n */\n reset: () => void;\n\n // ============================================================================\n // Internal Actions (for optimistic updates)\n // ============================================================================\n\n /**\n * Save current state for rollback\n * @internal\n */\n _saveRollbackState: () => void;\n\n /**\n * Rollback to saved state\n * @internal\n */\n _rollback: () => void;\n\n /**\n * Clear rollback state\n * @internal\n */\n _clearRollback: () => void;\n}\n\n/**\n * Initial state factory\n */\nexport const createInitialState = <TEntity = any>(): Pick<\n FunnelStore<TEntity>,\n | 'funnels'\n | 'selectedFunnel'\n | 'selectedStage'\n | 'runs'\n | 'pagination'\n | 'isLoading'\n | 'error'\n | 'isDirty'\n | 'rollbackState'\n> => ({\n funnels: [],\n selectedFunnel: null,\n selectedStage: null,\n runs: [],\n pagination: {\n count: 0,\n next: null,\n previous: null,\n currentPage: 1,\n pageSize: 20,\n },\n isLoading: false,\n error: null,\n isDirty: false,\n rollbackState: null,\n});\n","/**\n * Funnel Store Factory\n *\n * Creates isolated Zustand store instances for funnel management.\n * Factory pattern allows multiple editors to coexist without state conflicts.\n *\n * Features:\n * - Optimistic updates with automatic rollback on error\n * - Dirty tracking for unsaved changes\n * - Loading states for better UX\n * - Error handling with automatic retry\n * - Selection state management\n *\n * @packageDocumentation\n */\n\nimport { create, StoreApi, UseBoundStore } from 'zustand';\nimport type { FunnelApiClient, FunnelListFilters } from '../api/client';\nimport type { FunnelStore } from './types';\nimport { createInitialState } from './types';\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\n/**\n * Create funnel store with API client\n *\n * Factory pattern - each call creates a new isolated store instance.\n * Perfect for multi-editor scenarios or testing.\n *\n * @param apiClient - API client for server operations\n * @returns Zustand store hook\n *\n * @example\n * ```ts\n * const adapter = new FetchAdapter({ headers: { 'Authorization': 'Bearer token' } });\n * const apiClient = new FunnelApiClient(adapter, 'https://api.example.com');\n * const useFunnelStore = createFunnelStore(apiClient);\n *\n * // In React component\n * function FunnelEditor() {\n * const { funnels, loadFunnels, createFunnel } = useFunnelStore();\n * // ...\n * }\n * ```\n */\nexport function createFunnelStore<TEntity = any>(\n apiClient: FunnelApiClient\n): UseBoundStore<StoreApi<FunnelStore<TEntity>>> {\n return create<FunnelStore<TEntity>>((set, get) => ({\n // Initialize state\n ...createInitialState<TEntity>(),\n\n // =========================================================================\n // Funnel Actions\n // =========================================================================\n\n loadFunnels: async (filters?: FunnelListFilters) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.listFunnels<TEntity>(filters);\n\n set({\n funnels: response.results,\n pagination: {\n count: response.count,\n next: response.next,\n previous: response.previous,\n currentPage: filters?.page || 1,\n pageSize: filters?.page_size || 20,\n },\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n selectFunnel: (id: string | null) => {\n const { funnels } = get();\n\n if (id === null) {\n set({ selectedFunnel: null, selectedStage: null });\n return;\n }\n\n const funnel = funnels.find((f) => f.id === id);\n set({\n selectedFunnel: funnel || null,\n selectedStage: null, // Clear stage selection when changing funnels\n });\n },\n\n createFunnel: async (data: CreateFunnelInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const funnel = await apiClient.createFunnel<TEntity>(data);\n\n set((state) => ({\n funnels: [...state.funnels, funnel],\n pagination: {\n ...state.pagination,\n count: state.pagination.count + 1,\n },\n isLoading: false,\n }));\n\n return funnel;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateFunnel: async (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === id ? ({ ...f, ...data } as Funnel<TEntity>) : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === id\n ? ({ ...state.selectedFunnel, ...data } as Funnel<TEntity>)\n : state.selectedFunnel,\n isDirty: false, // Clear dirty flag on save\n }));\n\n try {\n const updated = await apiClient.updateFunnel<TEntity>(id, data);\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) => (f.id === id ? updated : f)),\n selectedFunnel:\n state.selectedFunnel?.id === id ? updated : state.selectedFunnel,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteFunnel: async (id: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.filter((f) => f.id !== id),\n selectedFunnel: state.selectedFunnel?.id === id ? null : state.selectedFunnel,\n pagination: {\n ...state.pagination,\n count: state.pagination.count - 1,\n },\n }));\n\n try {\n await apiClient.deleteFunnel(id);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n duplicateFunnel: async (id: string) => {\n const { funnels } = get();\n const funnel = funnels.find((f) => f.id === id);\n\n if (!funnel) {\n throw new Error(`Funnel ${id} not found`);\n }\n\n // Create copy with new name\n const copy: CreateFunnelInput<TEntity> = {\n name: `${funnel.name} (Copy)`,\n description: funnel.description,\n status: 'draft', // Always create as draft\n input_type: funnel.input_type,\n stages: funnel.stages.map((stage, index) => ({\n ...stage,\n order: index, // Preserve order\n })),\n completion_tags: funnel.completion_tags,\n metadata: funnel.metadata,\n };\n\n return get().createFunnel(copy);\n },\n\n // =========================================================================\n // Stage Actions\n // =========================================================================\n\n selectStage: (stageId: string | null) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel) {\n set({ selectedStage: null });\n return;\n }\n\n if (stageId === null) {\n set({ selectedStage: null });\n return;\n }\n\n const stage = selectedFunnel.stages.find((s) => s.id === stageId);\n set({ selectedStage: stage || null });\n },\n\n createStage: async (funnelId: string, data: CreateStageInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const stage = await apiClient.createStage<TEntity>(funnelId, data);\n\n // Update funnel with new stage\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? { ...f, stages: [...f.stages, stage] }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? { ...state.selectedFunnel, stages: [...state.selectedFunnel.stages, stage] }\n : state.selectedFunnel,\n isLoading: false,\n }));\n\n return stage;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateStage: async (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId\n ? ({ ...state.selectedStage, ...data } as FunnelStage<TEntity>)\n : state.selectedStage,\n isDirty: false,\n }));\n\n try {\n const updated = await apiClient.updateStage<TEntity>(\n funnelId,\n stageId,\n data\n );\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) => (s.id === stageId ? updated : s)),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? updated : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId ? updated : state.selectedStage,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteStage: async (funnelId: string, stageId: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.filter((s) => s.id !== stageId),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.filter((s) => s.id !== stageId),\n }\n : state.selectedFunnel,\n selectedStage: state.selectedStage?.id === stageId ? null : state.selectedStage,\n }));\n\n try {\n await apiClient.deleteStage(funnelId, stageId);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n reorderStages: async (funnelId: string, stageIds: string[]) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel || selectedFunnel.id !== funnelId) {\n throw new Error('Funnel must be selected to reorder stages');\n }\n\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update - reorder stages\n const reorderedStages = stageIds\n .map((id, index) => {\n const stage = selectedFunnel.stages.find((s) => s.id === id);\n return stage ? { ...stage, order: index } : null;\n })\n .filter((s): s is FunnelStage<TEntity> => s !== null);\n\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId ? { ...f, stages: reorderedStages } : f\n ),\n selectedFunnel: { ...selectedFunnel, stages: reorderedStages },\n isDirty: false,\n }));\n\n try {\n // Update each stage with new order\n await Promise.all(\n reorderedStages.map((stage) =>\n apiClient.updateStage(funnelId, stage.id, { order: stage.order })\n )\n );\n\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n // =========================================================================\n // Run Actions\n // =========================================================================\n\n runFunnel: async (id: string, options?) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.runFunnel(id, options);\n\n // Add to runs list\n set((state) => ({\n runs: [run, ...state.runs],\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n loadRuns: async (funnelId: string, filters?) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.getFunnelRuns(funnelId, filters);\n\n set({\n runs: response.results,\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n cancelRun: async (runId: string) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.cancelFunnelRun(runId);\n\n // Update run in list\n set((state) => ({\n runs: state.runs.map((r) => (r.id === runId ? run : r)),\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n // =========================================================================\n // UI State Actions\n // =========================================================================\n\n setDirty: (dirty: boolean) => {\n set({ isDirty: dirty });\n },\n\n clearError: () => {\n set({ error: null });\n },\n\n reset: () => {\n set(createInitialState<TEntity>());\n },\n\n // =========================================================================\n // Internal Actions (Optimistic Updates)\n // =========================================================================\n\n _saveRollbackState: () => {\n const { funnels, selectedFunnel } = get();\n set({\n rollbackState: {\n funnels: JSON.parse(JSON.stringify(funnels)) as Funnel<TEntity>[],\n selectedFunnel: selectedFunnel\n ? (JSON.parse(JSON.stringify(selectedFunnel)) as Funnel<TEntity>)\n : null,\n },\n });\n },\n\n _rollback: () => {\n const { rollbackState } = get();\n if (rollbackState) {\n set({\n funnels: rollbackState.funnels,\n selectedFunnel: rollbackState.selectedFunnel,\n rollbackState: null,\n });\n }\n },\n\n _clearRollback: () => {\n set({ rollbackState: null });\n },\n }));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/store/types.ts","../../src/store/create-funnel-store.ts"],"names":["create"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Store types for @startsimpli/funnels\n *\n * Generic Zustand store for managing funnel state.\n * Works with any entity type - no product-specific logic.\n */\n\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\nimport type {\n FunnelListFilters,\n PaginatedResponse,\n} from '../api/client';\n\n/**\n * Store state interface\n *\n * Generic over entity type TEntity\n */\nexport interface FunnelStore<TEntity = any> {\n // ============================================================================\n // Data State\n // ============================================================================\n\n /** All loaded funnels */\n funnels: Funnel<TEntity>[];\n\n /** Currently selected funnel */\n selectedFunnel: Funnel<TEntity> | null;\n\n /** Currently selected stage (for editing) */\n selectedStage: FunnelStage<TEntity> | null;\n\n /** Funnel runs for selected funnel */\n runs: FunnelRun[];\n\n /** Pagination info */\n pagination: {\n count: number;\n next: string | null;\n previous: string | null;\n currentPage: number;\n pageSize: number;\n };\n\n // ============================================================================\n // UI State\n // ============================================================================\n\n /** Loading state */\n isLoading: boolean;\n\n /** Error state */\n error: Error | null;\n\n /** Dirty flag - unsaved changes */\n isDirty: boolean;\n\n /** Optimistic update rollback state */\n rollbackState: {\n funnels: Funnel<TEntity>[];\n selectedFunnel: Funnel<TEntity> | null;\n } | null;\n\n // ============================================================================\n // Funnel Actions\n // ============================================================================\n\n /**\n * Load funnels with optional filters\n *\n * @param filters - Optional filters (status, owner, pagination, etc)\n */\n loadFunnels: (filters?: FunnelListFilters) => Promise<void>;\n\n /**\n * Select funnel for editing\n *\n * @param id - Funnel ID\n */\n selectFunnel: (id: string | null) => void;\n\n /**\n * Create new funnel\n *\n * @param data - Funnel creation data\n * @returns Created funnel\n */\n createFunnel: (data: CreateFunnelInput<TEntity>) => Promise<Funnel<TEntity>>;\n\n /**\n * Update funnel (optimistic update)\n *\n * @param id - Funnel ID\n * @param data - Update data\n * @returns Updated funnel\n */\n updateFunnel: (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => Promise<Funnel<TEntity>>;\n\n /**\n * Delete funnel (optimistic update)\n *\n * @param id - Funnel ID\n */\n deleteFunnel: (id: string) => Promise<void>;\n\n /**\n * Duplicate funnel\n *\n * @param id - Funnel ID to duplicate\n * @returns New funnel\n */\n duplicateFunnel: (id: string) => Promise<Funnel<TEntity>>;\n\n // ============================================================================\n // Stage Actions\n // ============================================================================\n\n /**\n * Select stage for editing\n *\n * @param stageId - Stage ID (null to clear selection)\n */\n selectStage: (stageId: string | null) => void;\n\n /**\n * Create new stage in funnel\n *\n * @param funnelId - Funnel ID\n * @param data - Stage creation data\n * @returns Created stage\n */\n createStage: (\n funnelId: string,\n data: CreateStageInput<TEntity>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Update stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n * @param data - Update data\n * @returns Updated stage\n */\n updateStage: (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Delete stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n */\n deleteStage: (funnelId: string, stageId: string) => Promise<void>;\n\n /**\n * Reorder stages (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageIds - New order of stage IDs\n */\n reorderStages: (funnelId: string, stageIds: string[]) => Promise<void>;\n\n // ============================================================================\n // Run Actions\n // ============================================================================\n\n /**\n * Run funnel\n *\n * @param id - Funnel ID\n * @param options - Run options\n * @returns Created run\n */\n runFunnel: (\n id: string,\n options?: {\n trigger_type?: 'manual' | 'scheduled' | 'webhook' | 'api';\n metadata?: Record<string, any>;\n }\n ) => Promise<FunnelRun>;\n\n /**\n * Load funnel runs\n *\n * @param funnelId - Funnel ID\n * @param filters - Optional filters\n */\n loadRuns: (\n funnelId: string,\n filters?: {\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n page?: number;\n page_size?: number;\n }\n ) => Promise<void>;\n\n /**\n * Cancel running funnel\n *\n * @param runId - Run ID\n */\n cancelRun: (runId: string) => Promise<FunnelRun>;\n\n // ============================================================================\n // UI State Actions\n // ============================================================================\n\n /**\n * Set dirty flag\n *\n * @param dirty - Dirty state\n */\n setDirty: (dirty: boolean) => void;\n\n /**\n * Clear error\n */\n clearError: () => void;\n\n /**\n * Reset store to initial state\n */\n reset: () => void;\n\n // ============================================================================\n // Internal Actions (for optimistic updates)\n // ============================================================================\n\n /**\n * Save current state for rollback\n * @internal\n */\n _saveRollbackState: () => void;\n\n /**\n * Rollback to saved state\n * @internal\n */\n _rollback: () => void;\n\n /**\n * Clear rollback state\n * @internal\n */\n _clearRollback: () => void;\n}\n\n/**\n * Initial state factory\n */\nexport const createInitialState = <TEntity = any>(): Pick<\n FunnelStore<TEntity>,\n | 'funnels'\n | 'selectedFunnel'\n | 'selectedStage'\n | 'runs'\n | 'pagination'\n | 'isLoading'\n | 'error'\n | 'isDirty'\n | 'rollbackState'\n> => ({\n funnels: [],\n selectedFunnel: null,\n selectedStage: null,\n runs: [],\n pagination: {\n count: 0,\n next: null,\n previous: null,\n currentPage: 1,\n pageSize: 20,\n },\n isLoading: false,\n error: null,\n isDirty: false,\n rollbackState: null,\n});\n","/**\n * Funnel Store Factory\n *\n * Creates isolated Zustand store instances for funnel management.\n * Factory pattern allows multiple editors to coexist without state conflicts.\n *\n * Features:\n * - Optimistic updates with automatic rollback on error\n * - Dirty tracking for unsaved changes\n * - Loading states for better UX\n * - Error handling with automatic retry\n * - Selection state management\n *\n * @packageDocumentation\n */\n\nimport { create, StoreApi, UseBoundStore } from 'zustand';\nimport type { FunnelApiClient, FunnelListFilters } from '../api/client';\nimport type { FunnelStore } from './types';\nimport { createInitialState } from './types';\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\n/**\n * Create funnel store with API client\n *\n * Factory pattern - each call creates a new isolated store instance.\n * Perfect for multi-editor scenarios or testing.\n *\n * @param apiClient - API client for server operations\n * @returns Zustand store hook\n *\n * @example\n * ```ts\n * const adapter = new FetchAdapter({ headers: { 'Authorization': 'Bearer token' } });\n * const apiClient = new FunnelApiClient(adapter, 'https://api.example.com');\n * const useFunnelStore = createFunnelStore(apiClient);\n *\n * // In React component\n * function FunnelEditor() {\n * const { funnels, loadFunnels, createFunnel } = useFunnelStore();\n * // ...\n * }\n * ```\n */\nexport function createFunnelStore<TEntity = any>(\n apiClient: FunnelApiClient\n): UseBoundStore<StoreApi<FunnelStore<TEntity>>> {\n return create<FunnelStore<TEntity>>((set, get) => ({\n // Initialize state\n ...createInitialState<TEntity>(),\n\n // =========================================================================\n // Funnel Actions\n // =========================================================================\n\n loadFunnels: async (filters?: FunnelListFilters) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.listFunnels<TEntity>(filters);\n\n set({\n funnels: response.results,\n pagination: {\n count: response.count,\n next: response.next,\n previous: response.previous,\n currentPage: filters?.page || 1,\n pageSize: filters?.page_size || 20,\n },\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n selectFunnel: (id: string | null) => {\n const { funnels } = get();\n\n if (id === null) {\n set({ selectedFunnel: null, selectedStage: null });\n return;\n }\n\n const funnel = funnels.find((f) => f.id === id);\n set({\n selectedFunnel: funnel || null,\n selectedStage: null, // Clear stage selection when changing funnels\n });\n },\n\n createFunnel: async (data: CreateFunnelInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const funnel = await apiClient.createFunnel<TEntity>(data);\n\n set((state) => ({\n funnels: [...state.funnels, funnel],\n pagination: {\n ...state.pagination,\n count: state.pagination.count + 1,\n },\n isLoading: false,\n }));\n\n return funnel;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateFunnel: async (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === id ? ({ ...f, ...data } as Funnel<TEntity>) : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === id\n ? ({ ...state.selectedFunnel, ...data } as Funnel<TEntity>)\n : state.selectedFunnel,\n isDirty: false, // Clear dirty flag on save\n }));\n\n try {\n const updated = await apiClient.updateFunnel<TEntity>(id, data);\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) => (f.id === id ? updated : f)),\n selectedFunnel:\n state.selectedFunnel?.id === id ? updated : state.selectedFunnel,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteFunnel: async (id: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.filter((f) => f.id !== id),\n selectedFunnel: state.selectedFunnel?.id === id ? null : state.selectedFunnel,\n pagination: {\n ...state.pagination,\n count: state.pagination.count - 1,\n },\n }));\n\n try {\n await apiClient.deleteFunnel(id);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n duplicateFunnel: async (id: string) => {\n const { funnels } = get();\n const funnel = funnels.find((f) => f.id === id);\n\n if (!funnel) {\n throw new Error(`Funnel ${id} not found`);\n }\n\n // Create copy with new name\n const copy: CreateFunnelInput<TEntity> = {\n name: `${funnel.name} (Copy)`,\n description: funnel.description,\n status: 'draft', // Always create as draft\n input_type: funnel.input_type,\n stages: funnel.stages.map((stage, index) => ({\n ...stage,\n order: index, // Preserve order\n })),\n completion_tags: funnel.completion_tags,\n metadata: funnel.metadata,\n };\n\n return get().createFunnel(copy);\n },\n\n // =========================================================================\n // Stage Actions\n // =========================================================================\n\n selectStage: (stageId: string | null) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel) {\n set({ selectedStage: null });\n return;\n }\n\n if (stageId === null) {\n set({ selectedStage: null });\n return;\n }\n\n const stage = selectedFunnel.stages.find((s) => s.id === stageId);\n set({ selectedStage: stage || null });\n },\n\n createStage: async (funnelId: string, data: CreateStageInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const stage = await apiClient.createStage<TEntity>(funnelId, data);\n\n // Update funnel with new stage\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? { ...f, stages: [...f.stages, stage] }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? { ...state.selectedFunnel, stages: [...state.selectedFunnel.stages, stage] }\n : state.selectedFunnel,\n isLoading: false,\n }));\n\n return stage;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateStage: async (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId\n ? ({ ...state.selectedStage, ...data } as FunnelStage<TEntity>)\n : state.selectedStage,\n isDirty: false,\n }));\n\n try {\n const updated = await apiClient.updateStage<TEntity>(\n funnelId,\n stageId,\n data\n );\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) => (s.id === stageId ? updated : s)),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? updated : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId ? updated : state.selectedStage,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteStage: async (funnelId: string, stageId: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.filter((s) => s.id !== stageId),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.filter((s) => s.id !== stageId),\n }\n : state.selectedFunnel,\n selectedStage: state.selectedStage?.id === stageId ? null : state.selectedStage,\n }));\n\n try {\n await apiClient.deleteStage(funnelId, stageId);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n reorderStages: async (funnelId: string, stageIds: string[]) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel || selectedFunnel.id !== funnelId) {\n throw new Error('Funnel must be selected to reorder stages');\n }\n\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update - reorder stages\n const reorderedStages = stageIds\n .map((id, index) => {\n const stage = selectedFunnel.stages.find((s) => s.id === id);\n return stage ? { ...stage, order: index } : null;\n })\n .filter((s): s is FunnelStage<TEntity> => s !== null);\n\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId ? { ...f, stages: reorderedStages } : f\n ),\n selectedFunnel: { ...selectedFunnel, stages: reorderedStages },\n isDirty: false,\n }));\n\n try {\n // Update each stage with new order\n await Promise.all(\n reorderedStages.map((stage) =>\n apiClient.updateStage(funnelId, stage.id, { order: stage.order })\n )\n );\n\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n // =========================================================================\n // Run Actions\n // =========================================================================\n\n runFunnel: async (id: string, options?) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.runFunnel(id, options);\n\n // Add to runs list\n set((state) => ({\n runs: [run, ...state.runs],\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n loadRuns: async (funnelId: string, filters?) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.getFunnelRuns(funnelId, filters);\n\n set({\n runs: response.results,\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n cancelRun: async (runId: string) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.cancelFunnelRun(runId);\n\n // Update run in list\n set((state) => ({\n runs: state.runs.map((r) => (r.id === runId ? run : r)),\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n // =========================================================================\n // UI State Actions\n // =========================================================================\n\n setDirty: (dirty: boolean) => {\n set({ isDirty: dirty });\n },\n\n clearError: () => {\n set({ error: null });\n },\n\n reset: () => {\n set(createInitialState<TEntity>());\n },\n\n // =========================================================================\n // Internal Actions (Optimistic Updates)\n // =========================================================================\n\n _saveRollbackState: () => {\n const { funnels, selectedFunnel } = get();\n set({\n rollbackState: {\n funnels: JSON.parse(JSON.stringify(funnels)) as Funnel<TEntity>[],\n selectedFunnel: selectedFunnel\n ? (JSON.parse(JSON.stringify(selectedFunnel)) as Funnel<TEntity>)\n : null,\n },\n });\n },\n\n _rollback: () => {\n const { rollbackState } = get();\n if (rollbackState) {\n set({\n funnels: rollbackState.funnels,\n selectedFunnel: rollbackState.selectedFunnel,\n rollbackState: null,\n });\n }\n },\n\n _clearRollback: () => {\n set({ rollbackState: null });\n },\n }));\n}\n"]}
|
package/dist/store/index.js
CHANGED
package/dist/store/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/store/types.ts","../../src/store/create-funnel-store.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Store types for @startsimpli/funnels\n *\n * Generic Zustand store for managing funnel state.\n * Works with any entity type - no product-specific logic.\n */\n\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\nimport type {\n FunnelListFilters,\n PaginatedResponse,\n} from '../api/client';\n\n/**\n * Store state interface\n *\n * Generic over entity type TEntity\n */\nexport interface FunnelStore<TEntity = any> {\n // ============================================================================\n // Data State\n // ============================================================================\n\n /** All loaded funnels */\n funnels: Funnel<TEntity>[];\n\n /** Currently selected funnel */\n selectedFunnel: Funnel<TEntity> | null;\n\n /** Currently selected stage (for editing) */\n selectedStage: FunnelStage<TEntity> | null;\n\n /** Funnel runs for selected funnel */\n runs: FunnelRun[];\n\n /** Pagination info */\n pagination: {\n count: number;\n next: string | null;\n previous: string | null;\n currentPage: number;\n pageSize: number;\n };\n\n // ============================================================================\n // UI State\n // ============================================================================\n\n /** Loading state */\n isLoading: boolean;\n\n /** Error state */\n error: Error | null;\n\n /** Dirty flag - unsaved changes */\n isDirty: boolean;\n\n /** Optimistic update rollback state */\n rollbackState: {\n funnels: Funnel<TEntity>[];\n selectedFunnel: Funnel<TEntity> | null;\n } | null;\n\n // ============================================================================\n // Funnel Actions\n // ============================================================================\n\n /**\n * Load funnels with optional filters\n *\n * @param filters - Optional filters (status, owner, pagination, etc)\n */\n loadFunnels: (filters?: FunnelListFilters) => Promise<void>;\n\n /**\n * Select funnel for editing\n *\n * @param id - Funnel ID\n */\n selectFunnel: (id: string | null) => void;\n\n /**\n * Create new funnel\n *\n * @param data - Funnel creation data\n * @returns Created funnel\n */\n createFunnel: (data: CreateFunnelInput<TEntity>) => Promise<Funnel<TEntity>>;\n\n /**\n * Update funnel (optimistic update)\n *\n * @param id - Funnel ID\n * @param data - Update data\n * @returns Updated funnel\n */\n updateFunnel: (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => Promise<Funnel<TEntity>>;\n\n /**\n * Delete funnel (optimistic update)\n *\n * @param id - Funnel ID\n */\n deleteFunnel: (id: string) => Promise<void>;\n\n /**\n * Duplicate funnel\n *\n * @param id - Funnel ID to duplicate\n * @returns New funnel\n */\n duplicateFunnel: (id: string) => Promise<Funnel<TEntity>>;\n\n // ============================================================================\n // Stage Actions\n // ============================================================================\n\n /**\n * Select stage for editing\n *\n * @param stageId - Stage ID (null to clear selection)\n */\n selectStage: (stageId: string | null) => void;\n\n /**\n * Create new stage in funnel\n *\n * @param funnelId - Funnel ID\n * @param data - Stage creation data\n * @returns Created stage\n */\n createStage: (\n funnelId: string,\n data: CreateStageInput<TEntity>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Update stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n * @param data - Update data\n * @returns Updated stage\n */\n updateStage: (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Delete stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n */\n deleteStage: (funnelId: string, stageId: string) => Promise<void>;\n\n /**\n * Reorder stages (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageIds - New order of stage IDs\n */\n reorderStages: (funnelId: string, stageIds: string[]) => Promise<void>;\n\n // ============================================================================\n // Run Actions\n // ============================================================================\n\n /**\n * Run funnel\n *\n * @param id - Funnel ID\n * @param options - Run options\n * @returns Created run\n */\n runFunnel: (\n id: string,\n options?: {\n trigger_type?: 'manual' | 'scheduled' | 'webhook' | 'api';\n metadata?: Record<string, any>;\n }\n ) => Promise<FunnelRun>;\n\n /**\n * Load funnel runs\n *\n * @param funnelId - Funnel ID\n * @param filters - Optional filters\n */\n loadRuns: (\n funnelId: string,\n filters?: {\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n page?: number;\n page_size?: number;\n }\n ) => Promise<void>;\n\n /**\n * Cancel running funnel\n *\n * @param runId - Run ID\n */\n cancelRun: (runId: string) => Promise<FunnelRun>;\n\n // ============================================================================\n // UI State Actions\n // ============================================================================\n\n /**\n * Set dirty flag\n *\n * @param dirty - Dirty state\n */\n setDirty: (dirty: boolean) => void;\n\n /**\n * Clear error\n */\n clearError: () => void;\n\n /**\n * Reset store to initial state\n */\n reset: () => void;\n\n // ============================================================================\n // Internal Actions (for optimistic updates)\n // ============================================================================\n\n /**\n * Save current state for rollback\n * @internal\n */\n _saveRollbackState: () => void;\n\n /**\n * Rollback to saved state\n * @internal\n */\n _rollback: () => void;\n\n /**\n * Clear rollback state\n * @internal\n */\n _clearRollback: () => void;\n}\n\n/**\n * Initial state factory\n */\nexport const createInitialState = <TEntity = any>(): Pick<\n FunnelStore<TEntity>,\n | 'funnels'\n | 'selectedFunnel'\n | 'selectedStage'\n | 'runs'\n | 'pagination'\n | 'isLoading'\n | 'error'\n | 'isDirty'\n | 'rollbackState'\n> => ({\n funnels: [],\n selectedFunnel: null,\n selectedStage: null,\n runs: [],\n pagination: {\n count: 0,\n next: null,\n previous: null,\n currentPage: 1,\n pageSize: 20,\n },\n isLoading: false,\n error: null,\n isDirty: false,\n rollbackState: null,\n});\n","/**\n * Funnel Store Factory\n *\n * Creates isolated Zustand store instances for funnel management.\n * Factory pattern allows multiple editors to coexist without state conflicts.\n *\n * Features:\n * - Optimistic updates with automatic rollback on error\n * - Dirty tracking for unsaved changes\n * - Loading states for better UX\n * - Error handling with automatic retry\n * - Selection state management\n *\n * @packageDocumentation\n */\n\nimport { create, StoreApi, UseBoundStore } from 'zustand';\nimport type { FunnelApiClient, FunnelListFilters } from '../api/client';\nimport type { FunnelStore } from './types';\nimport { createInitialState } from './types';\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\n/**\n * Create funnel store with API client\n *\n * Factory pattern - each call creates a new isolated store instance.\n * Perfect for multi-editor scenarios or testing.\n *\n * @param apiClient - API client for server operations\n * @returns Zustand store hook\n *\n * @example\n * ```ts\n * const adapter = new FetchAdapter({ headers: { 'Authorization': 'Bearer token' } });\n * const apiClient = new FunnelApiClient(adapter, 'https://api.example.com');\n * const useFunnelStore = createFunnelStore(apiClient);\n *\n * // In React component\n * function FunnelEditor() {\n * const { funnels, loadFunnels, createFunnel } = useFunnelStore();\n * // ...\n * }\n * ```\n */\nexport function createFunnelStore<TEntity = any>(\n apiClient: FunnelApiClient\n): UseBoundStore<StoreApi<FunnelStore<TEntity>>> {\n return create<FunnelStore<TEntity>>((set, get) => ({\n // Initialize state\n ...createInitialState<TEntity>(),\n\n // =========================================================================\n // Funnel Actions\n // =========================================================================\n\n loadFunnels: async (filters?: FunnelListFilters) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.listFunnels<TEntity>(filters);\n\n set({\n funnels: response.results,\n pagination: {\n count: response.count,\n next: response.next,\n previous: response.previous,\n currentPage: filters?.page || 1,\n pageSize: filters?.page_size || 20,\n },\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n selectFunnel: (id: string | null) => {\n const { funnels } = get();\n\n if (id === null) {\n set({ selectedFunnel: null, selectedStage: null });\n return;\n }\n\n const funnel = funnels.find((f) => f.id === id);\n set({\n selectedFunnel: funnel || null,\n selectedStage: null, // Clear stage selection when changing funnels\n });\n },\n\n createFunnel: async (data: CreateFunnelInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const funnel = await apiClient.createFunnel<TEntity>(data);\n\n set((state) => ({\n funnels: [...state.funnels, funnel],\n pagination: {\n ...state.pagination,\n count: state.pagination.count + 1,\n },\n isLoading: false,\n }));\n\n return funnel;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateFunnel: async (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === id ? ({ ...f, ...data } as Funnel<TEntity>) : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === id\n ? ({ ...state.selectedFunnel, ...data } as Funnel<TEntity>)\n : state.selectedFunnel,\n isDirty: false, // Clear dirty flag on save\n }));\n\n try {\n const updated = await apiClient.updateFunnel<TEntity>(id, data);\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) => (f.id === id ? updated : f)),\n selectedFunnel:\n state.selectedFunnel?.id === id ? updated : state.selectedFunnel,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteFunnel: async (id: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.filter((f) => f.id !== id),\n selectedFunnel: state.selectedFunnel?.id === id ? null : state.selectedFunnel,\n pagination: {\n ...state.pagination,\n count: state.pagination.count - 1,\n },\n }));\n\n try {\n await apiClient.deleteFunnel(id);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n duplicateFunnel: async (id: string) => {\n const { funnels } = get();\n const funnel = funnels.find((f) => f.id === id);\n\n if (!funnel) {\n throw new Error(`Funnel ${id} not found`);\n }\n\n // Create copy with new name\n const copy: CreateFunnelInput<TEntity> = {\n name: `${funnel.name} (Copy)`,\n description: funnel.description,\n status: 'draft', // Always create as draft\n input_type: funnel.input_type,\n stages: funnel.stages.map((stage, index) => ({\n ...stage,\n order: index, // Preserve order\n })),\n completion_tags: funnel.completion_tags,\n metadata: funnel.metadata,\n };\n\n return get().createFunnel(copy);\n },\n\n // =========================================================================\n // Stage Actions\n // =========================================================================\n\n selectStage: (stageId: string | null) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel) {\n set({ selectedStage: null });\n return;\n }\n\n if (stageId === null) {\n set({ selectedStage: null });\n return;\n }\n\n const stage = selectedFunnel.stages.find((s) => s.id === stageId);\n set({ selectedStage: stage || null });\n },\n\n createStage: async (funnelId: string, data: CreateStageInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const stage = await apiClient.createStage<TEntity>(funnelId, data);\n\n // Update funnel with new stage\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? { ...f, stages: [...f.stages, stage] }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? { ...state.selectedFunnel, stages: [...state.selectedFunnel.stages, stage] }\n : state.selectedFunnel,\n isLoading: false,\n }));\n\n return stage;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateStage: async (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId\n ? ({ ...state.selectedStage, ...data } as FunnelStage<TEntity>)\n : state.selectedStage,\n isDirty: false,\n }));\n\n try {\n const updated = await apiClient.updateStage<TEntity>(\n funnelId,\n stageId,\n data\n );\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) => (s.id === stageId ? updated : s)),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? updated : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId ? updated : state.selectedStage,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteStage: async (funnelId: string, stageId: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.filter((s) => s.id !== stageId),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.filter((s) => s.id !== stageId),\n }\n : state.selectedFunnel,\n selectedStage: state.selectedStage?.id === stageId ? null : state.selectedStage,\n }));\n\n try {\n await apiClient.deleteStage(funnelId, stageId);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n reorderStages: async (funnelId: string, stageIds: string[]) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel || selectedFunnel.id !== funnelId) {\n throw new Error('Funnel must be selected to reorder stages');\n }\n\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update - reorder stages\n const reorderedStages = stageIds\n .map((id, index) => {\n const stage = selectedFunnel.stages.find((s) => s.id === id);\n return stage ? { ...stage, order: index } : null;\n })\n .filter((s): s is FunnelStage<TEntity> => s !== null);\n\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId ? { ...f, stages: reorderedStages } : f\n ),\n selectedFunnel: { ...selectedFunnel, stages: reorderedStages },\n isDirty: false,\n }));\n\n try {\n // Update each stage with new order\n await Promise.all(\n reorderedStages.map((stage) =>\n apiClient.updateStage(funnelId, stage.id, { order: stage.order })\n )\n );\n\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n // =========================================================================\n // Run Actions\n // =========================================================================\n\n runFunnel: async (id: string, options?) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.runFunnel(id, options);\n\n // Add to runs list\n set((state) => ({\n runs: [run, ...state.runs],\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n loadRuns: async (funnelId: string, filters?) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.getFunnelRuns(funnelId, filters);\n\n set({\n runs: response.results,\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n cancelRun: async (runId: string) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.cancelFunnelRun(runId);\n\n // Update run in list\n set((state) => ({\n runs: state.runs.map((r) => (r.id === runId ? run : r)),\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n // =========================================================================\n // UI State Actions\n // =========================================================================\n\n setDirty: (dirty: boolean) => {\n set({ isDirty: dirty });\n },\n\n clearError: () => {\n set({ error: null });\n },\n\n reset: () => {\n set(createInitialState<TEntity>());\n },\n\n // =========================================================================\n // Internal Actions (Optimistic Updates)\n // =========================================================================\n\n _saveRollbackState: () => {\n const { funnels, selectedFunnel } = get();\n set({\n rollbackState: {\n funnels: JSON.parse(JSON.stringify(funnels)) as Funnel<TEntity>[],\n selectedFunnel: selectedFunnel\n ? (JSON.parse(JSON.stringify(selectedFunnel)) as Funnel<TEntity>)\n : null,\n },\n });\n },\n\n _rollback: () => {\n const { rollbackState } = get();\n if (rollbackState) {\n set({\n funnels: rollbackState.funnels,\n selectedFunnel: rollbackState.selectedFunnel,\n rollbackState: null,\n });\n }\n },\n\n _clearRollback: () => {\n set({ rollbackState: null });\n },\n }));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/store/types.ts","../../src/store/create-funnel-store.ts"],"names":[],"mappings":";;;AA0QO,IAAM,qBAAqB,OAW5B;AAAA,EACJ,SAAS,EAAC;AAAA,EACV,cAAA,EAAgB,IAAA;AAAA,EAChB,aAAA,EAAe,IAAA;AAAA,EACf,MAAM,EAAC;AAAA,EACP,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,CAAA;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,WAAA,EAAa,CAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,SAAA,EAAW,KAAA;AAAA,EACX,KAAA,EAAO,IAAA;AAAA,EACP,OAAA,EAAS,KAAA;AAAA,EACT,aAAA,EAAe;AACjB,CAAA;;;ACjPO,SAAS,kBACd,SAAA,EAC+C;AAC/C,EAAA,OAAO,MAAA,CAA6B,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA;AAAA,IAEjD,GAAG,kBAAA,EAA4B;AAAA;AAAA;AAAA;AAAA,IAM/B,WAAA,EAAa,OAAO,OAAA,KAAgC;AAClD,MAAA,GAAA,CAAI,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,WAAA,CAAqB,OAAO,CAAA;AAE7D,QAAA,GAAA,CAAI;AAAA,UACF,SAAS,QAAA,CAAS,OAAA;AAAA,UAClB,UAAA,EAAY;AAAA,YACV,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,MAAM,QAAA,CAAS,IAAA;AAAA,YACf,UAAU,QAAA,CAAS,QAAA;AAAA,YACnB,WAAA,EAAa,SAAS,IAAA,IAAQ,CAAA;AAAA,YAC9B,QAAA,EAAU,SAAS,SAAA,IAAa;AAAA,WAClC;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI;AAAA,UACF,KAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,EAAA,KAAsB;AACnC,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,GAAA,EAAI;AAExB,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,GAAA,CAAI,EAAE,cAAA,EAAgB,IAAA,EAAM,aAAA,EAAe,MAAM,CAAA;AACjD,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC9C,MAAA,GAAA,CAAI;AAAA,QACF,gBAAgB,MAAA,IAAU,IAAA;AAAA,QAC1B,aAAA,EAAe;AAAA;AAAA,OAChB,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,YAAA,EAAc,OAAO,IAAA,KAAqC;AACxD,MAAA,GAAA,CAAI,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,YAAA,CAAsB,IAAI,CAAA;AAEzD,QAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UACd,OAAA,EAAS,CAAC,GAAG,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,UAClC,UAAA,EAAY;AAAA,YACV,GAAG,KAAA,CAAM,UAAA;AAAA,YACT,KAAA,EAAO,KAAA,CAAM,UAAA,CAAW,KAAA,GAAQ;AAAA,WAClC;AAAA,UACA,SAAA,EAAW;AAAA,SACb,CAAE,CAAA;AAEF,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI;AAAA,UACF,KAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,YAAA,EAAc,OACZ,EAAA,EACA,IAAA,KACG;AAEH,MAAA,GAAA,GAAM,kBAAA,EAAmB;AAGzB,MAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACd,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,UAAI,CAAC,CAAA,KAC1B,CAAA,CAAE,EAAA,KAAO,EAAA,GAAM,EAAE,GAAG,CAAA,EAAG,GAAG,IAAA,EAAK,GAAwB;AAAA,SACzD;AAAA,QACA,cAAA,EACE,KAAA,CAAM,cAAA,EAAgB,EAAA,KAAO,EAAA,GACxB,EAAE,GAAG,KAAA,CAAM,cAAA,EAAgB,GAAG,IAAA,EAAK,GACpC,KAAA,CAAM,cAAA;AAAA,QACZ,OAAA,EAAS;AAAA;AAAA,OACX,CAAE,CAAA;AAEF,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,YAAA,CAAsB,IAAI,IAAI,CAAA;AAG9D,QAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UACd,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAO,CAAA,CAAE,EAAA,KAAO,EAAA,GAAK,OAAA,GAAU,CAAE,CAAA;AAAA,UAC7D,gBACE,KAAA,CAAM,cAAA,EAAgB,EAAA,KAAO,EAAA,GAAK,UAAU,KAAA,CAAM;AAAA,SACtD,CAAE,CAAA;AAEF,QAAA,GAAA,GAAM,cAAA,EAAe;AACrB,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,KAAA,EAAO;AAEd,QAAA,GAAA,GAAM,SAAA,EAAU;AAChB,QAAA,GAAA,CAAI,EAAE,OAAuB,CAAA;AAC7B,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,YAAA,EAAc,OAAO,EAAA,KAAe;AAElC,MAAA,GAAA,GAAM,kBAAA,EAAmB;AAGzB,MAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACd,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,QAChD,gBAAgB,KAAA,CAAM,cAAA,EAAgB,EAAA,KAAO,EAAA,GAAK,OAAO,KAAA,CAAM,cAAA;AAAA,QAC/D,UAAA,EAAY;AAAA,UACV,GAAG,KAAA,CAAM,UAAA;AAAA,UACT,KAAA,EAAO,KAAA,CAAM,UAAA,CAAW,KAAA,GAAQ;AAAA;AAClC,OACF,CAAE,CAAA;AAEF,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,aAAa,EAAE,CAAA;AAC/B,QAAA,GAAA,GAAM,cAAA,EAAe;AAAA,MACvB,SAAS,KAAA,EAAO;AAEd,QAAA,GAAA,GAAM,SAAA,EAAU;AAChB,QAAA,GAAA,CAAI,EAAE,OAAuB,CAAA;AAC7B,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,eAAA,EAAiB,OAAO,EAAA,KAAe;AACrC,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,GAAA,EAAI;AACxB,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAE9C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,UAAA,CAAY,CAAA;AAAA,MAC1C;AAGA,MAAA,MAAM,IAAA,GAAmC;AAAA,QACvC,IAAA,EAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,OAAA,CAAA;AAAA,QACpB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,MAAA,EAAQ,OAAA;AAAA;AAAA,QACR,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,QAAQ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,KAAA,MAAW;AAAA,UAC3C,GAAG,KAAA;AAAA,UACH,KAAA,EAAO;AAAA;AAAA,SACT,CAAE,CAAA;AAAA,QACF,iBAAiB,MAAA,CAAO,eAAA;AAAA,QACxB,UAAU,MAAA,CAAO;AAAA,OACnB;AAEA,MAAA,OAAO,GAAA,EAAI,CAAE,YAAA,CAAa,IAAI,CAAA;AAAA,IAChC,CAAA;AAAA;AAAA;AAAA;AAAA,IAMA,WAAA,EAAa,CAAC,OAAA,KAA2B;AACvC,MAAA,MAAM,EAAE,cAAA,EAAe,GAAI,GAAA,EAAI;AAE/B,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,GAAA,CAAI,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAC3B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,GAAA,CAAI,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAC3B,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,eAAe,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAChE,MAAA,GAAA,CAAI,EAAE,aAAA,EAAe,KAAA,IAAS,IAAA,EAAM,CAAA;AAAA,IACtC,CAAA;AAAA,IAEA,WAAA,EAAa,OAAO,QAAA,EAAkB,IAAA,KAAoC;AACxE,MAAA,GAAA,CAAI,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,WAAA,CAAqB,UAAU,IAAI,CAAA;AAGjE,QAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UACd,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,YAAI,CAAC,CAAA,KAC1B,CAAA,CAAE,EAAA,KAAO,WACL,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,CAAC,GAAG,CAAA,CAAE,MAAA,EAAQ,KAAK,GAAE,GACrC;AAAA,WACN;AAAA,UACA,gBACE,KAAA,CAAM,cAAA,EAAgB,OAAO,QAAA,GACzB,EAAE,GAAG,KAAA,CAAM,cAAA,EAAgB,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,cAAA,CAAe,QAAQ,KAAK,CAAA,KACzE,KAAA,CAAM,cAAA;AAAA,UACZ,SAAA,EAAW;AAAA,SACb,CAAE,CAAA;AAEF,QAAA,OAAO,KAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI;AAAA,UACF,KAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,WAAA,EAAa,OACX,QAAA,EACA,OAAA,EACA,IAAA,KACG;AAEH,MAAA,GAAA,GAAM,kBAAA,EAAmB;AAGzB,MAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACd,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,UAAI,CAAC,CAAA,KAC1B,CAAA,CAAE,EAAA,KAAO,QAAA,GACL;AAAA,YACE,GAAG,CAAA;AAAA,YACH,MAAA,EAAQ,EAAE,MAAA,CAAO,GAAA;AAAA,cAAI,CAAC,CAAA,KACpB,CAAA,CAAE,EAAA,KAAO,OAAA,GAAW,EAAE,GAAG,CAAA,EAAG,GAAG,IAAA,EAAK,GAA6B;AAAA;AACnE,WACF,GACA;AAAA,SACN;AAAA,QACA,cAAA,EACE,KAAA,CAAM,cAAA,EAAgB,EAAA,KAAO,QAAA,GACzB;AAAA,UACE,GAAG,KAAA,CAAM,cAAA;AAAA,UACT,MAAA,EAAQ,KAAA,CAAM,cAAA,CAAe,MAAA,CAAO,GAAA;AAAA,YAAI,CAAC,CAAA,KACvC,CAAA,CAAE,EAAA,KAAO,OAAA,GAAW,EAAE,GAAG,CAAA,EAAG,GAAG,IAAA,EAAK,GAA6B;AAAA;AACnE,YAEF,KAAA,CAAM,cAAA;AAAA,QACZ,aAAA,EACE,KAAA,CAAM,aAAA,EAAe,EAAA,KAAO,OAAA,GACvB,EAAE,GAAG,KAAA,CAAM,aAAA,EAAe,GAAG,IAAA,EAAK,GACnC,KAAA,CAAM,aAAA;AAAA,QACZ,OAAA,EAAS;AAAA,OACX,CAAE,CAAA;AAEF,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,WAAA;AAAA,UAC9B,QAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACF;AAGA,QAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UACd,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,YAAI,CAAC,CAAA,KAC1B,CAAA,CAAE,EAAA,KAAO,QAAA,GACL;AAAA,cACE,GAAG,CAAA;AAAA,cACH,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAC,MAAO,CAAA,CAAE,EAAA,KAAO,OAAA,GAAU,OAAA,GAAU,CAAE;AAAA,aAC9D,GACA;AAAA,WACN;AAAA,UACA,cAAA,EACE,KAAA,CAAM,cAAA,EAAgB,EAAA,KAAO,QAAA,GACzB;AAAA,YACE,GAAG,KAAA,CAAM,cAAA;AAAA,YACT,MAAA,EAAQ,KAAA,CAAM,cAAA,CAAe,MAAA,CAAO,GAAA;AAAA,cAAI,CAAC,CAAA,KACvC,CAAA,CAAE,EAAA,KAAO,UAAU,OAAA,GAAU;AAAA;AAC/B,cAEF,KAAA,CAAM,cAAA;AAAA,UACZ,eACE,KAAA,CAAM,aAAA,EAAe,EAAA,KAAO,OAAA,GAAU,UAAU,KAAA,CAAM;AAAA,SAC1D,CAAE,CAAA;AAEF,QAAA,GAAA,GAAM,cAAA,EAAe;AACrB,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,KAAA,EAAO;AAEd,QAAA,GAAA,GAAM,SAAA,EAAU;AAChB,QAAA,GAAA,CAAI,EAAE,OAAuB,CAAA;AAC7B,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,WAAA,EAAa,OAAO,QAAA,EAAkB,OAAA,KAAoB;AAExD,MAAA,GAAA,GAAM,kBAAA,EAAmB;AAGzB,MAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACd,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,UAAI,CAAC,CAAA,KAC1B,CAAA,CAAE,EAAA,KAAO,QAAA,GACL;AAAA,YACE,GAAG,CAAA;AAAA,YACH,MAAA,EAAQ,EAAE,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO;AAAA,WACjD,GACA;AAAA,SACN;AAAA,QACA,cAAA,EACE,KAAA,CAAM,cAAA,EAAgB,EAAA,KAAO,QAAA,GACzB;AAAA,UACE,GAAG,KAAA,CAAM,cAAA;AAAA,UACT,MAAA,EAAQ,MAAM,cAAA,CAAe,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,OAAO;AAAA,YAEpE,KAAA,CAAM,cAAA;AAAA,QACZ,eAAe,KAAA,CAAM,aAAA,EAAe,EAAA,KAAO,OAAA,GAAU,OAAO,KAAA,CAAM;AAAA,OACpE,CAAE,CAAA;AAEF,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,WAAA,CAAY,QAAA,EAAU,OAAO,CAAA;AAC7C,QAAA,GAAA,GAAM,cAAA,EAAe;AAAA,MACvB,SAAS,KAAA,EAAO;AAEd,QAAA,GAAA,GAAM,SAAA,EAAU;AAChB,QAAA,GAAA,CAAI,EAAE,OAAuB,CAAA;AAC7B,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,aAAA,EAAe,OAAO,QAAA,EAAkB,QAAA,KAAuB;AAC7D,MAAA,MAAM,EAAE,cAAA,EAAe,GAAI,GAAA,EAAI;AAE/B,MAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,EAAA,KAAO,QAAA,EAAU;AACrD,QAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,MAC7D;AAGA,MAAA,GAAA,GAAM,kBAAA,EAAmB;AAGzB,MAAA,MAAM,eAAA,GAAkB,QAAA,CACrB,GAAA,CAAI,CAAC,IAAI,KAAA,KAAU;AAClB,QAAA,MAAM,KAAA,GAAQ,eAAe,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC3D,QAAA,OAAO,QAAQ,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,OAAM,GAAI,IAAA;AAAA,MAC9C,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,CAAA,KAAiC,MAAM,IAAI,CAAA;AAEtD,MAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACd,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,UAAI,CAAC,CAAA,KAC1B,CAAA,CAAE,EAAA,KAAO,QAAA,GAAW,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,eAAA,EAAgB,GAAI;AAAA,SAC1D;AAAA,QACA,cAAA,EAAgB,EAAE,GAAG,cAAA,EAAgB,QAAQ,eAAA,EAAgB;AAAA,QAC7D,OAAA,EAAS;AAAA,OACX,CAAE,CAAA;AAEF,MAAA,IAAI;AAEF,QAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,UACZ,eAAA,CAAgB,GAAA;AAAA,YAAI,CAAC,KAAA,KACnB,SAAA,CAAU,WAAA,CAAY,QAAA,EAAU,KAAA,CAAM,EAAA,EAAI,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO;AAAA;AAClE,SACF;AAEA,QAAA,GAAA,GAAM,cAAA,EAAe;AAAA,MACvB,SAAS,KAAA,EAAO;AAEd,QAAA,GAAA,GAAM,SAAA,EAAU;AAChB,QAAA,GAAA,CAAI,EAAE,OAAuB,CAAA;AAC7B,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAMA,SAAA,EAAW,OAAO,EAAA,EAAY,OAAA,KAAa;AACzC,MAAA,GAAA,CAAI,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,SAAA,CAAU,IAAI,OAAO,CAAA;AAGjD,QAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UACd,IAAA,EAAM,CAAC,GAAA,EAAK,GAAG,MAAM,IAAI,CAAA;AAAA,UACzB,SAAA,EAAW;AAAA,SACb,CAAE,CAAA;AAEF,QAAA,OAAO,GAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI;AAAA,UACF,KAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,QAAA,EAAU,OAAO,QAAA,EAAkB,OAAA,KAAa;AAC9C,MAAA,GAAA,CAAI,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,aAAA,CAAc,UAAU,OAAO,CAAA;AAEhE,QAAA,GAAA,CAAI;AAAA,UACF,MAAM,QAAA,CAAS,OAAA;AAAA,UACf,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI;AAAA,UACF,KAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,SAAA,EAAW,OAAO,KAAA,KAAkB;AAClC,MAAA,GAAA,CAAI,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,eAAA,CAAgB,KAAK,CAAA;AAGjD,QAAA,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UACd,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,MAAO,CAAA,CAAE,EAAA,KAAO,KAAA,GAAQ,GAAA,GAAM,CAAE,CAAA;AAAA,UACtD,SAAA,EAAW;AAAA,SACb,CAAE,CAAA;AAEF,QAAA,OAAO,GAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI;AAAA,UACF,KAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,GAAA,CAAI,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,IACxB,CAAA;AAAA,IAEA,YAAY,MAAM;AAChB,MAAA,GAAA,CAAI,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IACrB,CAAA;AAAA,IAEA,OAAO,MAAM;AACX,MAAA,GAAA,CAAI,oBAA6B,CAAA;AAAA,IACnC,CAAA;AAAA;AAAA;AAAA;AAAA,IAMA,oBAAoB,MAAM;AACxB,MAAA,MAAM,EAAE,OAAA,EAAS,cAAA,EAAe,GAAI,GAAA,EAAI;AACxC,MAAA,GAAA,CAAI;AAAA,QACF,aAAA,EAAe;AAAA,UACb,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,UAC3C,cAAA,EAAgB,iBACX,IAAA,CAAK,KAAA,CAAM,KAAK,SAAA,CAAU,cAAc,CAAC,CAAA,GAC1C;AAAA;AACN,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,WAAW,MAAM;AACf,MAAA,MAAM,EAAE,aAAA,EAAc,GAAI,GAAA,EAAI;AAC9B,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,GAAA,CAAI;AAAA,UACF,SAAS,aAAA,CAAc,OAAA;AAAA,UACvB,gBAAgB,aAAA,CAAc,cAAA;AAAA,UAC9B,aAAA,EAAe;AAAA,SAChB,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IAEA,gBAAgB,MAAM;AACpB,MAAA,GAAA,CAAI,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAAA,IAC7B;AAAA,GACF,CAAE,CAAA;AACJ","file":"index.js","sourcesContent":["/**\n * Store types for @startsimpli/funnels\n *\n * Generic Zustand store for managing funnel state.\n * Works with any entity type - no product-specific logic.\n */\n\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\nimport type {\n FunnelListFilters,\n PaginatedResponse,\n} from '../api/client';\n\n/**\n * Store state interface\n *\n * Generic over entity type TEntity\n */\nexport interface FunnelStore<TEntity = any> {\n // ============================================================================\n // Data State\n // ============================================================================\n\n /** All loaded funnels */\n funnels: Funnel<TEntity>[];\n\n /** Currently selected funnel */\n selectedFunnel: Funnel<TEntity> | null;\n\n /** Currently selected stage (for editing) */\n selectedStage: FunnelStage<TEntity> | null;\n\n /** Funnel runs for selected funnel */\n runs: FunnelRun[];\n\n /** Pagination info */\n pagination: {\n count: number;\n next: string | null;\n previous: string | null;\n currentPage: number;\n pageSize: number;\n };\n\n // ============================================================================\n // UI State\n // ============================================================================\n\n /** Loading state */\n isLoading: boolean;\n\n /** Error state */\n error: Error | null;\n\n /** Dirty flag - unsaved changes */\n isDirty: boolean;\n\n /** Optimistic update rollback state */\n rollbackState: {\n funnels: Funnel<TEntity>[];\n selectedFunnel: Funnel<TEntity> | null;\n } | null;\n\n // ============================================================================\n // Funnel Actions\n // ============================================================================\n\n /**\n * Load funnels with optional filters\n *\n * @param filters - Optional filters (status, owner, pagination, etc)\n */\n loadFunnels: (filters?: FunnelListFilters) => Promise<void>;\n\n /**\n * Select funnel for editing\n *\n * @param id - Funnel ID\n */\n selectFunnel: (id: string | null) => void;\n\n /**\n * Create new funnel\n *\n * @param data - Funnel creation data\n * @returns Created funnel\n */\n createFunnel: (data: CreateFunnelInput<TEntity>) => Promise<Funnel<TEntity>>;\n\n /**\n * Update funnel (optimistic update)\n *\n * @param id - Funnel ID\n * @param data - Update data\n * @returns Updated funnel\n */\n updateFunnel: (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => Promise<Funnel<TEntity>>;\n\n /**\n * Delete funnel (optimistic update)\n *\n * @param id - Funnel ID\n */\n deleteFunnel: (id: string) => Promise<void>;\n\n /**\n * Duplicate funnel\n *\n * @param id - Funnel ID to duplicate\n * @returns New funnel\n */\n duplicateFunnel: (id: string) => Promise<Funnel<TEntity>>;\n\n // ============================================================================\n // Stage Actions\n // ============================================================================\n\n /**\n * Select stage for editing\n *\n * @param stageId - Stage ID (null to clear selection)\n */\n selectStage: (stageId: string | null) => void;\n\n /**\n * Create new stage in funnel\n *\n * @param funnelId - Funnel ID\n * @param data - Stage creation data\n * @returns Created stage\n */\n createStage: (\n funnelId: string,\n data: CreateStageInput<TEntity>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Update stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n * @param data - Update data\n * @returns Updated stage\n */\n updateStage: (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => Promise<FunnelStage<TEntity>>;\n\n /**\n * Delete stage (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageId - Stage ID\n */\n deleteStage: (funnelId: string, stageId: string) => Promise<void>;\n\n /**\n * Reorder stages (optimistic update)\n *\n * @param funnelId - Funnel ID\n * @param stageIds - New order of stage IDs\n */\n reorderStages: (funnelId: string, stageIds: string[]) => Promise<void>;\n\n // ============================================================================\n // Run Actions\n // ============================================================================\n\n /**\n * Run funnel\n *\n * @param id - Funnel ID\n * @param options - Run options\n * @returns Created run\n */\n runFunnel: (\n id: string,\n options?: {\n trigger_type?: 'manual' | 'scheduled' | 'webhook' | 'api';\n metadata?: Record<string, any>;\n }\n ) => Promise<FunnelRun>;\n\n /**\n * Load funnel runs\n *\n * @param funnelId - Funnel ID\n * @param filters - Optional filters\n */\n loadRuns: (\n funnelId: string,\n filters?: {\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n page?: number;\n page_size?: number;\n }\n ) => Promise<void>;\n\n /**\n * Cancel running funnel\n *\n * @param runId - Run ID\n */\n cancelRun: (runId: string) => Promise<FunnelRun>;\n\n // ============================================================================\n // UI State Actions\n // ============================================================================\n\n /**\n * Set dirty flag\n *\n * @param dirty - Dirty state\n */\n setDirty: (dirty: boolean) => void;\n\n /**\n * Clear error\n */\n clearError: () => void;\n\n /**\n * Reset store to initial state\n */\n reset: () => void;\n\n // ============================================================================\n // Internal Actions (for optimistic updates)\n // ============================================================================\n\n /**\n * Save current state for rollback\n * @internal\n */\n _saveRollbackState: () => void;\n\n /**\n * Rollback to saved state\n * @internal\n */\n _rollback: () => void;\n\n /**\n * Clear rollback state\n * @internal\n */\n _clearRollback: () => void;\n}\n\n/**\n * Initial state factory\n */\nexport const createInitialState = <TEntity = any>(): Pick<\n FunnelStore<TEntity>,\n | 'funnels'\n | 'selectedFunnel'\n | 'selectedStage'\n | 'runs'\n | 'pagination'\n | 'isLoading'\n | 'error'\n | 'isDirty'\n | 'rollbackState'\n> => ({\n funnels: [],\n selectedFunnel: null,\n selectedStage: null,\n runs: [],\n pagination: {\n count: 0,\n next: null,\n previous: null,\n currentPage: 1,\n pageSize: 20,\n },\n isLoading: false,\n error: null,\n isDirty: false,\n rollbackState: null,\n});\n","/**\n * Funnel Store Factory\n *\n * Creates isolated Zustand store instances for funnel management.\n * Factory pattern allows multiple editors to coexist without state conflicts.\n *\n * Features:\n * - Optimistic updates with automatic rollback on error\n * - Dirty tracking for unsaved changes\n * - Loading states for better UX\n * - Error handling with automatic retry\n * - Selection state management\n *\n * @packageDocumentation\n */\n\nimport { create, StoreApi, UseBoundStore } from 'zustand';\nimport type { FunnelApiClient, FunnelListFilters } from '../api/client';\nimport type { FunnelStore } from './types';\nimport { createInitialState } from './types';\nimport type {\n Funnel,\n FunnelStage,\n FunnelRun,\n CreateFunnelInput,\n UpdateFunnelInput,\n CreateStageInput,\n UpdateStageInput,\n} from '../types';\n\n/**\n * Create funnel store with API client\n *\n * Factory pattern - each call creates a new isolated store instance.\n * Perfect for multi-editor scenarios or testing.\n *\n * @param apiClient - API client for server operations\n * @returns Zustand store hook\n *\n * @example\n * ```ts\n * const adapter = new FetchAdapter({ headers: { 'Authorization': 'Bearer token' } });\n * const apiClient = new FunnelApiClient(adapter, 'https://api.example.com');\n * const useFunnelStore = createFunnelStore(apiClient);\n *\n * // In React component\n * function FunnelEditor() {\n * const { funnels, loadFunnels, createFunnel } = useFunnelStore();\n * // ...\n * }\n * ```\n */\nexport function createFunnelStore<TEntity = any>(\n apiClient: FunnelApiClient\n): UseBoundStore<StoreApi<FunnelStore<TEntity>>> {\n return create<FunnelStore<TEntity>>((set, get) => ({\n // Initialize state\n ...createInitialState<TEntity>(),\n\n // =========================================================================\n // Funnel Actions\n // =========================================================================\n\n loadFunnels: async (filters?: FunnelListFilters) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.listFunnels<TEntity>(filters);\n\n set({\n funnels: response.results,\n pagination: {\n count: response.count,\n next: response.next,\n previous: response.previous,\n currentPage: filters?.page || 1,\n pageSize: filters?.page_size || 20,\n },\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n selectFunnel: (id: string | null) => {\n const { funnels } = get();\n\n if (id === null) {\n set({ selectedFunnel: null, selectedStage: null });\n return;\n }\n\n const funnel = funnels.find((f) => f.id === id);\n set({\n selectedFunnel: funnel || null,\n selectedStage: null, // Clear stage selection when changing funnels\n });\n },\n\n createFunnel: async (data: CreateFunnelInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const funnel = await apiClient.createFunnel<TEntity>(data);\n\n set((state) => ({\n funnels: [...state.funnels, funnel],\n pagination: {\n ...state.pagination,\n count: state.pagination.count + 1,\n },\n isLoading: false,\n }));\n\n return funnel;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateFunnel: async (\n id: string,\n data: Partial<UpdateFunnelInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === id ? ({ ...f, ...data } as Funnel<TEntity>) : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === id\n ? ({ ...state.selectedFunnel, ...data } as Funnel<TEntity>)\n : state.selectedFunnel,\n isDirty: false, // Clear dirty flag on save\n }));\n\n try {\n const updated = await apiClient.updateFunnel<TEntity>(id, data);\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) => (f.id === id ? updated : f)),\n selectedFunnel:\n state.selectedFunnel?.id === id ? updated : state.selectedFunnel,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteFunnel: async (id: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.filter((f) => f.id !== id),\n selectedFunnel: state.selectedFunnel?.id === id ? null : state.selectedFunnel,\n pagination: {\n ...state.pagination,\n count: state.pagination.count - 1,\n },\n }));\n\n try {\n await apiClient.deleteFunnel(id);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n duplicateFunnel: async (id: string) => {\n const { funnels } = get();\n const funnel = funnels.find((f) => f.id === id);\n\n if (!funnel) {\n throw new Error(`Funnel ${id} not found`);\n }\n\n // Create copy with new name\n const copy: CreateFunnelInput<TEntity> = {\n name: `${funnel.name} (Copy)`,\n description: funnel.description,\n status: 'draft', // Always create as draft\n input_type: funnel.input_type,\n stages: funnel.stages.map((stage, index) => ({\n ...stage,\n order: index, // Preserve order\n })),\n completion_tags: funnel.completion_tags,\n metadata: funnel.metadata,\n };\n\n return get().createFunnel(copy);\n },\n\n // =========================================================================\n // Stage Actions\n // =========================================================================\n\n selectStage: (stageId: string | null) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel) {\n set({ selectedStage: null });\n return;\n }\n\n if (stageId === null) {\n set({ selectedStage: null });\n return;\n }\n\n const stage = selectedFunnel.stages.find((s) => s.id === stageId);\n set({ selectedStage: stage || null });\n },\n\n createStage: async (funnelId: string, data: CreateStageInput<TEntity>) => {\n set({ isLoading: true, error: null });\n\n try {\n const stage = await apiClient.createStage<TEntity>(funnelId, data);\n\n // Update funnel with new stage\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? { ...f, stages: [...f.stages, stage] }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? { ...state.selectedFunnel, stages: [...state.selectedFunnel.stages, stage] }\n : state.selectedFunnel,\n isLoading: false,\n }));\n\n return stage;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n updateStage: async (\n funnelId: string,\n stageId: string,\n data: Partial<UpdateStageInput<TEntity>>\n ) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? ({ ...s, ...data } as FunnelStage<TEntity>) : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId\n ? ({ ...state.selectedStage, ...data } as FunnelStage<TEntity>)\n : state.selectedStage,\n isDirty: false,\n }));\n\n try {\n const updated = await apiClient.updateStage<TEntity>(\n funnelId,\n stageId,\n data\n );\n\n // Update with server response\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.map((s) => (s.id === stageId ? updated : s)),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.map((s) =>\n s.id === stageId ? updated : s\n ),\n }\n : state.selectedFunnel,\n selectedStage:\n state.selectedStage?.id === stageId ? updated : state.selectedStage,\n }));\n\n get()._clearRollback();\n return updated;\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n deleteStage: async (funnelId: string, stageId: string) => {\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId\n ? {\n ...f,\n stages: f.stages.filter((s) => s.id !== stageId),\n }\n : f\n ),\n selectedFunnel:\n state.selectedFunnel?.id === funnelId\n ? {\n ...state.selectedFunnel,\n stages: state.selectedFunnel.stages.filter((s) => s.id !== stageId),\n }\n : state.selectedFunnel,\n selectedStage: state.selectedStage?.id === stageId ? null : state.selectedStage,\n }));\n\n try {\n await apiClient.deleteStage(funnelId, stageId);\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n reorderStages: async (funnelId: string, stageIds: string[]) => {\n const { selectedFunnel } = get();\n\n if (!selectedFunnel || selectedFunnel.id !== funnelId) {\n throw new Error('Funnel must be selected to reorder stages');\n }\n\n // Save state for rollback\n get()._saveRollbackState();\n\n // Optimistic update - reorder stages\n const reorderedStages = stageIds\n .map((id, index) => {\n const stage = selectedFunnel.stages.find((s) => s.id === id);\n return stage ? { ...stage, order: index } : null;\n })\n .filter((s): s is FunnelStage<TEntity> => s !== null);\n\n set((state) => ({\n funnels: state.funnels.map((f) =>\n f.id === funnelId ? { ...f, stages: reorderedStages } : f\n ),\n selectedFunnel: { ...selectedFunnel, stages: reorderedStages },\n isDirty: false,\n }));\n\n try {\n // Update each stage with new order\n await Promise.all(\n reorderedStages.map((stage) =>\n apiClient.updateStage(funnelId, stage.id, { order: stage.order })\n )\n );\n\n get()._clearRollback();\n } catch (error) {\n // Rollback optimistic update\n get()._rollback();\n set({ error: error as Error });\n throw error;\n }\n },\n\n // =========================================================================\n // Run Actions\n // =========================================================================\n\n runFunnel: async (id: string, options?) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.runFunnel(id, options);\n\n // Add to runs list\n set((state) => ({\n runs: [run, ...state.runs],\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n loadRuns: async (funnelId: string, filters?) => {\n set({ isLoading: true, error: null });\n\n try {\n const response = await apiClient.getFunnelRuns(funnelId, filters);\n\n set({\n runs: response.results,\n isLoading: false,\n });\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n cancelRun: async (runId: string) => {\n set({ isLoading: true, error: null });\n\n try {\n const run = await apiClient.cancelFunnelRun(runId);\n\n // Update run in list\n set((state) => ({\n runs: state.runs.map((r) => (r.id === runId ? run : r)),\n isLoading: false,\n }));\n\n return run;\n } catch (error) {\n set({\n error: error as Error,\n isLoading: false,\n });\n throw error;\n }\n },\n\n // =========================================================================\n // UI State Actions\n // =========================================================================\n\n setDirty: (dirty: boolean) => {\n set({ isDirty: dirty });\n },\n\n clearError: () => {\n set({ error: null });\n },\n\n reset: () => {\n set(createInitialState<TEntity>());\n },\n\n // =========================================================================\n // Internal Actions (Optimistic Updates)\n // =========================================================================\n\n _saveRollbackState: () => {\n const { funnels, selectedFunnel } = get();\n set({\n rollbackState: {\n funnels: JSON.parse(JSON.stringify(funnels)) as Funnel<TEntity>[],\n selectedFunnel: selectedFunnel\n ? (JSON.parse(JSON.stringify(selectedFunnel)) as Funnel<TEntity>)\n : null,\n },\n });\n },\n\n _rollback: () => {\n const { rollbackState } = get();\n if (rollbackState) {\n set({\n funnels: rollbackState.funnels,\n selectedFunnel: rollbackState.selectedFunnel,\n rollbackState: null,\n });\n }\n },\n\n _clearRollback: () => {\n set({ rollbackState: null });\n },\n }));\n}\n"]}
|