/* @flow */ import React, { Component } from 'react'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import styled from 'styled-components'; import colors from 'config/colors'; import { CSSTransition, Transition } from 'react-transition-group'; import { UI } from 'trezor-connect'; import { default as ModalActions } from 'actions/ModalActions'; import { default as ReceiveActions } from 'actions/ReceiveActions'; import * as RECEIVE from 'actions/constants/receive'; import * as MODAL from 'actions/constants/modal'; import * as CONNECT from 'actions/constants/TrezorConnect'; import type { MapStateToProps, MapDispatchToProps } from 'react-redux'; import type { State, Dispatch } from 'flowtype'; import Pin from 'components/modals/Pin'; import InvalidPin from 'components/modals/InvalidPin'; import Passphrase from 'components/modals/Passphrase'; import PassphraseType from 'components/modals/PassphraseType'; import ConfirmSignTx from 'components/modals/ConfirmSignTx'; import ConfirmAddress, { ConfirmUnverifiedAddress } from 'components/modals/ConfirmAddress'; import ForgetDevice from 'components/modals/device/Forget'; import RememberDevice from 'components/modals/device/Remember'; import DuplicateDevice from 'components/modals/device/Duplicate'; type OwnProps = { } type StateProps = { modal: $ElementType, accounts: $ElementType, devices: $ElementType, connect: $ElementType, selectedAccount: $ElementType, sendForm: $ElementType, receive: $ElementType, localStorage: $ElementType, wallet: $ElementType, } type DispatchProps = { modalActions: typeof ModalActions, receiveActions: typeof ReceiveActions, } export type Props = StateProps & DispatchProps; const duration = 300; const Fade = ({ children, ...props }) => ( { children } ); const ModalContainer = styled.div` position: fixed; z-index: 10000; width: 100%; height: 100%; top: 0px; left: 0px; background: rgba(0, 0, 0, 0.35); display: flex; flex-direction: column; align-items: center; overflow: auto; padding: 20px; `; const ModalWindow = styled.div` margin: auto; position: relative; border-radius: 4px; background-color: ${colors.WHITE}; text-align: center; `; class Modal extends Component { render() { if (!this.props.modal.opened) return null; const { opened } = this.props.modal; const windowType = CONNECT.TRY_TO_DUPLICATE; let component = null; switch (windowType) { case UI.REQUEST_PIN: component = (); break; case UI.INVALID_PIN: component = (); break; case UI.REQUEST_PASSPHRASE: component = (); break; case 'ButtonRequest_SignTx': component = (); break; // case "ButtonRequest_Address" : case 'ButtonRequest_PassphraseType': component = (); break; case RECEIVE.REQUEST_UNVERIFIED: component = (); break; case CONNECT.REMEMBER_REQUEST: component = (); break; case CONNECT.FORGET_REQUEST: component = (); break; case CONNECT.TRY_TO_DUPLICATE: component = (); break; default: null; } let ch = null; if (opened) { ch = ( { component } ); } return ch; } } const mapStateToProps: MapStateToProps = (state: State, own: OwnProps): StateProps => ({ modal: state.modal, accounts: state.accounts, devices: state.devices, connect: state.connect, selectedAccount: state.selectedAccount, sendForm: state.sendForm, receive: state.receive, localStorage: state.localStorage, wallet: state.wallet, }); const mapDispatchToProps: MapDispatchToProps = (dispatch: Dispatch): DispatchProps => ({ modalActions: bindActionCreators(ModalActions, dispatch), receiveActions: bindActionCreators(ReceiveActions, dispatch), }); // export default connect(mapStateToProps, mapDispatchToProps)(Modal); export default withRouter( connect(mapStateToProps, mapDispatchToProps)(Modal), );