mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-21 01:41:31 +00:00
* 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
95 lines
3.0 KiB
TypeScript
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>
|
|
);
|
|
}
|
|
}
|