import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage, defineMessages} from 'react-intl'; import {connect} from 'react-redux'; import check from './check.svg'; import dropdownCaret from './dropdown-caret.svg'; import {MenuItem, Submenu} from '../menu/menu.jsx'; import {ACCENT_BLUE, ACCENT_MAP, ACCENT_PURPLE, ACCENT_RED, ACCENT_RAINBOW, Theme} from '../../lib/themes/index.js'; import {openAccentMenu, accentMenuOpen, closeSettingsMenu} from '../../reducers/menus.js'; import {setTheme} from '../../reducers/theme.js'; import {persistTheme} from '../../lib/themes/themePersistance.js'; import rainbowIcon from './tw-accent-rainbow.svg'; import styles from './settings-menu.css'; const options = defineMessages({ [ACCENT_RED]: { defaultMessage: 'Red', description: 'Name of the red color scheme, used by TurboWarp by default.', id: 'tw.accent.red' }, [ACCENT_PURPLE]: { defaultMessage: 'Purple', description: 'Name of the purple color scheme. Matches modern Scratch.', id: 'tw.accent.purple' }, [ACCENT_BLUE]: { defaultMessage: 'Blue', description: 'Name of the blue color scheme. Matches Scratch before the high contrast update.', id: 'tw.accent.blue' }, [ACCENT_RAINBOW]: { defaultMessage: 'Rainbow', description: 'Name of color scheme that uses a rainbow.', id: 'tw.accent.rainbow' } }); const icons = { [ACCENT_RAINBOW]: rainbowIcon }; const ColorIcon = props => ( icons[props.id] ? ( ) : (
) ); ColorIcon.propTypes = { id: PropTypes.string }; const AccentMenuItem = props => (
); AccentMenuItem.propTypes = { id: PropTypes.string, isSelected: PropTypes.bool, onClick: PropTypes.func }; const AccentThemeMenu = ({ isOpen, isRtl, onChangeTheme, onOpen, theme }) => (
{Object.keys(options).map(item => ( onChangeTheme(theme.set('accent', item))} /> ))}
); AccentThemeMenu.propTypes = { isOpen: PropTypes.bool, isRtl: PropTypes.bool, onChangeTheme: PropTypes.func, onOpen: PropTypes.func, theme: PropTypes.instanceOf(Theme) }; const mapStateToProps = state => ({ isOpen: accentMenuOpen(state), isRtl: state.locales.isRtl, theme: state.scratchGui.theme.theme }); const mapDispatchToProps = dispatch => ({ onChangeTheme: theme => { dispatch(setTheme(theme)); dispatch(closeSettingsMenu()); persistTheme(theme); }, onOpen: () => dispatch(openAccentMenu()) }); export default connect( mapStateToProps, mapDispatchToProps )(AccentThemeMenu);