From b972f4305ef419537928ca2241648a40798ba23a Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Wed, 2 Aug 2017 00:04:11 +0700 Subject: [PATCH 1/3] Correctly determine the status of the asset --- client/coral-configure/containers/ConfigureStreamContainer.js | 2 +- client/coral-embed-stream/src/components/Stream.js | 2 +- client/coral-embed-stream/src/containers/Stream.js | 2 +- graph/typeDefs.graphql | 3 +++ models/asset.js | 4 ++-- test/server/routes/api/assets/index.js | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/client/coral-configure/containers/ConfigureStreamContainer.js b/client/coral-configure/containers/ConfigureStreamContainer.js index c9d36e357..e7b937030 100644 --- a/client/coral-configure/containers/ConfigureStreamContainer.js +++ b/client/coral-configure/containers/ConfigureStreamContainer.js @@ -16,7 +16,7 @@ class ConfigureStreamContainer extends Component { this.state = { changed: false, dirtySettings: props.asset.settings, - closedAt: (props.asset.closedAt === null ? 'open' : 'closed') + closedAt: !props.asset.isClosed ? 'open' : 'closed' }; this.toggleStatus = this.toggleStatus.bind(this); diff --git a/client/coral-embed-stream/src/components/Stream.js b/client/coral-embed-stream/src/components/Stream.js index 421a0cf7a..265dcfe8b 100644 --- a/client/coral-embed-stream/src/components/Stream.js +++ b/client/coral-embed-stream/src/components/Stream.js @@ -101,7 +101,7 @@ class Stream extends React.Component { editName } = this.props; const {keepCommentBox} = this.state; - const open = asset.closedAt === null; + const open = !asset.isClosed; // even though the permalinked comment is the highlighted one, we're displaying its parent + replies let highlightedComment = comment && getTopLevelParent(comment); diff --git a/client/coral-embed-stream/src/containers/Stream.js b/client/coral-embed-stream/src/containers/Stream.js index f97320c0a..de726f373 100644 --- a/client/coral-embed-stream/src/containers/Stream.js +++ b/client/coral-embed-stream/src/containers/Stream.js @@ -250,7 +250,7 @@ const fragments = { id title url - closedAt + isClosed created_at settings { moderation diff --git a/graph/typeDefs.graphql b/graph/typeDefs.graphql index 999aea51c..d2c1ffe1f 100644 --- a/graph/typeDefs.graphql +++ b/graph/typeDefs.graphql @@ -596,6 +596,9 @@ type Asset { # The date that the asset was closed at. closedAt: Date + # True if asset is closed. + isClosed: Boolean! + # Summary of all Actions against all entities associated with the Asset. # (likes, flags, etc.). Requires the `ADMIN` role. action_summaries: [AssetActionSummary!] diff --git a/models/asset.js b/models/asset.js index 1aeec34f3..d3a40852d 100644 --- a/models/asset.js +++ b/models/asset.js @@ -61,7 +61,7 @@ const AssetSchema = new Schema({ timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' - } + }, }); AssetSchema.index({ @@ -79,7 +79,7 @@ AssetSchema.index({ * Returns true if the asset is closed, false else. */ AssetSchema.virtual('isClosed').get(function() { - return this.closedAt && this.closedAt.getTime() <= new Date().getTime(); + return Boolean(this.closedAt && this.closedAt.getTime() <= new Date().getTime()); }); const Asset = mongoose.model('Asset', AssetSchema); diff --git a/test/server/routes/api/assets/index.js b/test/server/routes/api/assets/index.js index 63d3acb75..7fd6e68d1 100644 --- a/test/server/routes/api/assets/index.js +++ b/test/server/routes/api/assets/index.js @@ -43,7 +43,7 @@ describe('/api/v1/assets', () => { .set(passport.inject({roles: ['ADMIN']})) .then((res) => { const body = res.body; - + expect(body).to.have.property('count', 2); expect(body).to.have.property('result'); @@ -129,7 +129,7 @@ describe('/api/v1/assets', () => { return AssetsService.findOrCreateByUrl('http://test.com') .then((asset) => { - expect(asset).to.have.property('isClosed', null); + expect(asset).to.have.property('isClosed', false); expect(asset).to.have.property('closedAt', null); return chai.request(app) From b8f24b952b4e8d1fc4d93768bca9440b795b2b5f Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 3 Aug 2017 21:41:01 +0700 Subject: [PATCH 2/3] Automatically close stream when passed closedAt date --- .../src/components/Stream.js | 2 + .../src/containers/AutomaticAssetClosure.js | 77 +++++++++++++++++++ .../src/containers/Stream.js | 1 + 3 files changed, 80 insertions(+) create mode 100644 client/coral-embed-stream/src/containers/AutomaticAssetClosure.js diff --git a/client/coral-embed-stream/src/components/Stream.js b/client/coral-embed-stream/src/components/Stream.js index 265dcfe8b..1e0ff7ea9 100644 --- a/client/coral-embed-stream/src/components/Stream.js +++ b/client/coral-embed-stream/src/components/Stream.js @@ -19,6 +19,7 @@ import cn from 'classnames'; import {getTopLevelParent, attachCommentToParent} from '../graphql/utils'; import AllCommentsPane from './AllCommentsPane'; +import AutomaticAssetClosure from '../containers/AutomaticAssetClosure'; import styles from './Stream.css'; @@ -141,6 +142,7 @@ class Stream extends React.Component { return (
+ {comment &&