mirror of
https://github.com/wassname/talk.git
synced 2026-06-29 19:01:47 +08:00
Merge branch 'master' into bugfix-second-new-comments
This commit is contained in:
@@ -52,7 +52,6 @@ const updateClosedMessage = (updateSettings) => (event) => {
|
||||
};
|
||||
|
||||
const updateCustomCssUrl = (updateSettings) => (event) => {
|
||||
console.log('updateCustomCssUrl', event.target.value);
|
||||
const customCssUrl = event.target.value;
|
||||
updateSettings({customCssUrl});
|
||||
};
|
||||
|
||||
@@ -54,7 +54,6 @@ class ModerationContainer extends Component {
|
||||
}
|
||||
|
||||
if (data.error) {
|
||||
console.log(data);
|
||||
return <div>Error</div>;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@ import React, {Component} from 'react';
|
||||
import {compose} from 'react-apollo';
|
||||
import {connect} from 'react-redux';
|
||||
import isEqual from 'lodash/isEqual';
|
||||
import I18n from 'coral-framework/modules/i18n/i18n';
|
||||
import translations from 'coral-framework/translations';
|
||||
const lang = new I18n(translations);
|
||||
|
||||
import {TabBar, Tab, TabContent, Spinner} from 'coral-ui';
|
||||
|
||||
@@ -25,7 +28,7 @@ import UserBox from 'coral-sign-in/components/UserBox';
|
||||
import SignInContainer from 'coral-sign-in/containers/SignInContainer';
|
||||
import SuspendedAccount from 'coral-framework/components/SuspendedAccount';
|
||||
import ChangeUsernameContainer from '../../coral-sign-in/containers/ChangeUsernameContainer';
|
||||
import SettingsContainer from 'coral-settings/containers/SettingsContainer';
|
||||
import ProfileContainer from 'coral-settings/containers/ProfileContainer';
|
||||
import RestrictedContent from 'coral-framework/components/RestrictedContent';
|
||||
import ConfigureStreamContainer from 'coral-configure/containers/ConfigureStreamContainer';
|
||||
import LoadMore from './LoadMore';
|
||||
@@ -110,7 +113,7 @@ class Embed extends Component {
|
||||
<div className="commentStream">
|
||||
<TabBar onChange={this.changeTab} activeTab={activeTab}>
|
||||
<Tab><Count count={asset.commentCount}/></Tab>
|
||||
<Tab>Settings</Tab>
|
||||
<Tab>{lang.t('profile')}</Tab>
|
||||
<Tab restricted={!isAdmin}>Configure Stream</Tab>
|
||||
</TabBar>
|
||||
{loggedIn && <UserBox user={user} logout={this.props.logout} changeTab={this.changeTab}/>}
|
||||
@@ -190,7 +193,7 @@ class Embed extends Component {
|
||||
loadMore={this.props.loadMore}/>
|
||||
</TabContent>
|
||||
<TabContent show={activeTab === 1}>
|
||||
<SettingsContainer
|
||||
<ProfileContainer
|
||||
loggedIn={loggedIn}
|
||||
userData={this.props.userData}
|
||||
showSignInDialog={this.props.showSignInDialog}
|
||||
|
||||
@@ -192,9 +192,8 @@ export const requestConfirmEmail = (email, redirectUri) => dispatch => {
|
||||
dispatch(verifyEmailSuccess());
|
||||
})
|
||||
.catch(err => {
|
||||
console.log('failed to send email verification', err);
|
||||
|
||||
// email might have already been verifyed
|
||||
dispatch(verifyEmailFailure());
|
||||
dispatch(verifyEmailFailure(err));
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"en": {
|
||||
"profile": "Profile",
|
||||
"successUpdateSettings": "The changes you have made have been applied to the comment stream on this article",
|
||||
"successNameUpdate": "Your username has been updated",
|
||||
"contentNotAvailable": "This content is not available",
|
||||
@@ -36,6 +37,7 @@
|
||||
}
|
||||
},
|
||||
"es": {
|
||||
"profile": "Perfil",
|
||||
"successUpdateSettings": "La configuración de este articulo fue actualizada",
|
||||
"successBioUpdate": "Tu bio fue actualizada",
|
||||
"contentNotAvailable": "El contenido no se encuentra disponible",
|
||||
|
||||
@@ -30,6 +30,7 @@ class CommentBox extends Component {
|
||||
postItem,
|
||||
assetId,
|
||||
updateCountCache,
|
||||
isReply,
|
||||
countCache,
|
||||
parentId,
|
||||
addNotification,
|
||||
@@ -46,19 +47,17 @@ class CommentBox extends Component {
|
||||
if (this.props.charCount && this.state.body.length > this.props.charCount) {
|
||||
return;
|
||||
}
|
||||
updateCountCache(assetId, countCache + 1);
|
||||
!isReply && updateCountCache(assetId, countCache + 1);
|
||||
postItem(comment, 'comments')
|
||||
.then(({data}) => {
|
||||
const postedComment = data.createComment.comment;
|
||||
|
||||
if (postedComment.status === 'REJECTED') {
|
||||
addNotification('error', lang.t('comment-post-banned-word'));
|
||||
updateCountCache(assetId, countCache);
|
||||
!isReply && updateCountCache(assetId, countCache);
|
||||
} else if (postedComment.status === 'PREMOD') {
|
||||
addNotification('success', lang.t('comment-post-notif-premod'));
|
||||
updateCountCache(assetId, countCache);
|
||||
} else {
|
||||
addNotification('success', 'Your comment has been posted.');
|
||||
!isReply && updateCountCache(assetId, countCache);
|
||||
}
|
||||
|
||||
if (commentPostedHandler) {
|
||||
@@ -110,7 +109,6 @@ class CommentBox extends Component {
|
||||
cStyle='darkGrey'
|
||||
className={`${name}-cancel-button`}
|
||||
onClick={() => {
|
||||
console.log('cancel button in comment box');
|
||||
cancelButtonClicked('');
|
||||
}}>
|
||||
{lang.t('cancel')}
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
import React, {Component} from 'react';
|
||||
import {graphql} from 'react-apollo';
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
export class RileysAwesomeCommentBox extends Component {
|
||||
|
||||
postComment() {
|
||||
console.log(this.props);
|
||||
console.log('postComment', this.props.asset_id);
|
||||
this.props.mutate({
|
||||
variables: {
|
||||
asset_id: this.props.asset_id,
|
||||
body: this.textarea.value,
|
||||
parent_id: null
|
||||
}
|
||||
}).then(({data}) => {
|
||||
console.log('it workt');
|
||||
console.log(data);
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
return <div>
|
||||
<textarea ref={textarea => this.textarea = textarea}></textarea>
|
||||
<button onClick={this.postComment.bind(this)}>POST</button>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
const postComment = gql`
|
||||
fragment commentView on Comment {
|
||||
id
|
||||
body
|
||||
user {
|
||||
name: username
|
||||
}
|
||||
actions {
|
||||
type: action_type
|
||||
count
|
||||
current: current_user {
|
||||
id
|
||||
created_at
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation CreateComment ($asset_id: ID!, $parent_id: ID, $body: String!) {
|
||||
createComment(asset_id:$asset_id, parent_id:$parent_id, body:$body) {
|
||||
...commentView
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const RileysAwesomeCommentBoxWithData = graphql(
|
||||
postComment
|
||||
)(RileysAwesomeCommentBox);
|
||||
|
||||
export default RileysAwesomeCommentBoxWithData;
|
||||
@@ -1,100 +0,0 @@
|
||||
import React, {Component} from 'react';
|
||||
import {graphql} from 'react-apollo';
|
||||
import gql from 'graphql-tag';
|
||||
import {fetchSignIn} from 'coral-framework/actions/auth';
|
||||
import RileysAwesomeCommentBox from 'coral-plugin-stream/RileysAwesomeCommentBox';
|
||||
|
||||
const assetID = '6187a94b-0b6d-4a96-ac6b-62b529cd8410';
|
||||
|
||||
// MyComponent is a "presentational" or apollo-unaware component,
|
||||
// It could be a simple React class:
|
||||
class Stream extends Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
logMeIn() {
|
||||
fetchSignIn({email: 'your@example.com', password: 'dfasidfaisdufoiausdfoiuaspdoifas'})(() => {});
|
||||
}
|
||||
|
||||
render() {
|
||||
const {data} = this.props;
|
||||
return <div>
|
||||
<button onClick={this.logMeIn.bind(this)}>Login or whatever</button>
|
||||
{
|
||||
data.loading
|
||||
? 'loading!'
|
||||
: <div>
|
||||
<RileysAwesomeCommentBox asset_id={data.asset.id} />
|
||||
<p>Asset ID: {data.asset.id}</p>
|
||||
<ul>
|
||||
{
|
||||
data.asset.comments.map(comment => {
|
||||
return <li key={comment.id}>
|
||||
{comment.body} [{comment.id}]
|
||||
<ul>
|
||||
{
|
||||
comment.replies.map(reply => {
|
||||
return <li key={reply.id}>{reply.body}</li>;
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
</li>;
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
}
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize GraphQL queries or mutations with the gql tag
|
||||
const StreamQuery = gql`fragment commentView on Comment {
|
||||
id
|
||||
body
|
||||
user {
|
||||
name: username
|
||||
}
|
||||
tags {
|
||||
name
|
||||
}
|
||||
actions {
|
||||
type: action_type
|
||||
count
|
||||
current: current_user {
|
||||
id
|
||||
created_at
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query AssetQuery($asset_id: ID!) {
|
||||
asset(id: $asset_id) {
|
||||
id
|
||||
title
|
||||
url
|
||||
commentCount
|
||||
comments {
|
||||
...commentView
|
||||
replies {
|
||||
...commentView
|
||||
}
|
||||
}
|
||||
}
|
||||
}`;
|
||||
|
||||
// We then can use `graphql` to pass the query results returned by MyQuery
|
||||
// to MyComponent as a prop (and update them as the results change)
|
||||
const StreamWithData = graphql(
|
||||
StreamQuery, {
|
||||
options: {
|
||||
variables: {
|
||||
asset_id: assetID
|
||||
}
|
||||
}
|
||||
}
|
||||
)(Stream);
|
||||
|
||||
export default StreamWithData;
|
||||
@@ -10,7 +10,6 @@ export default ({showSignInDialog}) => (
|
||||
<SignInContainer noButton={true}/>
|
||||
<div>
|
||||
<a onClick={() => {
|
||||
console.log('Signin click');
|
||||
showSignInDialog();
|
||||
}}>{lang.t('signIn')}</a> {lang.t('toAccess')}
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import React, {PropTypes} from 'react';
|
||||
import styles from './ProfileHeader.css';
|
||||
|
||||
const ProfileHeader = ({username}) => (
|
||||
<div className={styles.header}>
|
||||
<h1>{username}</h1>
|
||||
</div>
|
||||
);
|
||||
|
||||
ProfileHeader.propTypes = {username: PropTypes.string.isRequired};
|
||||
|
||||
export default ProfileHeader;
|
||||
@@ -1,14 +0,0 @@
|
||||
import React from 'react';
|
||||
import styles from './SettingsHeader.css';
|
||||
|
||||
export default ({userData}) => (
|
||||
<div className={styles.header}>
|
||||
<h1>{userData.username}</h1>
|
||||
|
||||
{
|
||||
|
||||
// Hiding display of users ID unless there's a use case for it.
|
||||
// <h2>{userData.profiles.map(profile => profile.id)}</h2>
|
||||
}
|
||||
</div>
|
||||
);
|
||||
+4
-4
@@ -8,13 +8,13 @@ import {myCommentHistory} from 'coral-framework/graphql/queries';
|
||||
import {link} from 'coral-framework/services/PymConnection';
|
||||
import NotLoggedIn from '../components/NotLoggedIn';
|
||||
import {Spinner} from 'coral-ui';
|
||||
import SettingsHeader from '../components/SettingsHeader';
|
||||
import ProfileHeader from '../components/ProfileHeader';
|
||||
import CommentHistory from 'coral-plugin-history/CommentHistory';
|
||||
|
||||
import translations from '../translations';
|
||||
const lang = new I18n(translations);
|
||||
|
||||
class SettingsContainer extends Component {
|
||||
class ProfileContainer extends Component {
|
||||
constructor (props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
@@ -44,7 +44,7 @@ class SettingsContainer extends Component {
|
||||
|
||||
return (
|
||||
<div>
|
||||
<SettingsHeader {...this.props} />
|
||||
<ProfileHeader username={this.props.userData.username} />
|
||||
{
|
||||
|
||||
// Hiding bio until moderation can get figured out
|
||||
@@ -88,4 +88,4 @@ const mapDispatchToProps = () => ({
|
||||
export default compose(
|
||||
connect(mapStateToProps, mapDispatchToProps),
|
||||
myCommentHistory
|
||||
)(SettingsContainer);
|
||||
)(ProfileContainer);
|
||||
@@ -1,20 +1,22 @@
|
||||
{
|
||||
"en":{
|
||||
"profile": "Profile",
|
||||
"userNoComment": "You've never left a comment. Join the conversation!",
|
||||
"allComments": "All Comments",
|
||||
"profileSettings": "Profile Settings",
|
||||
"myCommentHistory": "My comment History",
|
||||
"signIn": "Sign in",
|
||||
"toAccess": " to access Settings",
|
||||
"fromSettingsPage": "From the Settings Page you can see your comment history."
|
||||
"toAccess": " to access Profile",
|
||||
"fromSettingsPage": "From the Profile Page you can see your comment history."
|
||||
},
|
||||
"es":{
|
||||
"profile": "Perfil",
|
||||
"userNoComment": "No has dejado áun ningún comentario. ¡Unete a la conversación!",
|
||||
"allComments": "Todos los comentarios",
|
||||
"profileSettings": "Configuración del perfil",
|
||||
"myCommentHistory": "Mi historial de comentarios",
|
||||
"signIn": "Entrar",
|
||||
"toAccess": "para acceder a la configuración",
|
||||
"toAccess": "para acceder a al perfil",
|
||||
"fromSettingsPage": "Desde la peagina de configuración puede ver su historia de comentarios."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ export default {
|
||||
facebookSignIn: 'Sign in with Facebook',
|
||||
facebookSignUp: 'Sign up with Facebook',
|
||||
logout: 'Logout',
|
||||
signIn: 'Sign In',
|
||||
signIn: 'Sign in to join the conversation',
|
||||
or: 'Or',
|
||||
email: 'E-mail Address',
|
||||
password: 'Password',
|
||||
@@ -60,7 +60,7 @@ export default {
|
||||
facebookSignIn: 'Entrar con Facebook',
|
||||
facebookSignUp: 'Regístrate con Facebook',
|
||||
logout: 'Salir',
|
||||
signIn: 'Entrar',
|
||||
signIn: 'Entrar para Unirte a la Conversación',
|
||||
or: 'o',
|
||||
email: 'E-mail',
|
||||
password: 'Contraseña',
|
||||
|
||||
Reference in New Issue
Block a user