Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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