diff --git a/packages/core/upload/admin/src/components/SelectTree/Option.js b/packages/core/upload/admin/src/components/SelectTree/Option.js index 1d6c6ff31d..1e34a81794 100644 --- a/packages/core/upload/admin/src/components/SelectTree/Option.js +++ b/packages/core/upload/admin/src/components/SelectTree/Option.js @@ -15,21 +15,31 @@ const ToggleButton = styled.button` margin-left: auto; `; -const Option = ({ children, data, onToggle, isOpen, maxDisplayDepth, ...props }) => { - const hasChildren = data?.children?.length > 0; - const { depth, value } = data; - const normalizedDepth = Math.min(depth, maxDisplayDepth); +const Option = ({ children, data, selectProps, ...props }) => { + const { depth, value, children: options } = data; + const { maxDisplayDepth, openValues, onOptionToggle } = selectProps; + const isOpen = openValues.includes(value); return ( <> - {children} + + {children} + - {hasChildren && ( - onToggle(event, value)}> + {options?.length > 0 && ( + { + event.preventDefault(); + event.stopPropagation(); + + onOptionToggle(value); + }} + > )} @@ -39,17 +49,15 @@ const Option = ({ children, data, onToggle, isOpen, maxDisplayDepth, ...props }) ); }; -Option.defaultProps = { - isOpen: false, - maxDisplayDepth: 5, -}; - Option.propTypes = { children: PropTypes.arrayOf(PropTypes.element).isRequired, data: PropTypes.object.isRequired, - isOpen: PropTypes.bool, - maxDisplayDepth: PropTypes.number, onToggle: PropTypes.func.isRequired, + selectProps: PropTypes.shape({ + maxDisplayDepth: PropTypes.number, + openValues: PropTypes.arrayOf([PropTypes.string, PropTypes.number]), + onOptionToggle: PropTypes.func, + }).isRequired, }; export default Option; diff --git a/packages/core/upload/admin/src/components/SelectTree/SelectTree.js b/packages/core/upload/admin/src/components/SelectTree/SelectTree.js index db6e0a2d02..af45121a3a 100644 --- a/packages/core/upload/admin/src/components/SelectTree/SelectTree.js +++ b/packages/core/upload/admin/src/components/SelectTree/SelectTree.js @@ -32,32 +32,24 @@ const SelectTree = ({ options: defaultOptions, maxDisplayDepth, defaultValue, .. }); }, [openValues, flatDefaultOptions, optionsFiltered]); - function handleToggle(e, value) { - e.preventDefault(); - e.stopPropagation(); - + const handleToggle = value => { if (openValues.includes(value)) { setOpenValues(prev => prev.filter(prevData => prevData !== value)); } else { setOpenValues(prev => [...prev, value]); } - } + }; return (