From 24900caed676dccf2c189b543f9bc4eb4fe48caa Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Tue, 2 Jul 2019 11:31:05 +0200 Subject: [PATCH] Add input validation component to react [MAILPOET-1809] --- assets/css/src/components/_importExport.scss | 1 + .../src/subscribers/importExport/import.jsx | 6 +++- .../import/step_input_validation.jsx | 30 ++++++++++++++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/assets/css/src/components/_importExport.scss b/assets/css/src/components/_importExport.scss index f888dd577a..047f0f39eb 100644 --- a/assets/css/src/components/_importExport.scss +++ b/assets/css/src/components/_importExport.scss @@ -126,6 +126,7 @@ tr { } .mailpoet_method_selection_step { + align-items: flex-start; display: flex; flex-direction: column; diff --git a/assets/js/src/subscribers/importExport/import.jsx b/assets/js/src/subscribers/importExport/import.jsx index b56969cba1..65b0dd4e8a 100644 --- a/assets/js/src/subscribers/importExport/import.jsx +++ b/assets/js/src/subscribers/importExport/import.jsx @@ -1,8 +1,11 @@ import React, { useState } from 'react'; import ReactDOM from 'react-dom'; -import { HashRouter, Switch, Route, Redirect } from 'react-router-dom'; +import { + HashRouter, Switch, Route, Redirect, +} from 'react-router-dom'; import StepMethodSelection from './import/step_method_selection.jsx'; +import StepInputValidation from './import/step_input_validation.jsx'; const container = document.getElementById('import_container'); @@ -12,6 +15,7 @@ const ImportSubscribers = () => { } /> + } /> } /> diff --git a/assets/js/src/subscribers/importExport/import/step_input_validation.jsx b/assets/js/src/subscribers/importExport/import/step_input_validation.jsx index 6c640b1123..4ac6026912 100644 --- a/assets/js/src/subscribers/importExport/import/step_input_validation.jsx +++ b/assets/js/src/subscribers/importExport/import/step_input_validation.jsx @@ -1,4 +1,5 @@ import React, { Component } from 'react'; +import { withRouter } from 'react-router-dom'; import PropTypes from 'prop-types'; import ReactStringReplace from 'react-string-replace'; import MailPoet from 'mailpoet'; @@ -48,6 +49,12 @@ class StepInputValidation extends Component { }; } + componentDidMount() { + if (typeof (this.props.stepMethodSelection) === 'undefined') { + this.props.history.replace('step_method_selection'); + } + } + isFormValid() { return this.state.subscribersAgreed && this.state.sentOnceLastYear @@ -112,8 +119,8 @@ class StepInputValidation extends Component {

this.props.navigate('step_method_selection', { trigger: true })} - onNextAction={() => this.props.navigate('step_data_manipulation', { trigger: true })} + onPreviousAction={() => this.props.history.push('step_method_selection')} + onNextAction={() => this.props.history.push('step_data_manipulation')} /> ); @@ -121,7 +128,22 @@ class StepInputValidation extends Component { } StepInputValidation.propTypes = { - navigate: PropTypes.func.isRequired, + history: PropTypes.shape({ + push: PropTypes.func.isRequired, + replace: PropTypes.func.isRequired, + }).isRequired, + stepMethodSelection: PropTypes.shape({ + duplicate: PropTypes.arrayOf(PropTypes.string), + header: PropTypes.arrayOf(PropTypes.string), + invalid: PropTypes.arrayOf(PropTypes.string), + role: PropTypes.arrayOf(PropTypes.string), + subscribersCount: PropTypes.number, + subscribers: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)), + }), }; -export default StepInputValidation; +StepInputValidation.defaultProps = { + stepMethodSelection: undefined, +}; + +export default withRouter(StepInputValidation);