import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import Modal from '/imports/ui/components/modal/simple/component'; import Button from '/imports/ui/components/button/component'; import { GithubPicker } from 'react-color'; import { defineMessages, injectIntl } from 'react-intl'; import { withModalMounter } from '/imports/ui/components/modal/service'; import { styles } from './styles.scss'; const DEFAULT_VALUE = 'select'; const DEFAULT_KEY = -1; const DEFAULT_INDEX = 0; const FONT_FAMILIES = ['Arial', 'Calibri', 'Times New Roman', 'Sans-serif']; const FONT_SIZES = ['12px', '14px', '18px', '24px', '32px', '42px']; const COLORS = [ '#000000', '#7A7A7A', '#FF0000', '#FF8800', '#88FF00', '#FFFFFF', '#00FFFF', '#0000FF', '#8800FF', '#FF00FF', ]; const intlMessages = defineMessages({ closeLabel: { id: 'app.captions.menu.closeLabel', description: 'Label for closing captions menu', }, title: { id: 'app.captions.menu.title', description: 'Title for the closed captions menu', }, start: { id: 'app.captions.menu.start', description: 'Write closed captions', }, select: { id: 'app.captions.menu.select', description: 'Select closed captions available language', }, backgroundColor: { id: 'app.captions.menu.backgroundColor', description: 'Select closed captions background color', }, fontColor: { id: 'app.captions.menu.fontColor', description: 'Select closed captions font color', }, fontFamily: { id: 'app.captions.menu.fontFamily', description: 'Select closed captions font family', }, fontSize: { id: 'app.captions.menu.fontSize', description: 'Select closed captions font size', }, cancelLabel: { id: 'app.captions.menu.cancelLabel', description: 'Cancel button label', }, preview: { id: 'app.captions.menu.previewLabel', description: 'Preview area label', }, }); const propTypes = { activateCaptions: PropTypes.func.isRequired, getCaptionsSettings: PropTypes.func.isRequired, closeModal: PropTypes.func.isRequired, ownedLocales: PropTypes.arrayOf(PropTypes.object).isRequired, intl: PropTypes.shape({ formatMessage: PropTypes.func.isRequired, }).isRequired, }; class ReaderMenu extends PureComponent { constructor(props) { super(props); const { backgroundColor, fontColor, fontFamily, fontSize, } = props.getCaptionsSettings(); this.state = { locale: null, backgroundColor, fontColor, fontFamily, fontSize, displayBackgroundColorPicker: false, displayFontColorPicker: false, }; this.handleSelectChange = this.handleSelectChange.bind(this); this.handleColorPickerClick = this.handleColorPickerClick.bind(this); this.handleCloseColorPicker = this.handleCloseColorPicker.bind(this); this.handleColorChange = this.handleColorChange.bind(this); this.handleLocaleChange = this.handleLocaleChange.bind(this); this.handleStart = this.handleStart.bind(this); this.getPreviewStyle = this.getPreviewStyle.bind(this); } getPreviewStyle() { const { backgroundColor, fontColor, fontFamily, fontSize, } = this.state; return { fontFamily, fontSize, color: fontColor, background: backgroundColor, }; } handleColorPickerClick(fieldname) { const obj = {}; // eslint-disable-next-line react/destructuring-assignment obj[fieldname] = !this.state[fieldname]; this.setState(obj); } handleCloseColorPicker() { this.setState({ displayBackgroundColorPicker: false, displayFontColorPicker: false, }); } handleColorChange(fieldname, color) { const obj = this.state; obj[fieldname] = color.hex; this.setState(obj); this.handleCloseColorPicker(); } handleLocaleChange(event) { this.setState({ locale: event.target.value }); } handleSelectChange(fieldname, options, event) { const obj = {}; obj[fieldname] = options[event.target.value]; this.setState(obj); } handleStart() { const { closeModal, activateCaptions } = this.props; const { locale, backgroundColor, fontColor, fontFamily, fontSize, } = this.state; const settings = { backgroundColor, fontColor, fontFamily, fontSize, }; activateCaptions(locale, settings); closeModal(); } render() { const { intl, ownedLocales, closeModal, } = this.props; const { backgroundColor, displayBackgroundColorPicker, displayFontColorPicker, fontColor, fontFamily, fontSize, locale, } = this.state; return (
{intl.formatMessage(intlMessages.title)}
{!locale ? null : (
{intl.formatMessage(intlMessages.fontColor)}
{displayFontColorPicker ? (
) : null }
{intl.formatMessage(intlMessages.backgroundColor)}
{displayBackgroundColorPicker ? (
) : null }
{intl.formatMessage(intlMessages.fontFamily)}
{intl.formatMessage(intlMessages.fontSize)}
{intl.formatMessage(intlMessages.preview)}
AaBbCc
)}
); } } ReaderMenu.propTypes = propTypes; export default injectIntl(withModalMounter(ReaderMenu));