ability to select same type sub item by preserving children of both f… (#23002)
This commit is contained in:
@@ -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,
|
||||
@@ -140,16 +147,54 @@ const findExceptVarInObject = (obj: any, filterVar: (payload: Var, selector: Val
|
||||
childrenResult = findExceptVarInStructuredOutput(children, filterVar)
|
||||
}
|
||||
else if (Array.isArray(children)) {
|
||||
childrenResult = children.filter((item: Var) => {
|
||||
childrenResult = children
|
||||
.map((item: Var) => {
|
||||
const { children: itemChildren } = item
|
||||
const currSelector = [...value_selector, item.variable]
|
||||
|
||||
if (!itemChildren)
|
||||
return filterVar(item, currSelector)
|
||||
if (!itemChildren) {
|
||||
return {
|
||||
item,
|
||||
filteredObj: null,
|
||||
passesFilter: filterVar(item, currSelector),
|
||||
}
|
||||
}
|
||||
|
||||
const filteredObj = findExceptVarInObject(item, filterVar, currSelector, false) // File doesn't contain file children
|
||||
return filteredObj.children && (filteredObj.children as Var[])?.length > 0
|
||||
const filteredObj = findExceptVarInObject(item, filterVar, currSelector, false)
|
||||
const itemHasValidChildren = hasValidChildren(filteredObj.children)
|
||||
|
||||
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 {
|
||||
childrenResult = []
|
||||
|
Reference in New Issue
Block a user