diff --git a/src/components/Dashboard/common/ObjectSelect.jsx b/src/components/Dashboard/common/ObjectSelect.jsx index 33f1e94..1999dea 100644 --- a/src/components/Dashboard/common/ObjectSelect.jsx +++ b/src/components/Dashboard/common/ObjectSelect.jsx @@ -1,4 +1,11 @@ -import { useEffect, useState, useContext, useCallback, useMemo } from 'react' +import { + useEffect, + useState, + useContext, + useCallback, + useMemo, + useRef +} from 'react' import PropTypes from 'prop-types' import { TreeSelect, Space, Button, Input } from 'antd' import ReloadIcon from '../../Icons/ReloadIcon' @@ -72,14 +79,16 @@ const ObjectSelect = ({ }) return { title: ( - +
+ +
), value: object._id, key: object._id, @@ -199,7 +208,7 @@ const ObjectSelect = ({ return prev }) } - }, [objectPropertiesTree, properties, type, buildTreeData]) + }, [objectPropertiesTree, properties, buildTreeData]) useEffect(() => { if (value && typeof value === 'object' && value !== null && !initialized) { @@ -236,6 +245,24 @@ const ObjectSelect = ({ token ]) + const prevValuesRef = useRef({ type, masterFilter }) + + useEffect(() => { + const prevValues = prevValuesRef.current + + // Deep comparison for objects, simple comparison for primitives + const hasChanged = + prevValues.type !== type || + JSON.stringify(prevValues.masterFilter) !== JSON.stringify(masterFilter) + + if (hasChanged) { + setObjectPropertiesTree({}) + setTreeData([]) + setInitialized(false) + prevValuesRef.current = { type, masterFilter } + } + }, [type, masterFilter]) + // --- Error UI --- if (error) { return (