import React from 'react'; import ProgressBar from 'components/ProgressBar'; import request from 'utils/request'; class ChannelCreateForm extends React.Component { constructor (props) { super(props); this.state = { error : null, channel : '', password: '', status : null, }; this.handleChannelInput = this.handleChannelInput.bind(this); this.handleInput = this.handleInput.bind(this); this.createChannel = this.createChannel.bind(this); } cleanseChannelInput (input) { input = input.replace(/\s+/g, '-'); // replace spaces with dashes input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-' return input; } handleChannelInput (event) { let value = event.target.value; value = this.cleanseChannelInput(value); this.setState({channel: value}); if (value) { this.updateIsChannelAvailable(value); } else { this.setState({error: 'Please enter a channel name'}); } } handleInput (event) { const name = event.target.name; const value = event.target.value; this.setState({[name]: value}); } updateIsChannelAvailable (channel) { const channelWithAtSymbol = `@${channel}`; request(`/api/channel/availability/${channelWithAtSymbol}`) .then(() => { this.setState({'error': null}); }) .catch((error) => { this.setState({'error': error.message}); }); } checkIsPasswordProvided () { const password = this.state.password; return new Promise((resolve, reject) => { if (!password || password.length < 1) { return reject(new Error('Please provide a password')); } resolve(); }); } makePublishChannelRequest (username, password) { const params = { method : 'POST', body : JSON.stringify({username, password}), headers: new Headers({ 'Content-Type': 'application/json', }), credentials: 'include', }; return new Promise((resolve, reject) => { request('/signup', params) .then(result => { return resolve(result); }) .catch(error => { reject(new Error(`Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ${error.message}`)); }); }); } createChannel (event) { event.preventDefault(); this.checkIsPasswordProvided() .then(() => { if (this.state.error) { throw new Error(); } }) .then(() => { this.setState({status: 'We are publishing your new channel. Sit tight...'}); return this.makePublishChannelRequest(this.state.channel, this.state.password); }) .then(result => { this.setState({status: null}); this.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId); }) .catch((error) => { if (error.message) this.setState({'error': error.message, status: null}); }); } render () { return (
{this.state.status}