A plugin that lets you mark posts and drafts and automatically exclude them from production.
How it works
This plugin add a new field called released to markdown and mdx nodes. If your build happens before date of your post the released value will set to false.
How to use
Add plugin to gatsby-node.js
module.exports = {
plugins: [
/*
...
*/
'gatsby-plugin-released'
]
};Update your GraphQL queries
You may want to exclude drafts from a build step in file gatsby-node.js and respect the released value from blog pages such as index.js.
In both cases the query will look something like this. Pay attention to a filter property.
const query = graphql(
`
{
allMarkdownRemark(
sort: { fields: [frontmatter___date], order: DESC }
filter: { fields: { released: { eq: true } } }
) {
edges {
node {
id
}
}
}
}
`
);Update your component code
This step is totally up to yours component tree. The key point is to request necessary fields via GraphQL query.
const query = graphql`
query {
allMarkdownRemark(
sort: { fields: [frontmatter___date], order: DESC }
filter: { fields: { released: { eq: true } } }
) {
edges {
node {
id
fields {
slug
released
releasedNotForced
}
}
}
}
}Options
module.exports = {
plugins: [
{
resolve: 'gatsby-plugin-released',
options: {
fieldName: 'released',
fieldNameNotForced: 'releasedNotForced',
timezone: 'UTC',
force: process.env.NODE_ENV === development
}
}
]
};fieldName and fieldNameNotForced
Use to overried the default field name.
force
In case you want to display posts in development mode you can use force option.
timezone
Set another timezone that will be respected at build time to calculate released value.