spee.ch/react/containers/ChannelLoginForm.jsx

91 lines
3.3 KiB
React
Raw Normal View History

2018-01-05 22:59:25 +01:00
import React from 'react';
import { makePostRequest } from '../utils/xhr.js';
2018-01-10 20:26:01 +01:00
import { connect } from 'react-redux';
import { updateLoggedInChannel } from '../actions/index';
2018-01-10 20:26:01 +01:00
import { setUserCookies } from '../utils/cookies.js';
import { replaceChannelSelectionInNavBar } from '../utils/page.js';
2018-01-13 00:02:42 +01:00
import PropTypes from 'prop-types';
2018-01-05 22:59:25 +01:00
class ChannelLoginForm extends React.Component {
constructor (props) {
super(props);
this.state = {
error : null,
name : '',
password: '',
2018-01-05 22:59:25 +01:00
};
this.handleInput = this.handleInput.bind(this);
this.loginToChannel = this.loginToChannel.bind(this);
}
handleInput (event) {
event.preventDefault();
const name = event.target.name;
const value = event.target.value;
this.setState({[name]: value});
}
loginToChannel (event) {
event.preventDefault();
2018-01-06 00:11:45 +01:00
const params = `username=${this.state.name}&password=${this.state.password}`;
const url = '/login';
const that = this;
makePostRequest(url, params)
2018-01-06 00:11:45 +01:00
.then(result => {
2018-01-10 20:26:01 +01:00
that.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);
setUserCookies(result.channelName, result.shortChannelId, result.channelClaimId);
replaceChannelSelectionInNavBar(result.channelName);
2018-01-06 00:11:45 +01:00
})
.catch(error => {
console.log('login error', error);
if (error.message) {
that.setState({'error': error.message});
} else {
2018-01-10 20:26:01 +01:00
that.setState({'error': error});
2018-01-06 00:11:45 +01:00
}
});
2018-01-05 22:59:25 +01:00
}
render () {
return (
<form id="channel-login-form">
<p id="login-error-display-element" className="info-message-placeholder info-message--failure">{this.state.error}</p>
<div className="row row--wide row--short">
<div className="column column--3 column--sml-10">
<label className="label" htmlFor="channel-login-name-input">Name:</label>
</div><div className="column column--6 column--sml-10">
<div className="input-text--primary flex-container--row flex-container--left-bottom">
<span>@</span>
<input type="text" id="channel-login-name-input" className="input-text" name="name" placeholder="Your Channel Name" value={this.state.channelName} onChange={this.handleInput}/>
</div>
</div>
</div>
<div className="row row--wide row--short">
<div className="column column--3 column--sml-10">
<label className="label" htmlFor="channel-login-password-input" >Password:</label>
</div><div className="column column--6 column--sml-10">
<div className="input-text--primary">
<input type="password" id="channel-login-password-input" name="password" className="input-text" placeholder="" value={this.state.channelPassword} onChange={this.handleInput}/>
</div>
</div>
</div>
<div className="row row--wide">
<button className="button--primary" onClick={this.loginToChannel}>Authenticate</button>
</div>
</form>
);
}
}
2018-01-10 20:26:01 +01:00
const mapDispatchToProps = dispatch => {
return {
onChannelLogin: (name, shortId, longId) => {
dispatch(updateLoggedInChannel(name, shortId, longId));
},
};
};
2018-01-13 00:02:42 +01:00
ChannelLoginForm.propTypes = {
onChannelLogin: PropTypes.func.isRequired,
};
2018-01-10 20:26:01 +01:00
export default connect(null, mapDispatchToProps)(ChannelLoginForm);