diff --git a/packages/grafana-ui/src/components/Collapse/CollapsableSection.tsx b/packages/grafana-ui/src/components/Collapse/CollapsableSection.tsx index caab6779ff1..ac5852785a3 100644 --- a/packages/grafana-ui/src/components/Collapse/CollapsableSection.tsx +++ b/packages/grafana-ui/src/components/Collapse/CollapsableSection.tsx @@ -22,6 +22,7 @@ export interface Props { labelId?: string; headerDataTestId?: string; contentDataTestId?: string; + unmountContentWhenClosed?: boolean; } export const CollapsableSection = ({ @@ -35,6 +36,7 @@ export const CollapsableSection = ({ loading = false, headerDataTestId, contentDataTestId, + unmountContentWhenClosed = true, }: Props) => { const [open, toggleOpen] = useState(isOpen); const styles = useStyles2(collapsableSectionStyles); @@ -54,6 +56,18 @@ export const CollapsableSection = ({ const buttonLabelId = labelId ?? `collapse-label-${id}`; + const content = ( +
+ {children} +
+ ); + return ( <> {/* disabling the a11y rules here as the button handles keyboard interactions */} @@ -79,15 +93,7 @@ export const CollapsableSection = ({ {label} - {open && ( -
- {children} -
- )} + {unmountContentWhenClosed ? open && content : content} ); }; @@ -119,6 +125,9 @@ const collapsableSectionStyles = (theme: GrafanaTheme2) => ({ content: css({ padding: `${theme.spacing(2)} 0`, }), + contentHidden: css({ + display: 'none', + }), spinner: css({ display: 'flex', alignItems: 'center',