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