| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { useContext } from 'react'
- import {
- noop,
- } from 'lodash-es'
- import {
- useStore as useZustandStore,
- } from 'zustand'
- import { createStore } from 'zustand/vanilla'
- import { HooksStoreContext } from './provider'
-
- type CommonHooksFnMap = {
- doSyncWorkflowDraft: (
- notRefreshWhenSyncError?: boolean,
- callback?: {
- onSuccess?: () => void
- onError?: () => void
- onSettled?: () => void
- }
- ) => Promise<void>
- syncWorkflowDraftWhenPageClose: () => void
- handleBackupDraft: () => void
- handleLoadBackupDraft: () => void
- handleRestoreFromPublishedWorkflow: (...args: any[]) => void
- handleRun: (...args: any[]) => void
- handleStopRun: (...args: any[]) => void
- handleStartWorkflowRun: () => void
- handleWorkflowStartRunInWorkflow: () => void
- handleWorkflowStartRunInChatflow: () => void
- }
-
- export type Shape = {
- refreshAll: (props: Partial<CommonHooksFnMap>) => void
- } & CommonHooksFnMap
-
- export const createHooksStore = ({
- doSyncWorkflowDraft = async () => noop(),
- syncWorkflowDraftWhenPageClose = noop,
- handleBackupDraft = noop,
- handleLoadBackupDraft = noop,
- handleRestoreFromPublishedWorkflow = noop,
- handleRun = noop,
- handleStopRun = noop,
- handleStartWorkflowRun = noop,
- handleWorkflowStartRunInWorkflow = noop,
- handleWorkflowStartRunInChatflow = noop,
- }: Partial<Shape>) => {
- return createStore<Shape>(set => ({
- refreshAll: props => set(state => ({ ...state, ...props })),
- doSyncWorkflowDraft,
- syncWorkflowDraftWhenPageClose,
- handleBackupDraft,
- handleLoadBackupDraft,
- handleRestoreFromPublishedWorkflow,
- handleRun,
- handleStopRun,
- handleStartWorkflowRun,
- handleWorkflowStartRunInWorkflow,
- handleWorkflowStartRunInChatflow,
- }))
- }
-
- export function useHooksStore<T>(selector: (state: Shape) => T): T {
- const store = useContext(HooksStoreContext)
- if (!store)
- throw new Error('Missing HooksStoreContext.Provider in the tree')
-
- return useZustandStore(store, selector)
- }
-
- export const useHooksStoreApi = () => {
- return useContext(HooksStoreContext)!
- }
|