import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; import { FormattedMessage as Message } from 'react-intl'; import classNames from 'classnames'; import Helmet from 'react-helmet'; import buttons from 'components/ui/buttons.scss'; import messages from './Finish.messages'; import styles from './finish.scss'; class Finish extends Component { static displayName = 'Finish'; static propTypes = { appName: PropTypes.string.isRequired, code: PropTypes.string.isRequired, displayCode: PropTypes.bool, success: PropTypes.bool }; state = { isCopySupported: document.queryCommandSupported && document.queryCommandSupported('copy') }; render() { const {appName, code, state, displayCode, success} = this.props; const {isCopySupported} = this.state; const authData = JSON.stringify({ auth_code: code, state: state }); history.pushState(null, null, `#${authData}`); return (
{success ? (
{appName}) }} />
{displayCode ? (
{code}
{isCopySupported ? ( ) : ( '' )}
) : (
)}
) : (
{appName}) }} />
)}
); } handleCopyClick = (event) => { event.preventDefault(); // http://stackoverflow.com/a/987376/5184751 try { const selection = window.getSelection(); const range = document.createRange(); range.selectNodeContents(this.code); selection.removeAllRanges(); selection.addRange(range); const successful = document.execCommand('copy'); selection.removeAllRanges(); // TODO: было бы ещё неплохо сделать какую-то анимацию, вроде "Скопировано", // ибо сейчас после клика как-то неубедительно, скопировалось оно или нет console.log('Copying text command was ' + (successful ? 'successful' : 'unsuccessful')); } catch (err) {} }; setCode = (el) => { this.code = el; }; } export default connect(({auth}) => ({ appName: auth.client.name, code: auth.oauth.code, displayCode: auth.oauth.displayCode, state: auth.oauth.state, success: auth.oauth.success }))(Finish);