mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 19:03:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {
 | |
|   createContext,
 | |
|   useEffect,
 | |
|   useRef,
 | |
| } from 'react'
 | |
| import { useStore } from 'reactflow'
 | |
| import {
 | |
|   createHooksStore,
 | |
| } from './store'
 | |
| import type { Shape } from './store'
 | |
| 
 | |
| type HooksStore = ReturnType<typeof createHooksStore>
 | |
| export const HooksStoreContext = createContext<HooksStore | null | undefined>(null)
 | |
| type HooksStoreContextProviderProps = Partial<Shape> & {
 | |
|   children: React.ReactNode
 | |
| }
 | |
| export const HooksStoreContextProvider = ({ children, ...restProps }: HooksStoreContextProviderProps) => {
 | |
|   const storeRef = useRef<HooksStore | undefined>(undefined)
 | |
|   const d3Selection = useStore(s => s.d3Selection)
 | |
|   const d3Zoom = useStore(s => s.d3Zoom)
 | |
| 
 | |
|   useEffect(() => {
 | |
|     if (storeRef.current && d3Selection && d3Zoom)
 | |
|       storeRef.current.getState().refreshAll(restProps)
 | |
|   // eslint-disable-next-line react-hooks/exhaustive-deps
 | |
|   }, [d3Selection, d3Zoom])
 | |
| 
 | |
|   if (!storeRef.current)
 | |
|     storeRef.current = createHooksStore(restProps)
 | |
| 
 | |
|   return (
 | |
|     <HooksStoreContext.Provider value={storeRef.current}>
 | |
|       {children}
 | |
|     </HooksStoreContext.Provider>
 | |
|   )
 | |
| }
 | 
