+const NewCount = ({commentCount, countCache}) =>
{
countCache && commentCount - countCache > 0 &&
@@ -12,7 +11,8 @@ const NewCount = ({commentCount, countCache}) =>
NewCount.propTypes = {
commentCount: PropTypes.number.isRequired,
- countCache: PropTypes.number
+ countCache: PropTypes.number,
+ loadMore: PropTypes.func.isRequired
};
export default NewCount;
diff --git a/client/coral-embed-stream/src/Stream.js b/client/coral-embed-stream/src/Stream.js
index d59521484..e68a223ca 100644
--- a/client/coral-embed-stream/src/Stream.js
+++ b/client/coral-embed-stream/src/Stream.js
@@ -24,7 +24,7 @@ class Stream extends React.Component {
componentDidMount() {
const {asset, getCounts, updateCountCache} = this.props;
- updateCountCache(asset.id, asset.comments.length);
+ updateCountCache(asset.id, asset.commentCount);
// Note: Apollo's built-in polling doesn't work with fetchMore queries, so a
// setInterval is being used instead.
From 2acd099f3f598252e604bffcf98dc5205d4c75d6 Mon Sep 17 00:00:00 2001
From: Riley Davis
Date: Wed, 22 Feb 2017 11:15:13 -0700
Subject: [PATCH 09/16] add empty state for asset search
---
.../src/containers/Streams/Streams.js | 36 ++++++++++---------
client/coral-admin/src/translations.json | 2 ++
2 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/client/coral-admin/src/containers/Streams/Streams.js b/client/coral-admin/src/containers/Streams/Streams.js
index 62f2f009e..96130fcba 100644
--- a/client/coral-admin/src/containers/Streams/Streams.js
+++ b/client/coral-admin/src/containers/Streams/Streams.js
@@ -8,6 +8,7 @@ import {Link} from 'react-router';
import {Pager, Icon} from 'coral-ui';
import {DataTable, TableHeader, RadioGroup, Radio} from 'react-mdl';
+import EmptyCard from 'coral-admin/src/components/EmptyCard';
const limit = 25;
@@ -142,22 +143,25 @@ class Streams extends Component {
{lang.t('streams.oldest')}
-
-
- {lang.t('streams.article')}
-
- {lang.t('streams.pubdate')}
-
-
- {lang.t('streams.status')}
-
-
-
-
+ {
+ assetsIds.length
+ ?
+
+ {lang.t('streams.article')}
+
+ {lang.t('streams.pubdate')}
+
+
+ {lang.t('streams.status')}
+
+
+
+
+ :
{lang.t('streams.empty_result')}
+ }
);
}
diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json
index debfdcc08..7219a22ca 100644
--- a/client/coral-admin/src/translations.json
+++ b/client/coral-admin/src/translations.json
@@ -114,6 +114,7 @@
"comment_count": "Comments"
},
"streams": {
+ "empty_result": "No assets match this search. Maybe try widening your search?",
"search": "Search",
"filter-streams": "Filter Streams",
"stream-status": "Stream Status",
@@ -222,6 +223,7 @@
"comment_count": "Comentarios"
},
"streams": {
+ "empty_result": "No se encuentro articulo con esta busqueda. Tal vez extender la busqueda?",
"search": "",
"filter-streams": "",
"stream-status": "",
From 096bd12df6e2b73c6d3878544a2dd9039952c960 Mon Sep 17 00:00:00 2001
From: David Jay
Date: Wed, 22 Feb 2017 13:45:02 -0500
Subject: [PATCH 10/16] Loading new comments.
---
client/coral-embed-stream/src/Embed.js | 7 ++++
client/coral-embed-stream/src/LoadMore.js | 2 +-
client/coral-embed-stream/src/NewCount.js | 35 ++++++++++++++-----
.../coral-framework/graphql/queries/index.js | 5 +--
graph/typeDefs.graphql | 2 +-
5 files changed, 38 insertions(+), 13 deletions(-)
diff --git a/client/coral-embed-stream/src/Embed.js b/client/coral-embed-stream/src/Embed.js
index ac9acc931..487437203 100644
--- a/client/coral-embed-stream/src/Embed.js
+++ b/client/coral-embed-stream/src/Embed.js
@@ -100,6 +100,10 @@ class Embed extends Component {
return ;
}
+ // Find the created_at date of the first comment. If no comments exist, set the date to a week ago.
+ const firstCommentDate = asset.comments[0] ? asset.comments[0].created_at
+ : new Date(Date.now() - 604800000);
+
return (
@@ -155,6 +159,9 @@ class Embed extends Component {
commentCount={asset.commentCount}
countCache={countCache[asset.id]}
loadMore={this.props.loadMore}
+ firstCommentDate={firstCommentDate}
+ assetId={asset.id}
+ updateCountCache={this.props.updateCountCache}
/>
{
}
const cursor = parentId
- ? comments[1].created_at
+ ? comments[0].created_at
: comments[comments.length - 1].created_at;
loadMore({
diff --git a/client/coral-embed-stream/src/NewCount.js b/client/coral-embed-stream/src/NewCount.js
index ded006325..99e1297e9 100644
--- a/client/coral-embed-stream/src/NewCount.js
+++ b/client/coral-embed-stream/src/NewCount.js
@@ -1,18 +1,35 @@
import React, {PropTypes} from 'react';
-const NewCount = ({commentCount, countCache}) =>
- {
- countCache && commentCount - countCache > 0 &&
-
- Load {commentCount - countCache} More Comments
-
- }
-
;
+const onLoadMoreClick = ({loadMore, commentCount, firstCommentDate, assetId, updateCountCache}) => (e) => {
+ e.preventDefault();
+ updateCountCache(assetId, commentCount);
+ loadMore({
+ limit: 500,
+ cursor: firstCommentDate,
+ assetId,
+ sort: 'CHRONOLOGICAL'
+ }, true);
+};
+
+const NewCount = (props) => {
+ const newComments = props.commentCount - props.countCache;
+
+ return
+ {
+ props.countCache && newComments > 0 &&
+
+ Load {newComments} More Comments
+
+ }
+
;
+};
NewCount.propTypes = {
commentCount: PropTypes.number.isRequired,
countCache: PropTypes.number,
- loadMore: PropTypes.func.isRequired
+ loadMore: PropTypes.func.isRequired,
+ assetId: PropTypes.string.isRequired,
+ firstCommentDate: PropTypes.string.isRequired
};
export default NewCount;
diff --git a/client/coral-framework/graphql/queries/index.js b/client/coral-framework/graphql/queries/index.js
index 494ffa30e..9b8a55134 100644
--- a/client/coral-framework/graphql/queries/index.js
+++ b/client/coral-framework/graphql/queries/index.js
@@ -39,7 +39,7 @@ export const getCounts = (data) => ({asset_id, limit, sort}) => {
});
};
-export const loadMore = (data) => ({limit, cursor, parent_id, asset_id, sort}) => {
+export const loadMore = (data) => ({limit, cursor, parent_id, asset_id, sort}, newComments) => {
return data.fetchMore({
query: LOAD_MORE,
variables: {
@@ -68,7 +68,8 @@ export const loadMore = (data) => ({limit, cursor, parent_id, asset_id, sort}) =
...oldData,
asset: {
...oldData.asset,
- comments: [...oldData.asset.comments, ...new_top_level_comments]
+ comments: newComments ? [...new_top_level_comments.reverse(), ...oldData.asset.comments]
+ : [...oldData.asset.comments, ...new_top_level_comments]
}
}
});
diff --git a/graph/typeDefs.graphql b/graph/typeDefs.graphql
index 72a54a0cd..7db4dbad8 100644
--- a/graph/typeDefs.graphql
+++ b/graph/typeDefs.graphql
@@ -448,7 +448,7 @@ type RootQuery {
# Comments returned based on a query.
comments(query: CommentsQuery!): [Comment]
- # Returne the count of comments satisfied by the query. Note that this edge is
+ # Return the count of comments satisfied by the query. Note that this edge is
# expensive as it is not batched. Requires the `ADMIN` role.
commentCount(query: CommentCountQuery!): Int
From 6becb88b560306842726acd90a54f07ad9d93696 Mon Sep 17 00:00:00 2001
From: David Jay
Date: Wed, 22 Feb 2017 15:07:32 -0500
Subject: [PATCH 11/16] Adding style to new comments button.
---
client/coral-embed-stream/src/NewCount.js | 13 +++++++++----
client/coral-embed-stream/style/default.css | 12 ++++++++++--
client/coral-framework/translations.json | 3 +++
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/client/coral-embed-stream/src/NewCount.js b/client/coral-embed-stream/src/NewCount.js
index 99e1297e9..429ecc113 100644
--- a/client/coral-embed-stream/src/NewCount.js
+++ b/client/coral-embed-stream/src/NewCount.js
@@ -1,4 +1,7 @@
import React, {PropTypes} from 'react';
+import I18n from 'coral-framework/modules/i18n/i18n';
+import translations from 'coral-framework/translations.json';
+const lang = new I18n(translations);
const onLoadMoreClick = ({loadMore, commentCount, firstCommentDate, assetId, updateCountCache}) => (e) => {
e.preventDefault();
@@ -14,12 +17,14 @@ const onLoadMoreClick = ({loadMore, commentCount, firstCommentDate, assetId, upd
const NewCount = (props) => {
const newComments = props.commentCount - props.countCache;
- return
+ return
{
props.countCache && newComments > 0 &&
-
- Load {newComments} More Comments
-
+
}
;
};
diff --git a/client/coral-embed-stream/style/default.css b/client/coral-embed-stream/style/default.css
index 1deae6026..0e4f7e4a6 100644
--- a/client/coral-embed-stream/style/default.css
+++ b/client/coral-embed-stream/style/default.css
@@ -336,18 +336,26 @@ button.coral-load-more {
text-align: center;
color: #FFF;
background-color: #2376D8;
+ cursor: pointer;
}
button.coral-load-more:hover {
background-color: #4399FF;
}
-.coral-load-more-replies {
+.coral-load-more-replies, .coral-new-comments {
width: 100%;
display: flex;
justify-content: center;
+ cursor: pointer;
}
-.coral-load-more-replies button.coral-load-more {
+.coral-new-comments {
+ position: relative;
+ top: 1.8em;
+ z-index: 100;
+}
+
+.coral-load-more-replies button.coral-load-more, .coral-new-comments button.coral-load-more{
width: initial;
}
diff --git a/client/coral-framework/translations.json b/client/coral-framework/translations.json
index 2884178b6..23405d2d8 100644
--- a/client/coral-framework/translations.json
+++ b/client/coral-framework/translations.json
@@ -11,6 +11,9 @@
"button": "Submit",
"error": "Usernames can contain letters, numbers and _ only"
},
+ "newCount": "View {0} more {1}",
+ "comment": "comment",
+ "comments": "comments",
"error": {
"emailNotVerified": "Email address {0} not verified.",
"email": "Not a valid E-Mail",
From bb0b3f461a7a7809f7adf5821e59dc7e37c55317 Mon Sep 17 00:00:00 2001
From: David Jay
Date: Wed, 22 Feb 2017 15:11:50 -0500
Subject: [PATCH 12/16] Moving polling interval to constant.
---
client/coral-embed-stream/src/Stream.js | 3 ++-
client/coral-framework/constants/comments.js | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/client/coral-embed-stream/src/Stream.js b/client/coral-embed-stream/src/Stream.js
index e68a223ca..89a637ceb 100644
--- a/client/coral-embed-stream/src/Stream.js
+++ b/client/coral-embed-stream/src/Stream.js
@@ -1,5 +1,6 @@
import React, {PropTypes} from 'react';
import Comment from './Comment';
+import {NEW_COMMENT_COUNT_POLL_INTERVAL} from 'coral-framework/constants/comments';
class Stream extends React.Component {
@@ -33,7 +34,7 @@ class Stream extends React.Component {
asset_id: asset.id,
limit: asset.comments.length,
sort: 'REVERSE_CHRONOLOGICAL'
- }), 5000),
+ }), NEW_COMMENT_COUNT_POLL_INTERVAL),
});
}
diff --git a/client/coral-framework/constants/comments.js b/client/coral-framework/constants/comments.js
index 17ea2223e..28db9cdf9 100644
--- a/client/coral-framework/constants/comments.js
+++ b/client/coral-framework/constants/comments.js
@@ -1 +1,2 @@
export const ADDTL_COMMENTS_ON_LOAD_MORE = 10;
+export const NEW_COMMENT_COUNT_POLL_INTERVAL = 20000;
From 27bd1404b38181b15e7ea31528215a8841f566f8 Mon Sep 17 00:00:00 2001
From: David Jay
Date: Wed, 22 Feb 2017 15:13:46 -0500
Subject: [PATCH 13/16] Adding es translation.
---
client/coral-framework/translations.json | 3 +++
1 file changed, 3 insertions(+)
diff --git a/client/coral-framework/translations.json b/client/coral-framework/translations.json
index 23405d2d8..c817925eb 100644
--- a/client/coral-framework/translations.json
+++ b/client/coral-framework/translations.json
@@ -42,6 +42,9 @@
"bannedAccountMsg": "Tu cuenta se encuentra suspendida. Esto significa que no puedes dar Like, Marcar o escribir commentarios. Por favor, contacta moderator@fakeurl for more information",
"editNameMsg": "",
"loadMore": "Ver más",
+ "newCount": "Ver {0} {1} más",
+ "comment": "commentario",
+ "comments": "commentarios",
"error": {
"emailNotVerified": "Dirección de correo electrónico {0} no verificada.",
"email": "No es un email válido",
From 953c749bd2521806308387bedd06ee22dfa78708 Mon Sep 17 00:00:00 2001
From: Riley Davis
Date: Wed, 22 Feb 2017 16:14:14 -0700
Subject: [PATCH 14/16] show login page instead of communicorn :'(
---
client/coral-admin/src/actions/auth.js | 2 +-
client/coral-admin/src/containers/LayoutContainer.js | 6 +++++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/client/coral-admin/src/actions/auth.js b/client/coral-admin/src/actions/auth.js
index bdb101362..c2f3a8056 100644
--- a/client/coral-admin/src/actions/auth.js
+++ b/client/coral-admin/src/actions/auth.js
@@ -9,7 +9,7 @@ const checkLoginFailure = error => ({type: actions.CHECK_LOGIN_FAILURE, error});
export const checkLogin = () => dispatch => {
dispatch(checkLoginRequest());
- coralApi('/auth')
+ return coralApi('/auth')
.then(result => {
const isAdmin = !!result.user.roles.filter(i => i === 'ADMIN').length;
dispatch(checkLoginSuccess(result.user, isAdmin));
diff --git a/client/coral-admin/src/containers/LayoutContainer.js b/client/coral-admin/src/containers/LayoutContainer.js
index 225e92884..5ce208503 100644
--- a/client/coral-admin/src/containers/LayoutContainer.js
+++ b/client/coral-admin/src/containers/LayoutContainer.js
@@ -8,7 +8,11 @@ import {PermissionRequired} from '../components/PermissionRequired';
class LayoutContainer extends Component {
componentWillMount () {
const {checkLogin} = this.props;
- checkLogin();
+ checkLogin().then(() => {
+ if (!this.props.auth.isAdmin) {
+ location.href = '/admin/login';
+ }
+ });
}
render () {
const {isAdmin, loggedIn, loadingUser} = this.props.auth;
From 7ae81fd17269e3954a233fcb28b3a9959f9b147b Mon Sep 17 00:00:00 2001
From: Riley Davis
Date: Thu, 23 Feb 2017 09:43:50 -0700
Subject: [PATCH 15/16] fixing mixed types
---
client/coral-embed-stream/src/Embed.js | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/client/coral-embed-stream/src/Embed.js b/client/coral-embed-stream/src/Embed.js
index 487437203..5e979d243 100644
--- a/client/coral-embed-stream/src/Embed.js
+++ b/client/coral-embed-stream/src/Embed.js
@@ -101,8 +101,9 @@ class Embed extends Component {
}
// Find the created_at date of the first comment. If no comments exist, set the date to a week ago.
- const firstCommentDate = asset.comments[0] ? asset.comments[0].created_at
- : new Date(Date.now() - 604800000);
+ const firstCommentDate = asset.comments[0]
+ ? asset.comments[0].created_at
+ : new Date(Date.now() - 1000 * 60 * 60 * 24 * 7).toISOString();
return (
From e3b9799d4a2125377679652723eeaf8b3679fe50 Mon Sep 17 00:00:00 2001
From: Riley Davis
Date: Thu, 23 Feb 2017 09:58:31 -0700
Subject: [PATCH 16/16] nested ternaries hurt me
---
.../coral-framework/graphql/queries/index.js | 49 +++++++++++--------
1 file changed, 29 insertions(+), 20 deletions(-)
diff --git a/client/coral-framework/graphql/queries/index.js b/client/coral-framework/graphql/queries/index.js
index 9b8a55134..c993dfb6a 100644
--- a/client/coral-framework/graphql/queries/index.js
+++ b/client/coral-framework/graphql/queries/index.js
@@ -49,29 +49,38 @@ export const loadMore = (data) => ({limit, cursor, parent_id, asset_id, sort}, n
asset_id,
sort
},
- updateQuery: (oldData, {fetchMoreResult:{data:{new_top_level_comments}}}) =>
+ updateQuery: (oldData, {fetchMoreResult:{data:{new_top_level_comments}}}) => {
- // If loading more replies
- parent_id ? {
- ...oldData,
- asset: {
- ...oldData.asset,
- comments: oldData.asset.comments.map((comment) =>
- comment.id === parent_id
- ? {...comment, replies: [...comment.replies, ...new_top_level_comments]}
- : comment)
- }
+ let updatedAsset;
+
+ if (parent_id) {
+
+ // If loading more replies
+ updatedAsset = {
+ ...oldData,
+ asset: {
+ ...oldData.asset,
+ comments: oldData.asset.comments.map((comment) =>
+ comment.id === parent_id
+ ? {...comment, replies: [...comment.replies, ...new_top_level_comments]}
+ : comment)
+ }
+ };
+ } else {
+
+ // If loading more top-level comments
+ updatedAsset = {
+ ...oldData,
+ asset: {
+ ...oldData.asset,
+ comments: newComments ? [...new_top_level_comments.reverse(), ...oldData.asset.comments]
+ : [...oldData.asset.comments, ...new_top_level_comments]
+ }
+ };
}
- // If loading more top-level comments
- : {
- ...oldData,
- asset: {
- ...oldData.asset,
- comments: newComments ? [...new_top_level_comments.reverse(), ...oldData.asset.comments]
- : [...oldData.asset.comments, ...new_top_level_comments]
- }
- }
+ return updatedAsset;
+ }
});
};