import React from 'react'; import Actions from '../../../src/flux/actions' import {Flexbox, RetinaImg} from 'nylas-component-kit'; import ThemeOption from './theme-option'; class ThemePicker extends React.Component { static displayName = 'ThemePicker'; constructor(props) { super(props); this.themes = NylasEnv.themes; this.state = this._getState(); } componentDidMount() { this.disposable = this.themes.onDidChangeActiveThemes(() => { this.setState(this._getState()); }); } componentWillUnmount() { this.disposable.dispose(); } _getState() { return { themes: this.themes.getLoadedThemes(), activeTheme: this.themes.getActiveTheme().name, } } _setActiveTheme(theme) { const prevActiveTheme = this.state.activeTheme; this.themes.setActiveTheme(theme); this._rewriteIFrame(prevActiveTheme, theme); } _rewriteIFrame(prevActiveTheme, activeTheme) { const prevActiveThemeDoc = document.querySelector(`.theme-preview-${prevActiveTheme}`).contentDocument; const prevActiveElement = prevActiveThemeDoc.querySelector(".theme-option.active-true"); prevActiveElement.className = "theme-option active-false"; const activeThemeDoc = document.querySelector(`.theme-preview-${activeTheme}`).contentDocument; const activeElement = activeThemeDoc.querySelector(".theme-option.active-false"); activeElement.className = "theme-option active-true"; } _renderThemeOptions() { return this.state.themes.map((theme) => this._setActiveTheme(theme.name)} /> ); } render() { return (
Actions.closeModal()} />

Themes

Click any theme to apply:
{this._renderThemeOptions()}
Create a Theme
); } } export default ThemePicker;