You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

context.tsx 911B

1234567891011121314151617181920212223242526272829
  1. import {
  2. createContext,
  3. useRef,
  4. } from 'react'
  5. import {
  6. createWorkflowStore,
  7. } from './store'
  8. import type { StateCreator } from 'zustand'
  9. import type { WorkflowSliceShape } from '@/app/components/workflow-app/store/workflow/workflow-slice'
  10. type WorkflowStore = ReturnType<typeof createWorkflowStore>
  11. export const WorkflowContext = createContext<WorkflowStore | null>(null)
  12. export type WorkflowProviderProps = {
  13. children: React.ReactNode
  14. injectWorkflowStoreSliceFn?: StateCreator<WorkflowSliceShape>
  15. }
  16. export const WorkflowContextProvider = ({ children, injectWorkflowStoreSliceFn }: WorkflowProviderProps) => {
  17. const storeRef = useRef<WorkflowStore | undefined>(undefined)
  18. if (!storeRef.current)
  19. storeRef.current = createWorkflowStore({ injectWorkflowStoreSliceFn })
  20. return (
  21. <WorkflowContext.Provider value={storeRef.current}>
  22. {children}
  23. </WorkflowContext.Provider>
  24. )
  25. }