import React from 'react'; import request from 'utils/request'; import UrlMiddle from 'components/PublishUrlMiddleDisplay'; class PublishUrlInput extends React.Component { constructor (props) { super(props); this.handleInput = this.handleInput.bind(this); } componentDidMount () { if (!this.props.claim || this.props.claim === '') { this.setClaimNameFromFileName(); } } componentWillReceiveProps ({claim: newClaim}) { if (newClaim) { this.checkClaimIsAvailable(newClaim); } else { this.props.onUrlError('Please enter a URL'); } } handleInput (event) { let value = event.target.value; value = this.cleanseInput(value); // update the state this.props.onClaimChange(value); } cleanseInput (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; } setClaimNameFromFileName () { const fileName = this.props.fileName; const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.')); const cleanClaimName = this.cleanseInput(fileNameWithoutEnding); this.props.onClaimChange(cleanClaimName); } checkClaimIsAvailable (claim) { request(`/api/claim/availability/${claim}`) .then(isAvailable => { // console.log('checkClaimIsAvailable request response:', isAvailable); if (isAvailable) { this.props.onUrlError(null); } else { this.props.onUrlError('That url has already been claimed'); } }) .catch((error) => { this.props.onUrlError(error.message); }); } render () { return (

{this.props.urlError}

spee.ch / { (this.props.claim && !this.props.urlError) && {'\u2713'} } { this.props.urlError && {'\u2716'} }
); } } export default PublishUrlInput;