React/Redux - publish component #323
|
@ -17,7 +17,9 @@ class ChannelCreateForm extends React.Component {
|
|||
this.cleanseChannelInput = this.cleanseChannelInput.bind(this);
|
||||
this.handleChannelInput = this.handleChannelInput.bind(this);
|
||||
this.handleInput = this.handleInput.bind(this);
|
||||
this.checkChannelIsAvailable = this.checkChannelIsAvailable.bind(this);
|
||||
this.updateIsChannelAvailable = this.updateIsChannelAvailable.bind(this);
|
||||
this.checkIsChannelAvailable = this.checkIsChannelAvailable.bind(this);
|
||||
this.checkIsPasswordProvided = this.checkIsPasswordProvided.bind(this);
|
||||
this.createChannel = this.createChannel.bind(this);
|
||||
}
|
||||
cleanseChannelInput (input) {
|
||||
|
@ -30,7 +32,12 @@ class ChannelCreateForm extends React.Component {
|
|||
let value = event.target.value;
|
||||
value = this.cleanseChannelInput(value);
|
||||
this.setState({channel: value});
|
||||
this.checkChannelIsAvailable(value);
|
||||
if (value) {
|
||||
this.updateIsChannelAvailable(value);
|
||||
} else {
|
||||
this.setState({error: 'Please enter a channel name'});
|
||||
}
|
||||
console.log('end of handlechannelinput');
|
||||
}
|
||||
handleInput (event) {
|
||||
event.preventDefault();
|
||||
|
@ -38,47 +45,81 @@ class ChannelCreateForm extends React.Component {
|
|||
const value = event.target.value;
|
||||
this.setState({[name]: value});
|
||||
}
|
||||
checkChannelIsAvailable (channel) {
|
||||
updateIsChannelAvailable (channel) {
|
||||
const that = this;
|
||||
makeGetRequest(`/api/channel-is-available/${channel}`)
|
||||
.then(() => {
|
||||
that.setState({urlError: null});
|
||||
const channelWithAtSymbol = `@${channel}`
|
||||
makeGetRequest(`/api/channel-is-available/${channelWithAtSymbol}`)
|
||||
.then(isAvailable => {
|
||||
if (isAvailable) {
|
||||
that.setState({'error': null});
|
||||
} else {
|
||||
that.setState({'error': 'That channel has already been claimed'});
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
that.setState({error: error.message});
|
||||
that.setState({'error': error.message});
|
||||
});
|
||||
}
|
||||
validatePassword (password) {
|
||||
if (!password || password.length < 1) {
|
||||
throw new Error('Please provide a password');
|
||||
checkIsChannelAvailable (channel) {
|
||||
const channelWithAtSymbol = `@${channel}`;
|
||||
return new Promise((resolve, reject) => {
|
||||
makeGetRequest(`/api/channel-is-available/${channelWithAtSymbol}`)
|
||||
.then(isAvailable => {
|
||||
if (!isAvailable) {
|
||||
console.log('channel is not available');
|
||||
return reject(new Error('That channel has already been claimed'));
|
||||
}
|
||||
console.log('channel is available');
|
||||
resolve();
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
checkIsPasswordProvided () {
|
||||
const password = this.state.password;
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!password || password.length < 1) {
|
||||
console.log('password not provided');
|
||||
return reject(new Error('Please provide a password'));
|
||||
}
|
||||
console.log('password provided');
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
makeCreateChannelRequest (channel, password) {
|
||||
const params = `username=${channel}&password=${password}`;
|
||||
return new Promise((resolve, reject) => {
|
||||
makePostRequest('/signup', params)
|
||||
.then(result => {
|
||||
resolve(result);
|
||||
})
|
||||
.catch(error => {
|
||||
console.log('create channel request failed:', error);
|
||||
reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord!'));
|
||||
});
|
||||
});
|
||||
}
|
||||
createChannel (event) {
|
||||
event.preventDefault();
|
||||
const params = `username=${this.state.channel}&password=${this.state.password}`;
|
||||
const url = '/signup';
|
||||
// validate submission data
|
||||
try {
|
||||
this.validatePassword(this.state.password);
|
||||
} catch (error) {
|
||||
return this.setState({error: error.message});
|
||||
}
|
||||
// publish the channel
|
||||
const that = this;
|
||||
this.setState({status: 'We are publishing your new channel. Sit tight...'});
|
||||
makePostRequest(url, params)
|
||||
this.checkIsPasswordProvided()
|
||||
.then(() => {
|
||||
return that.checkIsChannelAvailable(that.state.channel, that.state.password);
|
||||
})
|
||||
.then(() => {
|
||||
that.setState({status: 'We are publishing your new channel. Sit tight...'});
|
||||
return that.makeCreateChannelRequest();
|
||||
})
|
||||
.then(result => {
|
||||
that.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);
|
||||
that.setState({status: null});
|
||||
setUserCookies(result.channelName, result.shortChannelId, result.channelClaimId);
|
||||
replaceChannelSelectionInNavBar(result.channelName);
|
||||
that.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);
|
||||
})
|
||||
.catch(error => {
|
||||
console.log('create channel failure:', error);
|
||||
if (error.message) {
|
||||
this.setState({'error': error.message});
|
||||
} else {
|
||||
this.setState({'error': 'Unfortunately, we encountered an error while creating your channel. Please let us know in Discord!'});
|
||||
}
|
||||
.catch((error) => {
|
||||
that.setState({'error': error.message, status: null});
|
||||
});
|
||||
}
|
||||
render () {
|
||||
|
@ -113,7 +154,7 @@ class ChannelCreateForm extends React.Component {
|
|||
</div>
|
||||
</form>
|
||||
) : (
|
||||
<p>{this.state.status}</p>
|
||||
<p className="label">{this.state.status}</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -22,14 +22,20 @@ class UrlChooser extends React.Component {
|
|||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
this.setClaimNameFromFileName();
|
||||
}
|
||||
}
|
||||
componentWillReceiveProps ({claim: newClaim}) {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
console.log('PublishUrlInput will receive new props (claim)', newClaim);
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
if (newClaim) {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
this.checkClaimIsAvailable(newClaim);
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
} else {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
this.setState({error: 'Please enter a URL'});
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
}
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
}
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
handleInput (event) {
|
||||
event.preventDefault();
|
||||
let value = event.target.value;
|
||||
value = this.cleanseInput(value);
|
||||
// update the state
|
||||
this.props.onClaimChange(value);
|
||||
// check to make sure claim name is available
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
this.checkClaimIsAvailable(value);
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
}
|
||||
cleanseInput (input) {
|
||||
input = input.replace(/\s+/g, '-'); // replace spaces with dashes
|
||||
|
@ -38,7 +44,6 @@ class UrlChooser extends React.Component {
|
|||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
}
|
||||
setClaimNameFromFileName () {
|
||||
const fileName = this.props.fileName;
|
||||
console.log('setClaimNameFromFileName', fileName);
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));
|
||||
const cleanClaimName = this.cleanseInput(fileNameWithoutEnding);
|
||||
this.props.onClaimChange(cleanClaimName);
|
||||
|
@ -46,8 +51,12 @@ class UrlChooser extends React.Component {
|
|||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
checkClaimIsAvailable (claim) {
|
||||
const that = this;
|
||||
makeGetRequest(`/api/claim-is-available/${claim}`)
|
||||
.then(() => {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
.then(response => {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
if (response) {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
that.setState({'error': null});
|
||||
} else {
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
that.setState({'error': 'That url has already been claimed'});
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
}
|
||||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
||||
})
|
||||
.catch((error) => {
|
||||
that.setState({'error': error.message});
|
||||
|
|
|||
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements). You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).
|
|
@ -8,11 +8,11 @@ module.exports = {
|
|||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
if (xhttp.readyState === 4) {
|
||||
if (xhttp.status === 200) {
|
||||
resolve(xhttp.response);
|
||||
} else if (xhttp.status === 401) {
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
reject('Wrong channel name or password');
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
} if (xhttp.status === 401) {
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
reject(new Error('Wrong username or password'));
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
} else {
|
||||
reject('request failed with status:' + xhttp.status);
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
};
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
reject(new Error(xhttp.response));
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
}
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
}
|
||||
};
|
||||
xhttp.send();
|
||||
|
@ -28,11 +28,11 @@ module.exports = {
|
|||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
if (xhttp.readyState === 4) {
|
||||
if (xhttp.status === 200) {
|
||||
resolve(xhttp.response);
|
||||
} else if (xhttp.status === 401) {
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
reject('Wrong channel name or password');
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
} if (xhttp.status === 401) {
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
reject(new Error('Wrong username or password'));
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
} else {
|
||||
reject('request failed with status:' + xhttp.status);
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
};
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
reject(new Error(xhttp.response));
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
}
|
||||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
||||
}
|
||||
};
|
||||
xhttp.send(params);
|
||||
|
|
|||
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent. All get and post requests should not assume a 401 means invalid username and password. Instead, have the server pass back the error message. Also, checks for 401 vs. 403 appear to be inconsistent.
|
|
@ -90,7 +90,6 @@ module.exports = (app) => {
|
|||
if (result === true) {
|
||||
res.status(200).json(true);
|
||||
} else {
|
||||
// logger.debug(`Rejecting '${params.name}' because that name has already been claimed by this site`);
|
||||
res.status(200).json(false);
|
||||
}
|
||||
})
|
||||
|
@ -105,7 +104,6 @@ module.exports = (app) => {
|
|||
if (result === true) {
|
||||
res.status(200).json(true);
|
||||
} else {
|
||||
// logger.debug(`Rejecting '${params.name}' because that channel has already been claimed`);
|
||||
res.status(200).json(false);
|
||||
}
|
||||
})
|
||||
|
|
You should look at some of the linting additions @IGassman has added to app, could help keep these imports consistent in path specification (among other improvements).