mirror of
https://github.com/status-im/MyCrypto.git
synced 2025-02-02 14:23:42 +00:00
aa0f9cd455
* Frameless Electron. Separate electron template. Generecize navigation link. Move nav info to config. * Add controls for language and node, network status to sidebar. * Sticky headers * Move custom node modal into standalone component. Render modals via portal. Add custom node modal opening to electron node list. * Conditional styling based on environment. * Fix active node highlight * Add frame back in, draggable only on OSX, fix sidebar scroll. * Remove panel content after delay. * Adjust window sizes * Style desktop help nav icon * Remove unused var * Move style to param * Remove unused * Update snapshot * Fix oversized stretching, zindex fighting * Make electron work better with various screen sizes * Remove not-working https option for electron * Add beta banner * Fix web footer * Address changes
104 lines
2.9 KiB
TypeScript
104 lines
2.9 KiB
TypeScript
import React from 'react';
|
|
import classnames from 'classnames';
|
|
import translate from 'translations';
|
|
import { navigationLinks } from 'config';
|
|
import NavigationLink from 'components/NavigationLink';
|
|
import LanguageSelect from './LanguageSelect';
|
|
import NodeSelect from './NodeSelect';
|
|
import NetworkStatus from './NetworkStatus';
|
|
import './ElectronNav.scss';
|
|
|
|
interface State {
|
|
panelContent: React.ReactElement<any> | null;
|
|
isPanelOpen: boolean;
|
|
}
|
|
|
|
export default class ElectronNav extends React.Component<{}, State> {
|
|
public state: State = {
|
|
panelContent: null,
|
|
isPanelOpen: false
|
|
};
|
|
|
|
public render() {
|
|
const { panelContent, isPanelOpen } = this.state;
|
|
|
|
return (
|
|
<div
|
|
className={classnames({
|
|
ElectronNav: true,
|
|
'is-panel-open': isPanelOpen
|
|
})}
|
|
>
|
|
<div className="ElectronNav-branding">
|
|
<div className="ElectronNav-branding-logo" />
|
|
<div className="ElectronNav-branding-beta">Beta Release</div>
|
|
</div>
|
|
|
|
<ul className="ElectronNav-links">
|
|
{navigationLinks.map(link => (
|
|
<NavigationLink
|
|
key={link.to}
|
|
link={link}
|
|
isHomepage={link === navigationLinks[0]}
|
|
className="ElectronNavLink"
|
|
/>
|
|
))}
|
|
</ul>
|
|
|
|
<div className="ElectronNav-controls">
|
|
<button className="ElectronNav-controls-btn" onClick={this.openLanguageSelect}>
|
|
Change Language
|
|
<i className="ElectronNav-controls-btn-icon fa fa-arrow-circle-right" />
|
|
</button>
|
|
<button className="ElectronNav-controls-btn" onClick={this.openNodeSelect}>
|
|
Change Network
|
|
<i className="ElectronNav-controls-btn-icon fa fa-arrow-circle-right" />
|
|
</button>
|
|
</div>
|
|
|
|
<div className="ElectronNav-status">
|
|
<NetworkStatus />
|
|
</div>
|
|
|
|
<div className="ElectronNav-panel">
|
|
<button className="ElectronNav-panel-back" onClick={this.closePanel}>
|
|
<i className="ElectronNav-panel-back-icon fa fa-arrow-circle-left" />
|
|
{translate('MODAL_BACK')}
|
|
</button>
|
|
<div className="ElectronNav-panel-content">{panelContent}</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
private openLanguageSelect = () => {
|
|
const panelContent = <LanguageSelect closePanel={this.closePanel} />;
|
|
this.setState({
|
|
panelContent,
|
|
isPanelOpen: true
|
|
});
|
|
};
|
|
|
|
private openNodeSelect = () => {
|
|
const panelContent = <NodeSelect closePanel={this.closePanel} />;
|
|
this.setState({
|
|
panelContent,
|
|
isPanelOpen: true
|
|
});
|
|
};
|
|
|
|
private closePanel = () => {
|
|
const { panelContent } = this.state;
|
|
|
|
// Start closing panel
|
|
this.setState({ isPanelOpen: false });
|
|
|
|
// Remove content when out of sight
|
|
setTimeout(() => {
|
|
if (this.state.panelContent === panelContent) {
|
|
this.setState({ panelContent: null });
|
|
}
|
|
}, 300);
|
|
};
|
|
}
|