Files
cosmos-explorer/src/Explorer/Controls/CollapsiblePanel/CollapsiblePanel.tsx
Laurent Nguyen 1bf4683894 Make Data Explorer work on node v18 (#1654)
* Upgrade packages to enable npm i with node 18

* Fix crypto and querystring issue

* Fix webpack errors during npm start

* Upgrade monaco editor. Fix alias in webconfig

* Remove deprecated file-loader. Upgrade webpack to latest.

* Fix format

* Upgrade webpack, eslint and typescript

* Update p-retry and fluentui packages

* Revert monaco package upgrade

* Fix notebook compile errors

* Fix lint errors

* Update jest snapshots

* Fix unit tests

* Update node version to 18

* Fix compile error

* Fix compile error

* Fix format

* Turn off warning overlay for webpack devServer

* Fix format

* Re-add monaco webpack plugin and upgrade monaco-editor

* Update package-lock.json

* Fix build issue

* Move MonacoWebpackPlugin to previous place in webpack.config.js

* update package-lock.json

* Fix package-lock.json

* Update package-lock.json

* Fix export ChoiceItem not found warning for self serve. Remove warning turn off in webpack config.

* Update checkout and setup actions in for ci tests

* Disable Gallery callout

* Fix disable gallery header

* Totally disable New gallery callout

* Upgrade all github actions to latest
2023-12-13 10:24:40 -08:00

95 lines
3.0 KiB
TypeScript

/**
* Collapsible React component
* Note:
* If onCollapsedChanged() is triggered, parent container is responsible for:
* - updating isCollapsed property
* - calling render()
*/
import * as React from "react";
import LeftArrowIcon from "../../../../images/imgarrowlefticon.svg";
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
export interface CollapsiblePanelProps {
collapsedTitle: string;
expandedTitle: string;
isCollapsed: boolean;
onCollapsedChanged: (newValue: boolean) => void;
collapseToLeft?: boolean;
children: JSX.Element | JSX.Element[];
}
export class CollapsiblePanel extends React.Component<CollapsiblePanelProps> {
public render(): JSX.Element {
return (
<div className={`collapsiblePanel ${this.props.isCollapsed ? "paneCollapsed" : ""}`}>
{!this.props.isCollapsed ? this.getExpandedFragment() : this.getCollapsedFragment()}
</div>
);
}
private toggleCollapse(): void {
this.props.onCollapsedChanged(!this.props.isCollapsed);
}
private getCollapsedFragment(): JSX.Element {
return (
<div className="collapsibleNav nav">
<ul className="nav">
<li className="collapsedBtn collapseExpandButton">
<AccessibleElement
className="collapsedIconContainer"
as="span"
onActivated={() => this.toggleCollapse()}
aria-label="Expand panel"
>
<img
className={`collapsedIcon ${!this.props.isCollapsed ? "expanded" : ""} ${
this.props.collapseToLeft ? "iconMirror" : ""
}`}
src={LeftArrowIcon}
alt="Expand"
/>
</AccessibleElement>
<AccessibleElement
className="rotatedInner"
as="span"
onActivated={() => this.toggleCollapse()}
aria-label="Expand panel"
>
<span>{this.props.collapsedTitle}</span>
</AccessibleElement>
</li>
</ul>
</div>
);
}
private getExpandedFragment(): JSX.Element {
return (
<React.Fragment>
<div className="panelHeader">
<AccessibleElement
as="span"
className={`collapsedIconContainer collapseExpandButton ${this.props.collapseToLeft ? "pull-right" : ""}`}
onActivated={() => this.toggleCollapse()}
aria-label="Collapse panel"
>
<img
className={`collapsedIcon imgVerticalAlignment ${!this.props.isCollapsed ? "expanded" : ""} ${
this.props.collapseToLeft ? "iconMirror" : ""
}`}
src={LeftArrowIcon}
alt="Collapse"
/>
</AccessibleElement>
<span className={`expandedTitle ${!this.props.collapseToLeft ? "iconSpacer" : ""}`}>
{this.props.expandedTitle}
</span>
</div>
<div className="panelContent">{this.props.children}</div>
</React.Fragment>
);
}
}