import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Icon } from '@ohif/ui'; import './PanelSection.css'; import LoadingIndicator from '../LoadingIndicator/LoadingIndicator'; const PanelSection = ({ title, children, visible = false, expanded = false, loading = false, hideVisibleButton = false, onVisibilityChange = () => { }, onExpandChange = () => { } }) => { const [isExpanded, setIsExpanded] = useState(expanded); const [isVisible, setIsVisible] = useState(visible); useEffect(() => { setIsVisible(visible); }, [visible]); return (
{title}
{!hideVisibleButton && ( { const newVisibility = !isVisible; setIsVisible(newVisibility); onVisibilityChange(newVisibility); }} /> )} { const newExpandValue = !isExpanded; setIsExpanded(newExpandValue); onExpandChange(newExpandValue); }} />
{loading && isExpanded && } {children}
); }; PanelSection.propTypes = { title: PropTypes.string.isRequired, children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired, visible: PropTypes.bool, expanded: PropTypes.bool, onVisibilityChange: PropTypes.func }; PanelSection.defaultProps = { visible: false, expanded: false, onVisibilityChange: () => { } }; export default PanelSection;