|
import { BlockEnum, type NodeDefault } from '../../types' |
|
import { type IfElseNodeType, LogicalOperator } from './types' |
|
import { isEmptyRelatedOperator } from './utils' |
|
import { TransferMethod } from '@/types/app' |
|
import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/constants' |
|
const i18nPrefix = 'workflow.errorMsg' |
|
|
|
const nodeDefault: NodeDefault<IfElseNodeType> = { |
|
defaultValue: { |
|
_targetBranches: [ |
|
{ |
|
id: 'true', |
|
name: 'IF', |
|
}, |
|
{ |
|
id: 'false', |
|
name: 'ELSE', |
|
}, |
|
], |
|
cases: [ |
|
{ |
|
case_id: 'true', |
|
logical_operator: LogicalOperator.and, |
|
conditions: [], |
|
}, |
|
], |
|
}, |
|
getAvailablePrevNodes(isChatMode: boolean) { |
|
const nodes = isChatMode |
|
? ALL_CHAT_AVAILABLE_BLOCKS |
|
: ALL_COMPLETION_AVAILABLE_BLOCKS.filter(type => type !== BlockEnum.End) |
|
return nodes |
|
}, |
|
getAvailableNextNodes(isChatMode: boolean) { |
|
const nodes = isChatMode ? ALL_CHAT_AVAILABLE_BLOCKS : ALL_COMPLETION_AVAILABLE_BLOCKS |
|
return nodes |
|
}, |
|
checkValid(payload: IfElseNodeType, t: any) { |
|
let errorMessages = '' |
|
const { cases } = payload |
|
if (!cases || cases.length === 0) |
|
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: 'IF' }) |
|
|
|
cases.forEach((caseItem, index) => { |
|
if (!caseItem.conditions.length) |
|
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: index === 0 ? 'IF' : 'ELIF' }) |
|
|
|
caseItem.conditions.forEach((condition) => { |
|
if (!errorMessages && (!condition.variable_selector || condition.variable_selector.length === 0)) |
|
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variable`) }) |
|
if (!errorMessages && !condition.comparison_operator) |
|
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.ifElse.operator') }) |
|
if (!errorMessages) { |
|
if (condition.sub_variable_condition) { |
|
const isSet = condition.sub_variable_condition.conditions.every((c) => { |
|
if (!c.comparison_operator) |
|
return false |
|
|
|
if (isEmptyRelatedOperator(c.comparison_operator!)) |
|
return true |
|
|
|
return !!c.value |
|
}) |
|
if (!isSet) |
|
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) }) |
|
} |
|
else { |
|
if (!isEmptyRelatedOperator(condition.comparison_operator!) && !condition.value) |
|
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) }) |
|
} |
|
} |
|
}) |
|
}) |
|
return { |
|
isValid: !errorMessages, |
|
errorMessage: errorMessages, |
|
} |
|
}, |
|
} |
|
|
|
export default nodeDefault |
|
|
|
export const FILE_TYPE_OPTIONS = [ |
|
{ value: 'image', i18nKey: 'image' }, |
|
{ value: 'document', i18nKey: 'doc' }, |
|
{ value: 'audio', i18nKey: 'audio' }, |
|
{ value: 'video', i18nKey: 'video' }, |
|
] |
|
|
|
export const TRANSFER_METHOD = [ |
|
{ value: TransferMethod.local_file, i18nKey: 'localUpload' }, |
|
{ value: TransferMethod.remote_url, i18nKey: 'url' }, |
|
] |
|
|
|
export const SUB_VARIABLES = ['type', 'size', 'name', 'url', 'extension', 'mime_type', 'transfer_method'] |
|
export const OUTPUT_FILE_SUB_VARIABLES = SUB_VARIABLES.filter(key => key !== 'transfer_method') |
|
|