mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 19:03:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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)!
 | |
| }
 | 
