2019-05-17 20:21:07 +02:00
// @flow
2019-06-27 01:59:27 +02:00
import { CHANNEL _NEW } from 'constants/claim' ;
2019-09-30 23:16:46 +02:00
import React , { useEffect , useState } from 'react' ;
2019-05-21 02:47:23 +02:00
import { FormField , Form } from 'component/common/form' ;
2019-05-17 20:21:07 +02:00
import Button from 'component/button' ;
import ChannelSection from 'component/selectChannel' ;
2019-07-29 18:54:46 +02:00
import UnsupportedOnWeb from 'component/common/unsupported-on-web' ;
2019-06-25 05:27:18 +02:00
import usePersistedState from 'util/use-persisted-state' ;
2019-05-17 20:21:07 +02:00
type Props = {
2019-05-21 02:47:23 +02:00
uri : string ,
2019-06-12 16:53:27 +02:00
claim : StreamClaim ,
createComment : ( string , string , string ) => void ,
2019-05-17 20:21:07 +02:00
} ;
2019-06-12 16:53:27 +02:00
export function CommentCreate ( props : Props ) {
const { createComment , claim } = props ;
const { claim _id : claimId } = claim ;
const [ commentValue , setCommentValue ] = usePersistedState ( ` comment- ${ claimId } ` , '' ) ;
2019-06-27 01:59:27 +02:00
const [ commentAck , setCommentAck ] = usePersistedState ( 'comment-acknowledge' , false ) ;
const [ channel , setChannel ] = usePersistedState ( 'comment-channel' , 'anonymous' ) ;
2019-09-30 23:16:46 +02:00
const [ charCount , setCharCount ] = useState ( commentValue . length ) ;
2019-05-17 20:21:07 +02:00
2019-06-12 16:53:27 +02:00
function handleCommentChange ( event ) {
setCommentValue ( event . target . value ) ;
2019-05-17 20:21:07 +02:00
}
2019-06-12 16:53:27 +02:00
function handleChannelChange ( channel ) {
setChannel ( channel ) ;
2019-05-21 02:47:23 +02:00
}
2019-06-12 16:53:27 +02:00
function handleCommentAck ( event ) {
2019-06-25 05:27:18 +02:00
setCommentAck ( true ) ;
2019-06-12 16:53:27 +02:00
}
2019-07-17 22:49:06 +02:00
2019-06-12 16:53:27 +02:00
function handleSubmit ( ) {
2019-06-27 01:59:27 +02:00
if ( channel !== CHANNEL _NEW && commentValue . length ) createComment ( commentValue , claimId , channel ) ;
2019-06-12 16:53:27 +02:00
setCommentValue ( '' ) ;
2019-05-17 20:21:07 +02:00
}
2019-09-30 23:16:46 +02:00
useEffect ( ( ) => setCharCount ( commentValue . length ) , [ commentValue ] ) ;
2019-06-12 16:53:27 +02:00
return (
2019-07-10 16:43:55 +02:00
< section >
2019-07-29 18:54:46 +02:00
< UnsupportedOnWeb type = "feature" / >
{ /* @if TARGET='app' */ }
2019-06-25 05:27:18 +02:00
{ commentAck !== true && (
2019-07-21 23:31:22 +02:00
< div >
2019-07-10 18:08:01 +02:00
< p > { _ _ ( 'A few things to know before participating in the comment alpha:' ) } < / p >
2019-07-10 16:43:55 +02:00
< ul >
< li >
2019-07-10 18:08:01 +02:00
{ _ _ ( 'During the alpha, all comments are sent to a LBRY, Inc. server, not the LBRY network itself.' ) }
< / li >
< li >
{ _ _ (
'During the alpha, comments are not decentralized or censorship resistant (but we repeat ourselves).'
) }
< / li >
2019-07-17 05:23:45 +02:00
< li >
{ _ _ (
'For the initial release, deleting or editing comments is not possible. Please be mindful of this when posting.'
) }
< / li >
2019-07-10 18:08:01 +02:00
< li >
{ _ _ (
'When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.'
) }
2019-07-10 16:43:55 +02:00
< / li >
< / ul >
< Button button = "primary" onClick = { handleCommentAck } label = { _ _ ( 'Got it!' ) } / >
< / div >
) }
{ commentAck === true && (
< Form onSubmit = { handleSubmit } >
2019-07-21 23:31:22 +02:00
< ChannelSection channel = { channel } onChannelChange = { handleChannelChange } / >
< FormField
disabled = { channel === CHANNEL _NEW }
type = "textarea"
name = "content_description"
label = { _ _ ( 'Comment' ) }
placeholder = { _ _ ( 'Your comment' ) }
value = { commentValue }
2019-09-30 23:16:46 +02:00
charCount = { charCount }
2019-07-21 23:31:22 +02:00
onChange = { handleCommentChange }
/ >
2019-07-10 16:43:55 +02:00
< div className = "card__actions" >
< Button
button = "primary"
disabled = { channel === CHANNEL _NEW || ! commentValue . length }
type = "submit"
label = { _ _ ( 'Post' ) }
/ >
2019-06-12 16:53:27 +02:00
< / div >
2019-07-10 16:43:55 +02:00
< / Form >
2019-06-12 16:53:27 +02:00
) }
2019-07-29 18:54:46 +02:00
{ /* @endif */ }
2019-07-10 16:43:55 +02:00
< / section >
2019-06-12 16:53:27 +02:00
) ;
2019-05-17 20:21:07 +02:00
}