Bug fix: re-render tree when type, masterFiter etc changes.

This commit is contained in:
Tom Butcher 2025-12-27 13:50:17 +00:00
parent 556b16a5dc
commit 38cafdb4a4

View File

@ -47,6 +47,8 @@ const ObjectSelect = ({
const [objectList, setObjectList] = useState([])
const [treeSelectValue, setTreeSelectValue] = useState(null)
const [initialLoading, setInitialLoading] = useState(true)
const [expandedKeys, setExpandedKeys] = useState([])
const [treeVersion, setTreeVersion] = useState(0)
const valueRef = useRef(null)
// Refs to track value changes
@ -211,6 +213,7 @@ const ObjectSelect = ({
objectType={type}
objectData={object}
isEditing={false}
showHyperlink={false}
style={{ top: '-0.5px' }}
/>
</div>
@ -246,6 +249,15 @@ const ObjectSelect = ({
value: valueString
})
var nodeChildren = buildTreeData(
children,
pIdx + 1,
parentKeys.concat(valueString),
newFilterPath
)
if (nodeChildren.length == 0) {
nodeChildren = undefined
}
const modelProperty = getModelProperty(type, property)
return {
title: <ObjectProperty {...modelProperty} value={value} />,
@ -257,12 +269,7 @@ const ObjectSelect = ({
filterPath: newFilterPath,
selectable: false,
isLeaf: false,
children: buildTreeData(
children,
pIdx + 1,
parentKeys.concat(valueString),
newFilterPath
)
children: nodeChildren
}
})
.filter(Boolean)
@ -272,6 +279,7 @@ const ObjectSelect = ({
// --- loadData for async loading on expand ---
const loadData = async (node) => {
console.log('loading data for node', node)
// node.property is the property name, node.value is the value key
if (!node.property) return
if (type == 'unknown') return
@ -384,24 +392,39 @@ const ObjectSelect = ({
// console.log('fullValue', fullValue)
// Build a new filter from value's properties that are in the properties list
const valueFilter = { ...filter }
const pathKeys = []
const parentKeys = []
properties.forEach((prop) => {
if (Object.prototype.hasOwnProperty.call(fullValue, prop)) {
const filterValue = fullValue[prop]
let valueString = filterValue
if (
filterValue &&
typeof filterValue === 'object' &&
filterValue._id
) {
valueFilter[prop] = filterValue._id
valueString = filterValue._id
} else if (filterValue?.name) {
valueFilter[prop] = filterValue.name
valueString = filterValue.name
} else if (Array.isArray(filterValue)) {
valueFilter[prop] = filterValue.join(',')
valueString = filterValue.join(',')
} else {
valueFilter[prop] = filterValue
valueString = filterValue
}
// Build the path key for this property level
const nodeKey = parentKeys
.concat(prop + ':' + valueString)
.join('-')
pathKeys.push(nodeKey)
parentKeys.push(valueString)
}
})
// Expand the path to the object
setExpandedKeys(pathKeys)
// Fetch with the new filter
handleFetchObjectsProperties(valueFilter)
// console.log('setting treeSelectValue', valueRef.current._id)
@ -462,6 +485,8 @@ const ObjectSelect = ({
setObjectPropertiesTree({})
setObjectList([])
setTreeData([])
setTreeVersion((v) => v + 1)
setExpandedKeys([])
setInitialized(false)
onTreeSelectChange(null)
setTreeSelectValue(null)
@ -529,8 +554,11 @@ const ObjectSelect = ({
// --- Main TreeSelect UI ---
return (
<TreeSelect
key={treeVersion}
treeDataSimpleMode={false}
treeDefaultExpandAll={true}
treeExpandedKeys={expandedKeys}
onTreeExpand={setExpandedKeys}
treeData={treeData}
showSearch={showSearch}
multiple={multiple}