Переглянути джерело

ability to select same type sub item by preserving children of both f… (#23002)

tags/1.7.1
znn 3 місяці тому
джерело
коміт
177b0fb5e8
Аккаунт користувача з таким Email не знайдено

+ 55
- 10
web/app/components/workflow/nodes/_base/components/variable/utils.ts Переглянути файл

@@ -49,6 +49,13 @@ export const isConversationVar = (valueSelector: ValueSelector) => {
return valueSelector[0] === 'conversation'
}

export const hasValidChildren = (children: any): boolean => {
return children && (
(Array.isArray(children) && children.length > 0)
|| (!Array.isArray(children) && Object.keys((children as StructuredOutput)?.schema?.properties || {}).length > 0)
)
}

const inputVarTypeToVarType = (type: InputVarType): VarType => {
return ({
[InputVarType.number]: VarType.number,
@@ -139,19 +146,57 @@ const findExceptVarInObject = (obj: any, filterVar: (payload: Var, selector: Val
if (isStructuredOutput) {
childrenResult = findExceptVarInStructuredOutput(children, filterVar)
}
else if (Array.isArray(children)) {
childrenResult = children.filter((item: Var) => {
const { children: itemChildren } = item
const currSelector = [...value_selector, item.variable]
else if (Array.isArray(children)) {
childrenResult = children
.map((item: Var) => {
const { children: itemChildren } = item
const currSelector = [...value_selector, item.variable]

if (!itemChildren) {
return {
item,
filteredObj: null,
passesFilter: filterVar(item, currSelector),
}
}

if (!itemChildren)
return filterVar(item, currSelector)
const filteredObj = findExceptVarInObject(item, filterVar, currSelector, false)
const itemHasValidChildren = hasValidChildren(filteredObj.children)

const filteredObj = findExceptVarInObject(item, filterVar, currSelector, false) // File doesn't contain file children
return filteredObj.children && (filteredObj.children as Var[])?.length > 0
})
let passesFilter
if ((item.type === VarType.object || item.type === VarType.file) && itemChildren)
passesFilter = itemHasValidChildren || filterVar(item, currSelector)
else
passesFilter = itemHasValidChildren

return {
item,
filteredObj,
passesFilter,
}
})
.filter(({ passesFilter }) => passesFilter)
.map(({ item, filteredObj }) => {
const { children: itemChildren } = item
if (!itemChildren || !filteredObj)
return item

return {
...item,
children: filteredObj.children,
}
})

if (isFile && Array.isArray(childrenResult)) {
if (childrenResult.length === 0) {
childrenResult = OUTPUT_FILE_SUB_VARIABLES.map(key => ({
variable: key,
type: key === 'size' ? VarType.number : VarType.string,
}))
}
}
}
else {
else {
childrenResult = []
}


Завантаження…
Відмінити
Зберегти