MyCrypto/common/components/Footer/ThemeToggle.tsx
William O'Beirne bf6a122e38 Night Mode Theme (#1896)
* Initial changes to define theme maps, color function, and convert all global styles.

* More global styles.

* All styles converted, colors uncertain.

* Fix tabs, temporary theme toggle button.

* Color refinements

* Color network selector, introduce shade function

* Make palette page

* Add theme button and minor styling to nav

* Blueify dark theme

* A bunch of color adjustments to work better with dark theme

* Fix tables

* Fix wallet decrypt colors

* More misc fixes

* Fix up electron colors

* Convert web theme to redux state / action

* Theme toggle in app, prevent rerenders

* Get rid of all variables, fix selects

* Fix conf modal, modal close styles

* Fix test

* Adjust swap colors

* Check in breaking out component, changing icons

* Check in progress

* Theme toggle in footer. New icons

* Prevent rerender on theme change

* Fix up outstanding merge conflicts

* Fix generate colors to be dark mode friendly

* Reduce swap color intensity

* Make disabled buttons darker in dark mode

* Reduce button size by 25%
2018-06-26 23:51:42 -05:00

44 lines
1.0 KiB
TypeScript

import React from 'react';
import { connect } from 'react-redux';
import { Theme } from 'config';
import { getTheme, changeTheme } from 'features/config';
import { AppState } from 'features/reducers';
import './ThemeToggle.scss';
interface ActionProps {
changeTheme: typeof changeTheme;
}
interface StateProps {
theme: ReturnType<typeof getTheme>;
}
type Props = ActionProps & StateProps;
class ThemeToggle extends React.Component<Props> {
public render() {
return (
<button className="ThemeToggle" onClick={this.toggleTheme} aria-hidden={true}>
<div className="ThemeToggle-control">
<span className="ThemeToggle-control-icon is-dark" />
<span className="ThemeToggle-control-icon is-light" />
</div>
</button>
);
}
private toggleTheme = () => {
const theme = this.props.theme === Theme.LIGHT ? Theme.DARK : Theme.LIGHT;
this.props.changeTheme(theme);
};
}
export default connect(
(state: AppState) => ({
theme: getTheme(state)
}),
{
changeTheme
}
)(ThemeToggle);