import React, { Component } from 'react' import PropTypes from 'prop-types' import Button from '@material-ui/core/Button' import TextField from '../../text-field' import getCaretCoordinates from 'textarea-caret' import { EventEmitter } from 'events' import Mascot from '../../mascot' import { DEFAULT_ROUTE } from '../../../routes' export default class UnlockPage extends Component { static contextTypes = { t: PropTypes.func, } static propTypes = { history: PropTypes.object, isUnlocked: PropTypes.bool, onImport: PropTypes.func, onRestore: PropTypes.func, onSubmit: PropTypes.func, } constructor (props) { super(props) this.state = { password: '', error: null, } this.submitting = false this.animationEventEmitter = new EventEmitter() } componentWillMount () { const { isUnlocked, history } = this.props if (isUnlocked) { history.push(DEFAULT_ROUTE) } } handleSubmit = async event => { event.preventDefault() event.stopPropagation() const { password } = this.state const { onSubmit } = this.props if (password === '' || this.submitting) { return } this.setState({ error: null }) this.submitting = true try { await onSubmit(password) } catch ({ message }) { this.setState({ error: message }) this.submitting = false } } handleInputChange ({ target }) { this.setState({ password: target.value, error: null }) // tell mascot to look at page action const element = target const boundingRect = element.getBoundingClientRect() const coordinates = getCaretCoordinates(element, element.selectionEnd) this.animationEventEmitter.emit('point', { x: boundingRect.left + coordinates.left - element.scrollLeft, y: boundingRect.top + coordinates.top - element.scrollTop, }) } renderSubmitButton () { const style = { backgroundColor: '#f7861c', color: 'white', marginTop: '20px', height: '60px', fontWeight: '400', boxShadow: 'none', borderRadius: '4px', } return ( ) } render () { const { password, error } = this.state const { t } = this.context const { onImport, onRestore } = this.props return (