import { ComparisonOperator } from './types' import { VarType } from '@/app/components/workflow/types' import type { Branch } from '@/app/components/workflow/types' export const isEmptyRelatedOperator = (operator: ComparisonOperator) => { return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator) } 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) } 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 [] } 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, ] case VarType.file: return [ ComparisonOperator.exists, ComparisonOperator.notExists, ] 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, ] case VarType.arrayFile: return [ ComparisonOperator.contains, ComparisonOperator.notContains, ComparisonOperator.allOf, ComparisonOperator.empty, ComparisonOperator.notEmpty, ] default: return [ ComparisonOperator.is, ComparisonOperator.isNot, ComparisonOperator.empty, ComparisonOperator.notEmpty, ] } } export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => { if (!operator) return false return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator) } 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}`, } }) }