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'
|
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 => {
|
const inputVarTypeToVarType = (type: InputVarType): VarType => {
|
||||||
return ({
|
return ({
|
||||||
[InputVarType.number]: VarType.number,
|
[InputVarType.number]: VarType.number,
|
||||||
@@ -140,16 +147,54 @@ const findExceptVarInObject = (obj: any, filterVar: (payload: Var, selector: Val
|
|||||||
childrenResult = findExceptVarInStructuredOutput(children, filterVar)
|
childrenResult = findExceptVarInStructuredOutput(children, filterVar)
|
||||||
}
|
}
|
||||||
else if (Array.isArray(children)) {
|
else if (Array.isArray(children)) {
|
||||||
childrenResult = children.filter((item: Var) => {
|
childrenResult = children
|
||||||
|
.map((item: Var) => {
|
||||||
const { children: itemChildren } = item
|
const { children: itemChildren } = item
|
||||||
const currSelector = [...value_selector, item.variable]
|
const currSelector = [...value_selector, item.variable]
|
||||||
|
|
||||||
if (!itemChildren)
|
if (!itemChildren) {
|
||||||
return filterVar(item, currSelector)
|
return {
|
||||||
|
item,
|
||||||
|
filteredObj: null,
|
||||||
|
passesFilter: filterVar(item, currSelector),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const filteredObj = findExceptVarInObject(item, filterVar, currSelector, false) // File doesn't contain file children
|
const filteredObj = findExceptVarInObject(item, filterVar, currSelector, false)
|
||||||
return filteredObj.children && (filteredObj.children as Var[])?.length > 0
|
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 {
|
else {
|
||||||
childrenResult = []
|
childrenResult = []
|
||||||
|
Reference in New Issue
Block a user