@@ -9,6 +9,7 @@ const url = require(`url`)
9
9
const getpkgjson = require ( `get-package-json-from-github` )
10
10
const parseGHUrl = require ( `parse-github-url` )
11
11
const { GraphQLClient } = require ( `graphql-request` )
12
+ const moment = require ( `moment` )
12
13
13
14
let ecosystemFeaturedItems
14
15
@@ -156,6 +157,7 @@ exports.createPages = ({ graphql, actions }) => {
156
157
fields {
157
158
slug
158
159
package
160
+ released
159
161
}
160
162
frontmatter {
161
163
title
@@ -251,9 +253,13 @@ exports.createPages = ({ graphql, actions }) => {
251
253
return undefined
252
254
} )
253
255
256
+ const releasedBlogPosts = blogPosts . filter ( post =>
257
+ _ . get ( post , `node.fields.released` )
258
+ )
259
+
254
260
// Create blog-list pages.
255
261
const postsPerPage = 8
256
- const numPages = Math . ceil ( blogPosts . length / postsPerPage )
262
+ const numPages = Math . ceil ( releasedBlogPosts . length / postsPerPage )
257
263
258
264
Array . from ( { length : numPages } ) . forEach ( ( _ , i ) => {
259
265
createPage ( {
@@ -270,7 +276,9 @@ exports.createPages = ({ graphql, actions }) => {
270
276
271
277
// Create blog-post pages.
272
278
blogPosts . forEach ( ( edge , index ) => {
273
- const next = index === 0 ? null : blogPosts [ index - 1 ] . node
279
+ let next = index === 0 ? null : blogPosts [ index - 1 ] . node
280
+ if ( next && ! _ . get ( next , `fields.released` ) ) next = null
281
+
274
282
const prev =
275
283
index === blogPosts . length - 1 ? null : blogPosts [ index + 1 ] . node
276
284
@@ -285,7 +293,7 @@ exports.createPages = ({ graphql, actions }) => {
285
293
} )
286
294
} )
287
295
288
- const tagLists = blogPosts
296
+ const tagLists = releasedBlogPosts
289
297
. filter ( post => _ . get ( post , `node.frontmatter.tags` ) )
290
298
. map ( post => _ . get ( post , `node.frontmatter.tags` ) )
291
299
@@ -409,7 +417,7 @@ exports.createPages = ({ graphql, actions }) => {
409
417
} )
410
418
}
411
419
412
- // Create slugs for files.
420
+ // Create slugs for files, set released status for blog posts .
413
421
exports . onCreateNode = ( { node, actions, getNode, reporter } ) => {
414
422
const { createNodeField } = actions
415
423
let slug
@@ -442,6 +450,16 @@ exports.onCreateNode = ({ node, actions, getNode, reporter }) => {
442
450
} else {
443
451
slug = `/${ parsedFilePath . dir } /`
444
452
}
453
+
454
+ // Set released status for blog posts.
455
+ if ( _ . includes ( parsedFilePath . dir , `blog` ) ) {
456
+ let released = false
457
+ const date = _ . get ( node , `frontmatter.date` )
458
+ if ( date ) {
459
+ released = moment ( ) . isSameOrAfter ( moment . utc ( date ) )
460
+ }
461
+ createNodeField ( { node, name : `released` , value : released } )
462
+ }
445
463
}
446
464
// Add slugs for package READMEs.
447
465
if (
@@ -605,7 +623,7 @@ exports.onCreateNode = ({ node, actions, getNode, reporter }) => {
605
623
606
624
exports . onCreatePage = ( { page, actions } ) => {
607
625
// add lists of featured items to Ecosystem page
608
- if ( page . path === " /ecosystem/" ) {
626
+ if ( page . path === ` /ecosystem/` ) {
609
627
const { createPage, deletePage } = actions
610
628
const oldPage = Object . assign ( { } , page )
611
629
0 commit comments