| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import { ComparisonOperator } from './types' | 
					
						
							| 
									
										
										
										
											2024-07-10 18:20:13 +08:00
										 |  |  | import { VarType } from '@/app/components/workflow/types' | 
					
						
							|  |  |  | import type { Branch } from '@/app/components/workflow/types' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const isEmptyRelatedOperator = (operator: ComparisonOperator) => { | 
					
						
							| 
									
										
										
										
											2024-10-23 15:46:02 +08:00
										 |  |  |   return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator) | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const notTranslateKey = [ | 
					
						
							|  |  |  |   ComparisonOperator.equal, ComparisonOperator.notEqual, | 
					
						
							|  |  |  |   ComparisonOperator.largerThan, ComparisonOperator.largerThanOrEqual, | 
					
						
							|  |  |  |   ComparisonOperator.lessThan, ComparisonOperator.lessThanOrEqual, | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const isComparisonOperatorNeedTranslate = (operator?: ComparisonOperator) => { | 
					
						
							|  |  |  |   if (!operator) | 
					
						
							|  |  |  |     return false | 
					
						
							|  |  |  |   return !notTranslateKey.includes(operator) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-07-10 18:20:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-21 10:32:37 +08:00
										 |  |  | export const getOperators = (type?: VarType, file?: { key: string }) => { | 
					
						
							|  |  |  |   const isFile = !!file | 
					
						
							|  |  |  |   if (isFile) { | 
					
						
							|  |  |  |     const { key } = file | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     switch (key) { | 
					
						
							|  |  |  |       case 'name': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.contains, | 
					
						
							|  |  |  |           ComparisonOperator.notContains, | 
					
						
							|  |  |  |           ComparisonOperator.startWith, | 
					
						
							|  |  |  |           ComparisonOperator.endWith, | 
					
						
							|  |  |  |           ComparisonOperator.is, | 
					
						
							|  |  |  |           ComparisonOperator.isNot, | 
					
						
							|  |  |  |           ComparisonOperator.empty, | 
					
						
							|  |  |  |           ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       case 'type': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.in, | 
					
						
							|  |  |  |           ComparisonOperator.notIn, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       case 'size': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.largerThan, | 
					
						
							|  |  |  |           ComparisonOperator.largerThanOrEqual, | 
					
						
							|  |  |  |           ComparisonOperator.lessThan, | 
					
						
							|  |  |  |           ComparisonOperator.lessThanOrEqual, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       case 'extension': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.is, | 
					
						
							|  |  |  |           ComparisonOperator.isNot, | 
					
						
							|  |  |  |           ComparisonOperator.contains, | 
					
						
							|  |  |  |           ComparisonOperator.notContains, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       case 'mime_type': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.contains, | 
					
						
							|  |  |  |           ComparisonOperator.notContains, | 
					
						
							|  |  |  |           ComparisonOperator.startWith, | 
					
						
							|  |  |  |           ComparisonOperator.endWith, | 
					
						
							|  |  |  |           ComparisonOperator.is, | 
					
						
							|  |  |  |           ComparisonOperator.isNot, | 
					
						
							|  |  |  |           ComparisonOperator.empty, | 
					
						
							|  |  |  |           ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       case 'transfer_method': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.in, | 
					
						
							|  |  |  |           ComparisonOperator.notIn, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       case 'url': | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |           ComparisonOperator.contains, | 
					
						
							|  |  |  |           ComparisonOperator.notContains, | 
					
						
							|  |  |  |           ComparisonOperator.startWith, | 
					
						
							|  |  |  |           ComparisonOperator.endWith, | 
					
						
							|  |  |  |           ComparisonOperator.is, | 
					
						
							|  |  |  |           ComparisonOperator.isNot, | 
					
						
							|  |  |  |           ComparisonOperator.empty, | 
					
						
							|  |  |  |           ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return [] | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2024-07-10 18:20:13 +08:00
										 |  |  |   switch (type) { | 
					
						
							|  |  |  |     case VarType.string: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.contains, | 
					
						
							|  |  |  |         ComparisonOperator.notContains, | 
					
						
							|  |  |  |         ComparisonOperator.startWith, | 
					
						
							|  |  |  |         ComparisonOperator.endWith, | 
					
						
							|  |  |  |         ComparisonOperator.is, | 
					
						
							|  |  |  |         ComparisonOperator.isNot, | 
					
						
							|  |  |  |         ComparisonOperator.empty, | 
					
						
							|  |  |  |         ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |     case VarType.number: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.equal, | 
					
						
							|  |  |  |         ComparisonOperator.notEqual, | 
					
						
							|  |  |  |         ComparisonOperator.largerThan, | 
					
						
							|  |  |  |         ComparisonOperator.lessThan, | 
					
						
							|  |  |  |         ComparisonOperator.largerThanOrEqual, | 
					
						
							|  |  |  |         ComparisonOperator.lessThanOrEqual, | 
					
						
							|  |  |  |         ComparisonOperator.empty, | 
					
						
							|  |  |  |         ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |       ] | 
					
						
							| 
									
										
										
										
											2024-10-21 10:32:37 +08:00
										 |  |  |     case VarType.file: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.exists, | 
					
						
							|  |  |  |         ComparisonOperator.notExists, | 
					
						
							|  |  |  |       ] | 
					
						
							| 
									
										
										
										
											2024-07-10 18:20:13 +08:00
										 |  |  |     case VarType.arrayString: | 
					
						
							|  |  |  |     case VarType.arrayNumber: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.contains, | 
					
						
							|  |  |  |         ComparisonOperator.notContains, | 
					
						
							|  |  |  |         ComparisonOperator.empty, | 
					
						
							|  |  |  |         ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |     case VarType.array: | 
					
						
							|  |  |  |     case VarType.arrayObject: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.empty, | 
					
						
							|  |  |  |         ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |       ] | 
					
						
							| 
									
										
										
										
											2024-10-21 10:32:37 +08:00
										 |  |  |     case VarType.arrayFile: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.contains, | 
					
						
							|  |  |  |         ComparisonOperator.notContains, | 
					
						
							|  |  |  |         ComparisonOperator.allOf, | 
					
						
							|  |  |  |         ComparisonOperator.empty, | 
					
						
							|  |  |  |         ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |       ] | 
					
						
							| 
									
										
										
										
											2024-07-10 18:20:13 +08:00
										 |  |  |     default: | 
					
						
							|  |  |  |       return [ | 
					
						
							|  |  |  |         ComparisonOperator.is, | 
					
						
							|  |  |  |         ComparisonOperator.isNot, | 
					
						
							|  |  |  |         ComparisonOperator.empty, | 
					
						
							|  |  |  |         ComparisonOperator.notEmpty, | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => { | 
					
						
							|  |  |  |   if (!operator) | 
					
						
							|  |  |  |     return false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-21 10:32:37 +08:00
										 |  |  |   return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator) | 
					
						
							| 
									
										
										
										
											2024-07-10 18:20:13 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const branchNameCorrect = (branches: Branch[]) => { | 
					
						
							|  |  |  |   const branchLength = branches.length | 
					
						
							|  |  |  |   if (branchLength < 2) | 
					
						
							|  |  |  |     throw new Error('if-else node branch number must than 2') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (branchLength === 2) { | 
					
						
							|  |  |  |     return branches.map((branch) => { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         ...branch, | 
					
						
							|  |  |  |         name: branch.id === 'false' ? 'ELSE' : 'IF', | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return branches.map((branch, index) => { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       ...branch, | 
					
						
							|  |  |  |       name: branch.id === 'false' ? 'ELSE' : `CASE ${index + 1}`, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | } |