您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. flowId: string
  52. conversationVarsUrl: string
  53. systemVarsUrl: string
  54. }
  55. }
  56. export type Shape = {
  57. refreshAll: (props: Partial<CommonHooksFnMap>) => void
  58. } & CommonHooksFnMap
  59. export const createHooksStore = ({
  60. doSyncWorkflowDraft = async () => noop(),
  61. syncWorkflowDraftWhenPageClose = noop,
  62. handleRefreshWorkflowDraft = noop,
  63. handleBackupDraft = noop,
  64. handleLoadBackupDraft = noop,
  65. handleRestoreFromPublishedWorkflow = noop,
  66. handleRun = noop,
  67. handleStopRun = noop,
  68. handleStartWorkflowRun = noop,
  69. handleWorkflowStartRunInWorkflow = noop,
  70. handleWorkflowStartRunInChatflow = noop,
  71. fetchInspectVars = async () => noop(),
  72. hasNodeInspectVars = () => false,
  73. hasSetInspectVar = () => false,
  74. fetchInspectVarValue = async () => noop(),
  75. editInspectVarValue = async () => noop(),
  76. renameInspectVarName = async () => noop(),
  77. appendNodeInspectVars = () => noop(),
  78. deleteInspectVar = async () => noop(),
  79. deleteNodeInspectorVars = async () => noop(),
  80. deleteAllInspectorVars = async () => noop(),
  81. isInspectVarEdited = () => false,
  82. resetToLastRunVar = async () => noop(),
  83. invalidateSysVarValues = noop,
  84. resetConversationVar = async () => noop(),
  85. invalidateConversationVarValues = noop,
  86. }: Partial<Shape>) => {
  87. return createStore<Shape>(set => ({
  88. refreshAll: props => set(state => ({ ...state, ...props })),
  89. doSyncWorkflowDraft,
  90. syncWorkflowDraftWhenPageClose,
  91. handleRefreshWorkflowDraft,
  92. handleBackupDraft,
  93. handleLoadBackupDraft,
  94. handleRestoreFromPublishedWorkflow,
  95. handleRun,
  96. handleStopRun,
  97. handleStartWorkflowRun,
  98. handleWorkflowStartRunInWorkflow,
  99. handleWorkflowStartRunInChatflow,
  100. fetchInspectVars,
  101. hasNodeInspectVars,
  102. hasSetInspectVar,
  103. fetchInspectVarValue,
  104. editInspectVarValue,
  105. renameInspectVarName,
  106. appendNodeInspectVars,
  107. deleteInspectVar,
  108. deleteNodeInspectorVars,
  109. deleteAllInspectorVars,
  110. isInspectVarEdited,
  111. resetToLastRunVar,
  112. invalidateSysVarValues,
  113. resetConversationVar,
  114. invalidateConversationVarValues,
  115. }))
  116. }
  117. export function useHooksStore<T>(selector: (state: Shape) => T): T {
  118. const store = useContext(HooksStoreContext)
  119. if (!store)
  120. throw new Error('Missing HooksStoreContext.Provider in the tree')
  121. return useZustandStore(store, selector)
  122. }
  123. export const useHooksStoreApi = () => {
  124. return useContext(HooksStoreContext)!
  125. }