import React from 'react'; import { isNameValid } from 'lbryURI'; import { FormRow } from 'component/form.js'; import { BusyMessage } from 'component/common'; import Link from 'component/link'; class ChannelSection extends React.PureComponent { constructor(props) { super(props); this.state = { newChannelName: '@', newChannelBid: 10, addingChannel: false, }; } handleChannelChange(event) { const channel = event.target.value; if (channel === 'new') this.setState({ addingChannel: true }); else { this.setState({ addingChannel: false }); this.props.handleChannelChange(event.target.value); } } handleNewChannelNameChange(event) { const newChannelName = event.target.value.startsWith('@') ? event.target.value : `@${event.target.value}`; if (newChannelName.length > 1 && !isNameValid(newChannelName.substr(1), false)) { this.refs.newChannelName.showError( __('LBRY channel names must contain only letters, numbers and dashes.') ); return; } this.refs.newChannelName.clearError(); this.setState({ newChannelName, }); } handleNewChannelBidChange(event) { this.setState({ newChannelBid: parseFloat(event.target.value), }); } handleCreateChannelClick(event) { const { balance } = this.props; const { newChannelBid } = this.state; if (newChannelBid > balance) { this.refs.newChannelName.showError(__('Unable to create channel due to insufficient funds.')); return; } if (newChannelBid == 0) { this.refs.newChannelName.showError(__('Bid value must be greater than 0.')); return; } if (newChannelBid == balance) { this.refs.newChannelName.showError(__('Please decrease your bid to account for transaction fees.')); return; } this.setState({ creatingChannel: true, }); const newChannelName = this.state.newChannelName; const amount = parseFloat(this.state.newChannelBid); this.setState({ creatingChannel: true, }); const success = () => { this.setState({ creatingChannel: false, addingChannel: false, channel: newChannelName, }); this.props.handleChannelChange(newChannelName); }; const failure = err => { this.setState({ creatingChannel: false, }); this.refs.newChannelName.showError(__('Unable to create channel due to an internal error.')); }; this.props.createChannel(newChannelName, amount).then(success, failure); } render() { const lbcInputHelp = __( 'This LBC remains yours. It is a deposit to reserve the name and can be undone at any time.' ); const channel = this.state.addingChannel ? 'new' : this.props.channel; const { fetchingChannels, channels = [] } = this.props; const channelSelector = ( {channels.map(({ name }) => ( ))} ); return (

{__('Channel Name')}

{__('This is a username or handle that your content can be found under.')}{' '} {__('Ex. @Marvel, @TheBeatles, @BooksByJoe')}
{fetchingChannels ? ( ) : ( channelSelector )}
{this.state.addingChannel && (
)}
); } } export default ChannelSection;