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

default.ts 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import type { Var } from '../../types'
  2. import { BlockEnum, type NodeDefault } from '../../types'
  3. import { getNotExistVariablesByArray, getNotExistVariablesByText } from '../../utils/workflow'
  4. import { type IfElseNodeType, LogicalOperator } from './types'
  5. import { isEmptyRelatedOperator } from './utils'
  6. import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/blocks'
  7. const i18nPrefix = 'workflow.errorMsg'
  8. const nodeDefault: NodeDefault<IfElseNodeType> = {
  9. defaultValue: {
  10. _targetBranches: [
  11. {
  12. id: 'true',
  13. name: 'IF',
  14. },
  15. {
  16. id: 'false',
  17. name: 'ELSE',
  18. },
  19. ],
  20. cases: [
  21. {
  22. case_id: 'true',
  23. logical_operator: LogicalOperator.and,
  24. conditions: [],
  25. },
  26. ],
  27. },
  28. getAvailablePrevNodes(isChatMode: boolean) {
  29. const nodes = isChatMode
  30. ? ALL_CHAT_AVAILABLE_BLOCKS
  31. : ALL_COMPLETION_AVAILABLE_BLOCKS.filter(type => type !== BlockEnum.End)
  32. return nodes
  33. },
  34. getAvailableNextNodes(isChatMode: boolean) {
  35. const nodes = isChatMode ? ALL_CHAT_AVAILABLE_BLOCKS : ALL_COMPLETION_AVAILABLE_BLOCKS
  36. return nodes
  37. },
  38. checkValid(payload: IfElseNodeType, t: any) {
  39. let errorMessages = ''
  40. const { cases } = payload
  41. if (!cases || cases.length === 0)
  42. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: 'IF' })
  43. cases.forEach((caseItem, index) => {
  44. if (!caseItem.conditions.length)
  45. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: index === 0 ? 'IF' : 'ELIF' })
  46. caseItem.conditions.forEach((condition) => {
  47. if (!errorMessages && (!condition.variable_selector || condition.variable_selector.length === 0))
  48. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variable`) })
  49. if (!errorMessages && !condition.comparison_operator)
  50. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.ifElse.operator') })
  51. if (!errorMessages) {
  52. if (condition.sub_variable_condition) {
  53. const isSet = condition.sub_variable_condition.conditions.every((c) => {
  54. if (!c.comparison_operator)
  55. return false
  56. if (isEmptyRelatedOperator(c.comparison_operator!))
  57. return true
  58. return !!c.value
  59. })
  60. if (!isSet)
  61. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) })
  62. }
  63. else {
  64. if (!isEmptyRelatedOperator(condition.comparison_operator!) && !condition.value)
  65. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) })
  66. }
  67. }
  68. })
  69. })
  70. return {
  71. isValid: !errorMessages,
  72. errorMessage: errorMessages,
  73. }
  74. },
  75. checkVarValid(payload: IfElseNodeType, varMap: Record<string, Var>, t: any) {
  76. const errorMessageArr = []
  77. const condition_variable_selector_warnings: string[] = []
  78. const condition_value_warnings: string[] = []
  79. payload.cases.forEach((caseItem) => {
  80. caseItem.conditions.forEach((condition) => {
  81. if (!condition.variable_selector)
  82. return
  83. const selector_warnings = getNotExistVariablesByArray([condition.variable_selector], varMap)
  84. if (selector_warnings.length)
  85. condition_variable_selector_warnings.push(...selector_warnings)
  86. const value_warnings = Array.isArray(condition.value) ? getNotExistVariablesByArray([condition.value], varMap) : getNotExistVariablesByText(condition.value, varMap)
  87. if (value_warnings.length)
  88. condition_value_warnings.push(...value_warnings)
  89. condition.sub_variable_condition?.conditions.forEach((subCondition) => {
  90. const sub_variable_value_warnings = Array.isArray(subCondition.value) ? getNotExistVariablesByArray([subCondition.value], varMap) : getNotExistVariablesByText(subCondition.value, varMap)
  91. if (sub_variable_value_warnings.length)
  92. condition_value_warnings.push(...sub_variable_value_warnings)
  93. })
  94. })
  95. })
  96. if (condition_variable_selector_warnings.length)
  97. errorMessageArr.push(`${t('workflow.nodes.ifElse.condition')} ${t('workflow.common.referenceVar')}${condition_variable_selector_warnings.join('、')}${t('workflow.common.noExist')}`)
  98. if (condition_value_warnings.length)
  99. errorMessageArr.push(`${t('workflow.nodes.ifElse.enterValue')} ${t('workflow.common.referenceVar')}${condition_value_warnings.join('、')}${t('workflow.common.noExist')}`)
  100. return {
  101. isValid: true,
  102. warning_vars: condition_variable_selector_warnings,
  103. errorMessage: errorMessageArr,
  104. }
  105. },
  106. }
  107. export default nodeDefault