default.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { BlockEnum, type NodeDefault } from '../../types'
  2. import { type IfElseNodeType, LogicalOperator } from './types'
  3. import { isEmptyRelatedOperator } from './utils'
  4. import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/blocks'
  5. const i18nPrefix = 'workflow.errorMsg'
  6. const nodeDefault: NodeDefault<IfElseNodeType> = {
  7. defaultValue: {
  8. _targetBranches: [
  9. {
  10. id: 'true',
  11. name: 'IF',
  12. },
  13. {
  14. id: 'false',
  15. name: 'ELSE',
  16. },
  17. ],
  18. cases: [
  19. {
  20. case_id: 'true',
  21. logical_operator: LogicalOperator.and,
  22. conditions: [],
  23. },
  24. ],
  25. },
  26. getAvailablePrevNodes(isChatMode: boolean) {
  27. const nodes = isChatMode
  28. ? ALL_CHAT_AVAILABLE_BLOCKS
  29. : ALL_COMPLETION_AVAILABLE_BLOCKS.filter(type => type !== BlockEnum.End)
  30. return nodes
  31. },
  32. getAvailableNextNodes(isChatMode: boolean) {
  33. const nodes = isChatMode ? ALL_CHAT_AVAILABLE_BLOCKS : ALL_COMPLETION_AVAILABLE_BLOCKS
  34. return nodes
  35. },
  36. checkValid(payload: IfElseNodeType, t: any) {
  37. let errorMessages = ''
  38. const { cases } = payload
  39. if (!cases || cases.length === 0)
  40. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: 'IF' })
  41. cases.forEach((caseItem, index) => {
  42. if (!caseItem.conditions.length)
  43. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: index === 0 ? 'IF' : 'ELIF' })
  44. caseItem.conditions.forEach((condition) => {
  45. if (!errorMessages && (!condition.variable_selector || condition.variable_selector.length === 0))
  46. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variable`) })
  47. if (!errorMessages && !condition.comparison_operator)
  48. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.ifElse.operator') })
  49. if (!errorMessages) {
  50. if (condition.sub_variable_condition) {
  51. const isSet = condition.sub_variable_condition.conditions.every((c) => {
  52. if (!c.comparison_operator)
  53. return false
  54. if (isEmptyRelatedOperator(c.comparison_operator!))
  55. return true
  56. return !!c.value
  57. })
  58. if (!isSet)
  59. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) })
  60. }
  61. else {
  62. if (!isEmptyRelatedOperator(condition.comparison_operator!) && !condition.value)
  63. errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) })
  64. }
  65. }
  66. })
  67. })
  68. return {
  69. isValid: !errorMessages,
  70. errorMessage: errorMessages,
  71. }
  72. },
  73. }
  74. export default nodeDefault