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.

store.ts 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. import type { IOtherOptions } from '@/service/base'
  11. import type { VarInInspect } from '@/types/workflow'
  12. import type {
  13. Node,
  14. ValueSelector,
  15. } from '@/app/components/workflow/types'
  16. type CommonHooksFnMap = {
  17. doSyncWorkflowDraft: (
  18. notRefreshWhenSyncError?: boolean,
  19. callback?: {
  20. onSuccess?: () => void
  21. onError?: () => void
  22. onSettled?: () => void
  23. }
  24. ) => Promise<void>
  25. syncWorkflowDraftWhenPageClose: () => void
  26. handleRefreshWorkflowDraft: () => void
  27. handleBackupDraft: () => void
  28. handleLoadBackupDraft: () => void
  29. handleRestoreFromPublishedWorkflow: (...args: any[]) => void
  30. handleRun: (params: any, callback?: IOtherOptions,) => void
  31. handleStopRun: (...args: any[]) => void
  32. handleStartWorkflowRun: () => void
  33. handleWorkflowStartRunInWorkflow: () => void
  34. handleWorkflowStartRunInChatflow: () => void
  35. fetchInspectVars: () => Promise<void>
  36. hasNodeInspectVars: (nodeId: string) => boolean
  37. hasSetInspectVar: (nodeId: string, name: string, sysVars: VarInInspect[], conversationVars: VarInInspect[]) => boolean
  38. fetchInspectVarValue: (selector: ValueSelector) => Promise<void>
  39. editInspectVarValue: (nodeId: string, varId: string, value: any) => Promise<void>
  40. renameInspectVarName: (nodeId: string, oldName: string, newName: string) => Promise<void>
  41. appendNodeInspectVars: (nodeId: string, payload: VarInInspect[], allNodes: Node[]) => void
  42. deleteInspectVar: (nodeId: string, varId: string) => Promise<void>
  43. deleteNodeInspectorVars: (nodeId: string) => Promise<void>
  44. deleteAllInspectorVars: () => Promise<void>
  45. isInspectVarEdited: (nodeId: string, name: string) => boolean
  46. resetToLastRunVar: (nodeId: string, varId: string) => Promise<void>
  47. invalidateSysVarValues: () => void
  48. resetConversationVar: (varId: string) => Promise<void>
  49. invalidateConversationVarValues: () => void
  50. configsMap?: {
  51. conversationVarsUrl: string
  52. systemVarsUrl: string
  53. }
  54. }
  55. export type Shape = {
  56. refreshAll: (props: Partial<CommonHooksFnMap>) => void
  57. } & CommonHooksFnMap
  58. export const createHooksStore = ({
  59. doSyncWorkflowDraft = async () => noop(),
  60. syncWorkflowDraftWhenPageClose = noop,
  61. handleRefreshWorkflowDraft = noop,
  62. handleBackupDraft = noop,
  63. handleLoadBackupDraft = noop,
  64. handleRestoreFromPublishedWorkflow = noop,
  65. handleRun = noop,
  66. handleStopRun = noop,
  67. handleStartWorkflowRun = noop,
  68. handleWorkflowStartRunInWorkflow = noop,
  69. handleWorkflowStartRunInChatflow = noop,
  70. fetchInspectVars = async () => noop(),
  71. hasNodeInspectVars = () => false,
  72. hasSetInspectVar = () => false,
  73. fetchInspectVarValue = async () => noop(),
  74. editInspectVarValue = async () => noop(),
  75. renameInspectVarName = async () => noop(),
  76. appendNodeInspectVars = () => noop(),
  77. deleteInspectVar = async () => noop(),
  78. deleteNodeInspectorVars = async () => noop(),
  79. deleteAllInspectorVars = async () => noop(),
  80. isInspectVarEdited = () => false,
  81. resetToLastRunVar = async () => noop(),
  82. invalidateSysVarValues = noop,
  83. resetConversationVar = async () => noop(),
  84. invalidateConversationVarValues = noop,
  85. }: Partial<Shape>) => {
  86. return createStore<Shape>(set => ({
  87. refreshAll: props => set(state => ({ ...state, ...props })),
  88. doSyncWorkflowDraft,
  89. syncWorkflowDraftWhenPageClose,
  90. handleRefreshWorkflowDraft,
  91. handleBackupDraft,
  92. handleLoadBackupDraft,
  93. handleRestoreFromPublishedWorkflow,
  94. handleRun,
  95. handleStopRun,
  96. handleStartWorkflowRun,
  97. handleWorkflowStartRunInWorkflow,
  98. handleWorkflowStartRunInChatflow,
  99. fetchInspectVars,
  100. hasNodeInspectVars,
  101. hasSetInspectVar,
  102. fetchInspectVarValue,
  103. editInspectVarValue,
  104. renameInspectVarName,
  105. appendNodeInspectVars,
  106. deleteInspectVar,
  107. deleteNodeInspectorVars,
  108. deleteAllInspectorVars,
  109. isInspectVarEdited,
  110. resetToLastRunVar,
  111. invalidateSysVarValues,
  112. resetConversationVar,
  113. invalidateConversationVarValues,
  114. }))
  115. }
  116. export function useHooksStore<T>(selector: (state: Shape) => T): T {
  117. const store = useContext(HooksStoreContext)
  118. if (!store)
  119. throw new Error('Missing HooksStoreContext.Provider in the tree')
  120. return useZustandStore(store, selector)
  121. }
  122. export const useHooksStoreApi = () => {
  123. return useContext(HooksStoreContext)!
  124. }