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.

utils.ts 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. ]
  110. case VarType.file:
  111. return [
  112. ComparisonOperator.exists,
  113. ComparisonOperator.notExists,
  114. ]
  115. case VarType.arrayString:
  116. case VarType.arrayNumber:
  117. case VarType.arrayBoolean:
  118. return [
  119. ComparisonOperator.contains,
  120. ComparisonOperator.notContains,
  121. ComparisonOperator.empty,
  122. ComparisonOperator.notEmpty,
  123. ]
  124. case VarType.array:
  125. case VarType.arrayObject:
  126. return [
  127. ComparisonOperator.empty,
  128. ComparisonOperator.notEmpty,
  129. ]
  130. case VarType.arrayFile:
  131. return [
  132. ComparisonOperator.contains,
  133. ComparisonOperator.notContains,
  134. ComparisonOperator.allOf,
  135. ComparisonOperator.empty,
  136. ComparisonOperator.notEmpty,
  137. ]
  138. default:
  139. return [
  140. ComparisonOperator.is,
  141. ComparisonOperator.isNot,
  142. ComparisonOperator.empty,
  143. ComparisonOperator.notEmpty,
  144. ]
  145. }
  146. }
  147. export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => {
  148. if (!operator)
  149. return false
  150. return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
  151. }
  152. export const branchNameCorrect = (branches: Branch[]) => {
  153. const branchLength = branches.length
  154. if (branchLength < 2)
  155. throw new Error('if-else node branch number must than 2')
  156. if (branchLength === 2) {
  157. return branches.map((branch) => {
  158. return {
  159. ...branch,
  160. name: branch.id === 'false' ? 'ELSE' : 'IF',
  161. }
  162. })
  163. }
  164. return branches.map((branch, index) => {
  165. return {
  166. ...branch,
  167. name: branch.id === 'false' ? 'ELSE' : `CASE ${index + 1}`,
  168. }
  169. })
  170. }