invalid password reset token styling

This commit is contained in:
Cassie Tarakajian 2016-10-18 17:06:53 -04:00
parent e5ff11f65a
commit 8b35951ba4
6 changed files with 45 additions and 7 deletions

View file

@ -95,6 +95,6 @@ export const RESET_INFINITE_LOOPS = 'RESET_INFINITE_LOOPS';
export const RESET_PASSWORD_INITIATE = 'RESET_PASSWORD_INITIATE'; export const RESET_PASSWORD_INITIATE = 'RESET_PASSWORD_INITIATE';
export const RESET_PASSWORD_RESET = 'RESET_PASSWORD_RESET'; export const RESET_PASSWORD_RESET = 'RESET_PASSWORD_RESET';
export const INVALID_RESET_PASSWORD_TOKEN = 'INVALID_RESET_PASSWORD_TOKEN';
// eventually, handle errors more specifically and better // eventually, handle errors more specifically and better
export const ERROR = 'ERROR'; export const ERROR = 'ERROR';

View file

@ -3,6 +3,8 @@ import { reduxForm } from 'redux-form';
import NewPasswordForm from './NewPasswordForm'; import NewPasswordForm from './NewPasswordForm';
import * as UserActions from '../../User/actions'; import * as UserActions from '../../User/actions';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import classNames from 'classnames';
import { Link } from 'react-router';
class NewPasswordView extends React.Component { class NewPasswordView extends React.Component {
componentDidMount() { componentDidMount() {
@ -12,10 +14,20 @@ class NewPasswordView extends React.Component {
} }
render() { render() {
const newPasswordClass = classNames({
'new-password': true,
'new-password--invalid': this.props.user.resetPasswordInvalid
});
console.log(this.props.user);
console.log('rerendering!!');
return ( return (
<div className="new-password" ref="newPassword" tabIndex="0"> <div className={newPasswordClass} ref="newPassword" tabIndex="0">
<h1>Set a New Password</h1> <h1>Set a New Password</h1>
<NewPasswordForm {...this.props} /> <NewPasswordForm {...this.props} />
<p className="new-password__invalid">
The password reset token is invalid or has expired.
</p>
<Link className="form__cancel-button" to="/">Close</Link>
</div> </div>
); );
} }
@ -23,7 +35,10 @@ class NewPasswordView extends React.Component {
NewPasswordView.propTypes = { NewPasswordView.propTypes = {
token: PropTypes.string.isRequired, token: PropTypes.string.isRequired,
validateResetPasswordToken: PropTypes.func.isRequired validateResetPasswordToken: PropTypes.func.isRequired,
user: PropTypes.shape({
resetPasswordInvalid: PropTypes.bool
})
}; };
function validate(formProps) { function validate(formProps) {

View file

@ -422,7 +422,7 @@ class IDEView extends React.Component {
} }
})()} })()}
{(() => { // eslint-disable-line {(() => { // eslint-disable-line
if (this.props.location.pathname.match(/\/reset-password\/[a-fA-F0-9]{40}/)) { if (this.props.location.pathname.match(/\/reset-password\/[a-fA-F0-9]+/)) {
return ( return (
<Overlay> <Overlay>
<NewPasswordView token={this.props.params.reset_password_token} /> <NewPasswordView token={this.props.params.reset_password_token} />

View file

@ -131,7 +131,6 @@ export function validateResetPasswordToken(token) {
axios.get(`${ROOT_URL}/reset-password/${token}`) axios.get(`${ROOT_URL}/reset-password/${token}`)
.then(() => { .then(() => {
// do nothing if the token is valid // do nothing if the token is valid
// add the token to the state?
}) })
.catch(() => dispatch({ .catch(() => dispatch({
type: ActionTypes.INVALID_RESET_PASSWORD_TOKEN type: ActionTypes.INVALID_RESET_PASSWORD_TOKEN

View file

@ -14,9 +14,11 @@ const user = (state = { authenticated: false }, action) => {
authenticated: false authenticated: false
}; };
case ActionTypes.RESET_PASSWORD_INITIATE: case ActionTypes.RESET_PASSWORD_INITIATE:
return Object.assign(state, {}, { resetPasswordInitiate: true }); return Object.assign({}, state, { resetPasswordInitiate: true });
case ActionTypes.RESET_PASSWORD_RESET: case ActionTypes.RESET_PASSWORD_RESET:
return Object.assign(state, {}, { resetPasswordInitiate: false }); return Object.assign({}, state, { resetPasswordInitiate: false });
case ActionTypes.INVALID_RESET_PASSWORD_TOKEN:
return Object.assign({}, state, { resetPasswordInvalid: true });
default: default:
return state; return state;
} }

View file

@ -7,3 +7,25 @@
padding: #{20 / $base-font-size}rem; padding: #{20 / $base-font-size}rem;
align-items: center; align-items: center;
} }
.new-password-form__password-input,
.new-password-form__confirm-password-input {
width: #{300 / $base-font-size}rem;
}
.new-password-form__field {
margin: #{20 / $base-font-size}rem 0;
}
.new-password-form {
.new-password--invalid & {
display: none;
}
}
.new-password__invalid {
display: none;
.new-password--invalid & {
display: block;
}
}