// @flow import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim'; import React, { Fragment } from 'react'; import { FormField } from 'component/common/form'; import ChannelCreate from 'component/channelCreate'; type Props = { channel: string, // currently selected channel channels: ?Array, balance: number, onChannelChange: string => void, createChannel: (string, number) => Promise, fetchChannelListMine: () => void, fetchingChannels: boolean, hideAnon: boolean, hideNew: boolean, label?: string, injected?: Array, emailVerified: boolean, }; type State = { addingChannel: boolean, }; const ID_FF_SELECT_CHANNEL = 'ID_FF_SELECT_CHANNEL'; class ChannelSelection extends React.PureComponent { constructor(props: Props) { super(props); this.state = { addingChannel: props.channel === CHANNEL_NEW, }; (this: any).handleChannelChange = this.handleChannelChange.bind(this); (this: any).handleChangeToNewChannel = this.handleChangeToNewChannel.bind(this); } componentDidMount() { const { channel, channels, fetchChannelListMine, fetchingChannels, emailVerified, onChannelChange } = this.props; if (IS_WEB && !emailVerified) { return; } if ((!channels || !channels.length) && !fetchingChannels) { fetchChannelListMine(); } const elem = document.getElementById(ID_FF_SELECT_CHANNEL); // $FlowFixMe if (elem && elem.value && elem.value !== channel) { setTimeout(() => { // $FlowFixMe onChannelChange(elem.value); }, 250); } } componentDidUpdate() { const { channels, fetchingChannels, hideAnon } = this.props; if (!fetchingChannels && !channels && hideAnon) { this.setState({ addingChannel: true }); } } handleChannelChange(event: SyntheticInputEvent<*>) { const { onChannelChange } = this.props; const channel = event.target.value; if (channel === CHANNEL_NEW) { this.setState({ addingChannel: true }); onChannelChange(channel); } else { this.setState({ addingChannel: false }); onChannelChange(channel); } } handleChangeToNewChannel(props: Object) { const { onChannelChange } = this.props; const { newChannelName } = props; this.setState({ addingChannel: false }); const channelName = `@${newChannelName.trim()}`; onChannelChange(channelName); } render() { const channel = this.state.addingChannel ? CHANNEL_NEW : this.props.channel; const { fetchingChannels, channels = [], hideAnon, hideNew, label, injected = [] } = this.props; const { addingChannel } = this.state; return ( {!hideAnon && } {channels && channels.map(({ name, claim_id: claimId }) => ( ))} {injected && injected.map(item => ( ))} {!fetchingChannels && !hideNew && } {addingChannel && } ); } } export default ChannelSelection;