Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

store.ts 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { useContext } from 'react'
  2. import {
  3. noop,
  4. } from 'lodash-es'
  5. import {
  6. useStore as useZustandStore,
  7. } from 'zustand'
  8. import { createStore } from 'zustand/vanilla'
  9. import { HooksStoreContext } from './provider'
  10. type CommonHooksFnMap = {
  11. doSyncWorkflowDraft: (
  12. notRefreshWhenSyncError?: boolean,
  13. callback?: {
  14. onSuccess?: () => void
  15. onError?: () => void
  16. onSettled?: () => void
  17. }
  18. ) => Promise<void>
  19. syncWorkflowDraftWhenPageClose: () => void
  20. handleRefreshWorkflowDraft: () => void
  21. handleBackupDraft: () => void
  22. handleLoadBackupDraft: () => void
  23. handleRestoreFromPublishedWorkflow: (...args: any[]) => void
  24. handleRun: (...args: any[]) => void
  25. handleStopRun: (...args: any[]) => void
  26. handleStartWorkflowRun: () => void
  27. handleWorkflowStartRunInWorkflow: () => void
  28. handleWorkflowStartRunInChatflow: () => void
  29. }
  30. export type Shape = {
  31. refreshAll: (props: Partial<CommonHooksFnMap>) => void
  32. } & CommonHooksFnMap
  33. export const createHooksStore = ({
  34. doSyncWorkflowDraft = async () => noop(),
  35. syncWorkflowDraftWhenPageClose = noop,
  36. handleRefreshWorkflowDraft = noop,
  37. handleBackupDraft = noop,
  38. handleLoadBackupDraft = noop,
  39. handleRestoreFromPublishedWorkflow = noop,
  40. handleRun = noop,
  41. handleStopRun = noop,
  42. handleStartWorkflowRun = noop,
  43. handleWorkflowStartRunInWorkflow = noop,
  44. handleWorkflowStartRunInChatflow = noop,
  45. }: Partial<Shape>) => {
  46. return createStore<Shape>(set => ({
  47. refreshAll: props => set(state => ({ ...state, ...props })),
  48. doSyncWorkflowDraft,
  49. syncWorkflowDraftWhenPageClose,
  50. handleRefreshWorkflowDraft,
  51. handleBackupDraft,
  52. handleLoadBackupDraft,
  53. handleRestoreFromPublishedWorkflow,
  54. handleRun,
  55. handleStopRun,
  56. handleStartWorkflowRun,
  57. handleWorkflowStartRunInWorkflow,
  58. handleWorkflowStartRunInChatflow,
  59. }))
  60. }
  61. export function useHooksStore<T>(selector: (state: Shape) => T): T {
  62. const store = useContext(HooksStoreContext)
  63. if (!store)
  64. throw new Error('Missing HooksStoreContext.Provider in the tree')
  65. return useZustandStore(store, selector)
  66. }
  67. export const useHooksStoreApi = () => {
  68. return useContext(HooksStoreContext)!
  69. }