1 | const moment = require('moment-timezone');
|
2 | const { get } = require('./utils');
|
3 |
|
4 | const defaultOptions = {
|
5 | fieldName: 'draft',
|
6 | timezone: 'UTC',
|
7 | nodeType: 'MarkdownRemark',
|
8 | pickDate: node => node.frontmatter.date,
|
9 | pickDraft: node => node.frontmatter.draft,
|
10 | publishDraft: false,
|
11 | };
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | exports.onCreateNode = ({ node, actions, reporter }, pluginOptions) => {
|
18 | const { createNodeField } = actions;
|
19 |
|
20 | const options = {
|
21 | ...defaultOptions,
|
22 | ...pluginOptions,
|
23 | };
|
24 |
|
25 | if (node.internal.type !== options.nodeType) {
|
26 | return;
|
27 | }
|
28 |
|
29 |
|
30 | if (options.publishDraft === true) {
|
31 | createNodeField({
|
32 | node,
|
33 | name: options.fieldName,
|
34 | value: false,
|
35 | });
|
36 | return;
|
37 | }
|
38 |
|
39 | const date = get(() => options.pickDate(node));
|
40 | const draft = get(() => options.pickDraft(node));
|
41 |
|
42 | // node follows 'draft' value
|
43 | if (draft === true) {
|
44 | createNodeField({
|
45 | node,
|
46 | name: options.fieldName,
|
47 | value: true,
|
48 | });
|
49 | return;
|
50 | }
|
51 |
|
52 |
|
53 | if (!date) {
|
54 | createNodeField({
|
55 | node,
|
56 | name: options.fieldName,
|
57 | value: false,
|
58 | });
|
59 | return;
|
60 | }
|
61 |
|
62 |
|
63 | const nodeDate = moment.tz(date, options.timezone);
|
64 | const nowDate = moment().tz(options.timezone);
|
65 | const isDraft = nowDate.isSameOrBefore(nodeDate);
|
66 |
|
67 | createNodeField({
|
68 | node,
|
69 | name: options.fieldName,
|
70 | value: isDraft,
|
71 | });
|
72 | };
|