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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import { ComparisonOperator } from './types'
  2. import { VarType } from '@/app/components/workflow/types'
  3. import type { Branch } from '@/app/components/workflow/types'
  4. export const isEmptyRelatedOperator = (operator: ComparisonOperator) => {
  5. return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
  6. }
  7. const notTranslateKey = [
  8. ComparisonOperator.equal, ComparisonOperator.notEqual,
  9. ComparisonOperator.largerThan, ComparisonOperator.largerThanOrEqual,
  10. ComparisonOperator.lessThan, ComparisonOperator.lessThanOrEqual,
  11. ]
  12. export const isComparisonOperatorNeedTranslate = (operator?: ComparisonOperator) => {
  13. if (!operator)
  14. return false
  15. return !notTranslateKey.includes(operator)
  16. }
  17. export const getOperators = (type?: VarType, file?: { key: string }) => {
  18. const isFile = !!file
  19. if (isFile) {
  20. const { key } = file
  21. switch (key) {
  22. case 'name':
  23. return [
  24. ComparisonOperator.contains,
  25. ComparisonOperator.notContains,
  26. ComparisonOperator.startWith,
  27. ComparisonOperator.endWith,
  28. ComparisonOperator.is,
  29. ComparisonOperator.isNot,
  30. ComparisonOperator.empty,
  31. ComparisonOperator.notEmpty,
  32. ]
  33. case 'type':
  34. return [
  35. ComparisonOperator.in,
  36. ComparisonOperator.notIn,
  37. ]
  38. case 'size':
  39. return [
  40. ComparisonOperator.largerThan,
  41. ComparisonOperator.largerThanOrEqual,
  42. ComparisonOperator.lessThan,
  43. ComparisonOperator.lessThanOrEqual,
  44. ]
  45. case 'extension':
  46. return [
  47. ComparisonOperator.is,
  48. ComparisonOperator.isNot,
  49. ComparisonOperator.contains,
  50. ComparisonOperator.notContains,
  51. ]
  52. case 'mime_type':
  53. return [
  54. ComparisonOperator.contains,
  55. ComparisonOperator.notContains,
  56. ComparisonOperator.startWith,
  57. ComparisonOperator.endWith,
  58. ComparisonOperator.is,
  59. ComparisonOperator.isNot,
  60. ComparisonOperator.empty,
  61. ComparisonOperator.notEmpty,
  62. ]
  63. case 'transfer_method':
  64. return [
  65. ComparisonOperator.in,
  66. ComparisonOperator.notIn,
  67. ]
  68. case 'url':
  69. return [
  70. ComparisonOperator.contains,
  71. ComparisonOperator.notContains,
  72. ComparisonOperator.startWith,
  73. ComparisonOperator.endWith,
  74. ComparisonOperator.is,
  75. ComparisonOperator.isNot,
  76. ComparisonOperator.empty,
  77. ComparisonOperator.notEmpty,
  78. ]
  79. }
  80. return []
  81. }
  82. switch (type) {
  83. case VarType.string:
  84. return [
  85. ComparisonOperator.contains,
  86. ComparisonOperator.notContains,
  87. ComparisonOperator.startWith,
  88. ComparisonOperator.endWith,
  89. ComparisonOperator.is,
  90. ComparisonOperator.isNot,
  91. ComparisonOperator.empty,
  92. ComparisonOperator.notEmpty,
  93. ]
  94. case VarType.number:
  95. return [
  96. ComparisonOperator.equal,
  97. ComparisonOperator.notEqual,
  98. ComparisonOperator.largerThan,
  99. ComparisonOperator.lessThan,
  100. ComparisonOperator.largerThanOrEqual,
  101. ComparisonOperator.lessThanOrEqual,
  102. ComparisonOperator.empty,
  103. ComparisonOperator.notEmpty,
  104. ]
  105. case VarType.boolean:
  106. return [
  107. ComparisonOperator.is,
  108. ComparisonOperator.isNot,
  109. ComparisonOperator.empty,
  110. ComparisonOperator.notEmpty,
  111. ]
  112. case VarType.object:
  113. return [
  114. ComparisonOperator.empty,
  115. ComparisonOperator.notEmpty,
  116. ]
  117. case VarType.file:
  118. return [
  119. ComparisonOperator.exists,
  120. ComparisonOperator.notExists,
  121. ]
  122. case VarType.arrayString:
  123. case VarType.arrayNumber:
  124. return [
  125. ComparisonOperator.contains,
  126. ComparisonOperator.notContains,
  127. ComparisonOperator.empty,
  128. ComparisonOperator.notEmpty,
  129. ]
  130. case VarType.array:
  131. case VarType.arrayObject:
  132. return [
  133. ComparisonOperator.empty,
  134. ComparisonOperator.notEmpty,
  135. ]
  136. case VarType.arrayFile:
  137. return [
  138. ComparisonOperator.contains,
  139. ComparisonOperator.notContains,
  140. ComparisonOperator.allOf,
  141. ComparisonOperator.empty,
  142. ComparisonOperator.notEmpty,
  143. ]
  144. default:
  145. return [
  146. ComparisonOperator.is,
  147. ComparisonOperator.isNot,
  148. ComparisonOperator.empty,
  149. ComparisonOperator.notEmpty,
  150. ]
  151. }
  152. }
  153. export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => {
  154. if (!operator)
  155. return false
  156. return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
  157. }
  158. export const branchNameCorrect = (branches: Branch[]) => {
  159. const branchLength = branches.length
  160. if (branchLength < 2)
  161. throw new Error('if-else node branch number must than 2')
  162. if (branchLength === 2) {
  163. return branches.map((branch) => {
  164. return {
  165. ...branch,
  166. name: branch.id === 'false' ? 'ELSE' : 'IF',
  167. }
  168. })
  169. }
  170. return branches.map((branch, index) => {
  171. return {
  172. ...branch,
  173. name: branch.id === 'false' ? 'ELSE' : `CASE ${index + 1}`,
  174. }
  175. })
  176. }