// @flow import React, { useState } from 'react'; import { parseURI } from 'lbry-redux'; import { Form, FormField } from 'component/common/form'; import SelectAsset from 'component/selectAsset'; import TagSelect from 'component/tagsSelect'; type Props = { uri: string, title: ?string, amount: string, cover: ?string, thumbnail: ?string, location: { search: string }, description: string, website: string, email: string, balance: number, tags: Array, locations: Array, languages: Array, updateChannel: any => void, updateThumb: string => void, updateCover: string => void, }; function ChannelForm(props: Props) { const { uri, title, cover, description, website, email, thumbnail, tags, locations, languages, amount, updateChannel, updateThumb, updateCover, } = props; const { claimId } = parseURI(uri); // fill this in with sdk data const channelParams = { website: website, email: email, languages: languages || [], cover: cover, description: description, locations: locations || [], title: title, thumbnail: thumbnail, tags: tags ? tags.map(tag => { return { name: tag }; }) : [], claim_id: claimId, amount: amount, }; const [params, setParams] = useState(channelParams); const [bidError, setBidError] = useState(''); const MINIMUM_PUBLISH_BID = 0.00000001; // If a user changes tabs, update the url so it stays on the same page if they refresh. // We don't want to use links here because we can't animate the tab change and using links // would alter the Tab label's role attribute, which should stay role="tab" to work with keyboards/screen readers. const handleBidChange = (bid: number) => { const { balance, amount } = props; const totalAvailableBidAmount = parseFloat(amount) + parseFloat(balance); setParams({ ...params, amount: bid }); setBidError(''); if (bid <= 0.0 || isNaN(bid)) { setBidError(__('Deposit cannot be 0')); } else if (totalAvailableBidAmount === bid) { setBidError(__('Please decrease your deposit to account for transaction fees')); } else if (totalAvailableBidAmount < bid) { setBidError(__('Deposit cannot be higher than your balance')); } else if (bid <= MINIMUM_PUBLISH_BID) { setBidError(__('Your deposit must be higher')); } }; const handleThumbnailChange = (url: string) => { setParams({ ...params, thumbnail: url }); updateThumb(url); }; const handleCoverChange = (url: string) => { setParams({ ...params, cover: url }); updateCover(url); }; // TODO clear and bail after submit return (

{__('We can explain...')}

{__( "We know this page won't win any design awards, we just wanted to release a very very very basic version that just barely kinda works so people can use it right now. There is a much nicer version being worked on." )}

updateChannel(channelParams)}> handleThumbnailChange(v)} currentValue={params.thumbnail} assetName={'Thumbnail'} recommended={'(300 x 300)'} /> handleCoverChange(v)} currentValue={params.cover} assetName={'Cover'} recommended={'(1000 x 160)'} /> setParams({ ...params, title: e.target.value })} /> handleBidChange(parseFloat(event.target.value))} placeholder={0.1} /> setParams({ ...params, website: e.target.value })} /> setParams({ ...params, email: e.target.value })} /> setParams({ ...params, description: text })} /> { if (!params.tags.map(savedTag => savedTag.name).includes(newTag.name)) { setParams({ ...params, tags: [...params.tags, newTag] }); } else { // If it already exists and the user types it in, remove it setParams({ ...params, tags: params.tags.filter(tag => tag.name !== newTag.name) }); } }} onRemove={clickedTag => { const newTags = params.tags.slice().filter(tag => tag.name !== clickedTag.name); setParams({ ...params, tags: newTags }); }} tagsChosen={params.tags || []} />
); } export default ChannelForm;