more redux comments
This commit is contained in:
parent
86e1743388
commit
6cbade699f
7 changed files with 74 additions and 89 deletions
|
@ -1,13 +1,12 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
import { makeSelectClaimForUri, selectMyChannelClaims, doCommentCreate, makeSelectCommentsForUri } from 'lbry-redux';
|
import { doCommentCreate, makeSelectClaimForUri, selectMyActiveChannelUri, } from 'lbry-redux';
|
||||||
|
|
||||||
import CommentCreate from './view';
|
import CommentCreate from './view';
|
||||||
|
|
||||||
const select = (state, props) => ({
|
const select = (state, props) => ({
|
||||||
channels: selectMyChannelClaims(state),
|
|
||||||
comments: makeSelectCommentsForUri(props.uri)(state),
|
|
||||||
claim: makeSelectClaimForUri(props.uri)(state),
|
claim: makeSelectClaimForUri(props.uri)(state),
|
||||||
|
channelUri: selectMyActiveChannelUri(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
|
|
|
@ -1,55 +1,71 @@
|
||||||
// @flow
|
// @flow
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { FormField } from 'component/common/form';
|
import { FormField, Form } from 'component/common/form';
|
||||||
import Button from 'component/button';
|
import Button from 'component/button';
|
||||||
import ChannelSection from 'component/selectChannel';
|
import ChannelSection from 'component/selectChannel';
|
||||||
|
import { parseURI } from 'lbry-redux';
|
||||||
|
|
||||||
|
// props:
|
||||||
type Props = {
|
type Props = {
|
||||||
comment: string,
|
uri: string,
|
||||||
claimId: string,
|
channelUri: string,
|
||||||
authorChannelId: string,
|
createComment: params => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
class CommentCreate extends React.PureComponent<Props> {
|
class CommentCreate extends React.PureComponent<Props> {
|
||||||
constructor(props: Props) {
|
constructor(props: Props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
channel: 'Anonymous',
|
message: '',
|
||||||
comment: '',
|
|
||||||
channelId: '',
|
|
||||||
};
|
};
|
||||||
|
// set state or props for comment form
|
||||||
(this: any).handleCommentChange = this.handleCommentChange.bind(this);
|
(this: any).handleCommentChange = this.handleCommentChange.bind(this);
|
||||||
(this: any).handleChannelChange = this.handleChannelChange.bind(this);
|
(this: any).handleChannelChange = this.handleChannelChange.bind(this);
|
||||||
|
(this: any).handleSubmit = this.handleSubmit.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleCommentChange(event) {
|
handleCommentChange(event) {
|
||||||
this.setState({ comment: event.comment.target.value });
|
this.setState({ message: event.target.value });
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChannelChange(channel) {
|
handleChannelChange(channelUri) {
|
||||||
this.setState({ channel: channel });
|
this.setState({ channelUri: channelUri });
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSubmit() {
|
||||||
|
const { createComment, claim, channelUri } = this.props;
|
||||||
|
console.log('claim', claim)
|
||||||
|
const { claim_id: claimId } = claim;
|
||||||
|
const { message } = this.state;
|
||||||
|
let cmt = { message, channelId: parseURI(channelUri).claimId, claimId };
|
||||||
|
console.log('CMT', cmt);
|
||||||
|
console.log('PURI', claimId);
|
||||||
|
console.log('PURI', parseURI(channelUri));
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
console.log(this.state);
|
const { channelUri } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="card card--section">
|
<section className="card card--section">
|
||||||
<div className="card__content">
|
<Form onSubmit={this.handleSubmit}>
|
||||||
<FormField
|
|
||||||
type="textarea"
|
|
||||||
name="content_description"
|
|
||||||
label={__('Text')}
|
|
||||||
placeholder={__('Your comment')}
|
|
||||||
value={this.state.comment}
|
|
||||||
onChange={text => this.handleCommentChange({ comment: text })}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="card__actions--between">
|
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<ChannelSection channel={this.state.channel} onChannelChange={this.handleChannelChange} />
|
<FormField
|
||||||
|
type="textarea"
|
||||||
|
name="content_description"
|
||||||
|
label={__('Text')}
|
||||||
|
placeholder={__('Your comment')}
|
||||||
|
value={this.state.message}
|
||||||
|
onChange={this.handleCommentChange}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Button button="primary" type="submit" label={__('Post')} />
|
<div className="card__actions--between">
|
||||||
</div>
|
<div className="card__content">
|
||||||
|
<ChannelSection channel={channelUri} />
|
||||||
|
</div>
|
||||||
|
<Button button="primary" type="submit" label={__('Post')} />
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,49 +76,3 @@ class Comment extends React.PureComponent<CommentProps> {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CommentList;
|
export default CommentList;
|
||||||
// export default function CommentsList(props) {
|
|
||||||
// const { uri } = props;
|
|
||||||
// const { claimId } = parseURI(uri);
|
|
||||||
//
|
|
||||||
// // We have local "state" which is a list of comments
|
|
||||||
// // And we have "setComments" which is a way to update the local state with new comments
|
|
||||||
// // useState sets that up and says the initial value for "comments" is 'undefined'
|
|
||||||
// // const [comments, setComments] = useState(undefined);
|
|
||||||
// //
|
|
||||||
// //
|
|
||||||
// // // useEffect is saying, when the properties that are passed in to this function change,
|
|
||||||
// // // re-run this function, or re-run this "effect" that will update the local state
|
|
||||||
// // useEffect(() => {
|
|
||||||
// // Lbry.comment_list({ claim_id: claimId })
|
|
||||||
// // .then(result => setComments(result))
|
|
||||||
// // .catch(error => console.error(error));
|
|
||||||
// // // Lbry.commentsList(claimID)
|
|
||||||
// // // .then(comments => setComments(comments))
|
|
||||||
// // // .catch(error => console.error(error))
|
|
||||||
// // }, [claimId]);
|
|
||||||
//
|
|
||||||
// // If there are no comments set yet, just return null
|
|
||||||
// if (!comments) {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // If we have comments, we want to return a piece of UI
|
|
||||||
// // The same way we would return an array, we can return an "array" of <li> elements with the comment data inside
|
|
||||||
// return (
|
|
||||||
// <ul className="navigation__links">
|
|
||||||
// {comments.comments.map(comment => {
|
|
||||||
// return (
|
|
||||||
// <li>
|
|
||||||
// <Comment
|
|
||||||
// commentId={comment.comment_id}
|
|
||||||
// claimId={comment.claim_id}
|
|
||||||
// author={comment.author}
|
|
||||||
// message={comment.message}
|
|
||||||
// timePosted={comment.time_posted}
|
|
||||||
// />
|
|
||||||
// </li>
|
|
||||||
// );
|
|
||||||
// })}
|
|
||||||
// </ul>
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
|
@ -331,6 +331,7 @@ class PublishForm extends React.PureComponent<Props> {
|
||||||
|
|
||||||
const shortUri = buildURI({ contentName: name });
|
const shortUri = buildURI({ contentName: name });
|
||||||
|
|
||||||
|
console.log('URI', uri);
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
{IS_WEB && <UnsupportedOnWeb />}
|
{IS_WEB && <UnsupportedOnWeb />}
|
||||||
|
|
|
@ -4,19 +4,23 @@ import {
|
||||||
selectBalance,
|
selectBalance,
|
||||||
selectMyChannelClaims,
|
selectMyChannelClaims,
|
||||||
selectFetchingMyChannels,
|
selectFetchingMyChannels,
|
||||||
|
selectMyActiveChannelUri,
|
||||||
doFetchChannelListMine,
|
doFetchChannelListMine,
|
||||||
doCreateChannel,
|
doCreateChannel,
|
||||||
|
doSetMyActiveChannelUri,
|
||||||
} from 'lbry-redux';
|
} from 'lbry-redux';
|
||||||
|
|
||||||
const select = state => ({
|
const select = state => ({
|
||||||
channels: selectMyChannelClaims(state),
|
channels: selectMyChannelClaims(state),
|
||||||
fetchingChannels: selectFetchingMyChannels(state),
|
fetchingChannels: selectFetchingMyChannels(state),
|
||||||
balance: selectBalance(state),
|
balance: selectBalance(state),
|
||||||
|
activeChannelUri: selectMyActiveChannelUri(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
createChannel: (name, amount) => dispatch(doCreateChannel(name, amount)),
|
createChannel: (name, amount) => dispatch(doCreateChannel(name, amount)),
|
||||||
fetchChannelListMine: () => dispatch(doFetchChannelListMine()),
|
fetchChannelListMine: () => dispatch(doFetchChannelListMine()),
|
||||||
|
setMyActiveChannelUri: activeChannelUri => dispatch(doSetMyActiveChannelUri(activeChannelUri)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|
|
@ -7,13 +7,16 @@ import Button from 'component/button';
|
||||||
import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim';
|
import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
|
channelUri: string,
|
||||||
channel: string, // currently selected channel
|
channel: string, // currently selected channel
|
||||||
channels: Array<{ name: string }>,
|
channels: Array<{ name: string }>,
|
||||||
balance: number,
|
balance: number,
|
||||||
onChannelChange: string => void,
|
onChannelChange?: string => void,
|
||||||
createChannel: (string, number) => Promise<any>,
|
createChannel: (string, number) => Promise<any>,
|
||||||
fetchChannelListMine: () => void,
|
fetchChannelListMine: () => void,
|
||||||
fetchingChannels: boolean,
|
fetchingChannels: boolean,
|
||||||
|
activeChannelUri: string,
|
||||||
|
setMyActiveChannelUri: string => void,
|
||||||
};
|
};
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
|
@ -53,18 +56,27 @@ class ChannelSection extends React.PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChannelChange(event: SyntheticInputEvent<*>) {
|
onChannelChangeProxy(channelUri) {
|
||||||
const { onChannelChange } = this.props;
|
const { onChannelChange } = this.props;
|
||||||
const { newChannelBid } = this.state;
|
if (onChannelChange) {
|
||||||
const channel = event.target.value;
|
onChannelChange(channelUri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (channel === CHANNEL_NEW) {
|
handleChannelChange(event: SyntheticInputEvent<*>) {
|
||||||
|
const { setMyActiveChannelUri } = this.props;
|
||||||
|
const { newChannelBid } = this.state;
|
||||||
|
const channelUri = event.target.value;
|
||||||
|
console.log('HCC', channelUri);
|
||||||
|
|
||||||
|
if (channelUri === CHANNEL_NEW) {
|
||||||
this.setState({ addingChannel: true });
|
this.setState({ addingChannel: true });
|
||||||
onChannelChange(channel);
|
this.onChannelChangeProxy(channelUri);
|
||||||
this.handleNewChannelBidChange(newChannelBid);
|
this.handleNewChannelBidChange(newChannelBid);
|
||||||
} else {
|
} else {
|
||||||
this.setState({ addingChannel: false });
|
this.setState({ addingChannel: false });
|
||||||
onChannelChange(channel);
|
setMyActiveChannelUri(channelUri);
|
||||||
|
this.onChannelChangeProxy(channelUri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +116,7 @@ class ChannelSection extends React.PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleCreateChannelClick() {
|
handleCreateChannelClick() {
|
||||||
const { balance, createChannel, onChannelChange } = this.props;
|
const { balance, createChannel } = this.props;
|
||||||
const { newChannelBid, newChannelName } = this.state;
|
const { newChannelBid, newChannelName } = this.state;
|
||||||
|
|
||||||
const channelName = `@${newChannelName}`;
|
const channelName = `@${newChannelName}`;
|
||||||
|
@ -123,8 +135,7 @@ class ChannelSection extends React.PureComponent<Props, State> {
|
||||||
creatingChannel: false,
|
creatingChannel: false,
|
||||||
addingChannel: false,
|
addingChannel: false,
|
||||||
});
|
});
|
||||||
|
this.onChannelChangeProxy(channelName);
|
||||||
onChannelChange(channelName);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const failure = () => {
|
const failure = () => {
|
||||||
|
@ -138,7 +149,7 @@ class ChannelSection extends React.PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const channel = this.state.addingChannel ? 'new' : this.props.channel;
|
const channelUri = this.state.addingChannel ? 'new' : this.props.channelUri;
|
||||||
const { fetchingChannels, channels = [] } = this.props;
|
const { fetchingChannels, channels = [] } = this.props;
|
||||||
const {
|
const {
|
||||||
newChannelName,
|
newChannelName,
|
||||||
|
@ -157,10 +168,10 @@ class ChannelSection extends React.PureComponent<Props, State> {
|
||||||
<BusyIndicator message="Updating channels" />
|
<BusyIndicator message="Updating channels" />
|
||||||
) : (
|
) : (
|
||||||
<fieldset-section>
|
<fieldset-section>
|
||||||
<FormField name="channel" type="select" onChange={this.handleChannelChange} value={channel}>
|
<FormField name="channel" type="select" onChange={this.handleChannelChange} value={channelUri}>
|
||||||
<option value={CHANNEL_ANONYMOUS}>{__('Anonymous')}</option>
|
<option value={CHANNEL_ANONYMOUS}>{__('Anonymous')}</option>
|
||||||
{channels.map(({ name }) => (
|
{channels.map(({ name, permanent_url: channelUri }) => (
|
||||||
<option key={name} value={name}>
|
<option key={name} value={channelUri}>
|
||||||
{name}
|
{name}
|
||||||
</option>
|
</option>
|
||||||
))}
|
))}
|
||||||
|
|
|
@ -290,7 +290,7 @@ class FilePage extends React.Component<Props> {
|
||||||
<header className="card__header">
|
<header className="card__header">
|
||||||
<h2 className="card__header">Comments</h2>
|
<h2 className="card__header">Comments</h2>
|
||||||
</header>
|
</header>
|
||||||
<CommentCreate comment={''} uri={uri} />
|
<CommentCreate uri={uri} />
|
||||||
<CommentsList uri={uri} />
|
<CommentsList uri={uri} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue