diff --git a/gatsby-node.js b/gatsby-node.js index 7f0569c..b3fa858 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -106,6 +106,58 @@ exports.createPages = ({ actions, graphql }) => { component: blogTemplate, }) }) + .then(() => { + return graphql(` + { + allWordpressWpEvents { + edges { + node { + id + slug + status + fields { + link + } + } + } + } + } + `) + }) + .then(result => { + if (result.errors) { + result.errors.forEach(e => console.error(e.toString())) + return Promise.reject(result.errors) + } + + const eventTemplate = path.resolve(`./src/templates/event.js`) + + // In production builds, filter for only published events. + const allEvents = result.data.allWordpressWpEvents.edges + const events = + process.env.NODE_ENV === 'production' + ? getOnlyPublished(allEvents) + : allEvents + + // Iterate over the array of events + _.each(events, ({ node: event }) => { + // Create the Gatsby page for this WordPress event + createPage({ + path: event.fields.link, + component: eventTemplate, + context: { + id: event.id, + }, + }) + }) + + // Create the event program + const programTemplate = path.resolve(`./src/templates/event-program.js`) + createPage({ + path: `/program/`, + component: programTemplate, + }) + }) .then(() => { return graphql(` { diff --git a/src/components/EventList.js b/src/components/EventList.js new file mode 100644 index 0000000..844c929 --- /dev/null +++ b/src/components/EventList.js @@ -0,0 +1,50 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { Link, graphql } from 'gatsby' + +export default class EventList extends React.Component { + render() { + const { events, title } = this.props + + return ( +
+

{title}

+
+ {events.map(({ node: event }) => ( +
+
+ + {event.title} + +
+
Start: {event.start_time}
+
Slutt: {event.end_time}
+
+
+
+ ))} +
+
+ ) + } +} + +EventList.propTypes = { + events: PropTypes.arrayOf(PropTypes.object), + title: PropTypes.string, +} + +export const pageQuery = graphql` + fragment EventListFields on wordpress__wp_events { + id + title + start_time(formatString: "MMMM DD, YYYY") + end_time(formatString: "MMMM DD, YYYY") + fields { + link + } + } +` diff --git a/src/templates/event-program.js b/src/templates/event-program.js new file mode 100644 index 0000000..83341dc --- /dev/null +++ b/src/templates/event-program.js @@ -0,0 +1,40 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { graphql } from 'gatsby' +import Layout from '../components/Layout' +import EventList from '../components/EventList' + +export default class EventProgram extends React.Component { + render() { + const { data } = this.props + const { edges: events } = data.allWordpressWpEvents + + return ( + + + + ) + } +} + +EventProgram.propTypes = { + data: PropTypes.shape({ + allWordpressWpEvents: PropTypes.shape({ + edges: PropTypes.array, + }), + }), +} + +export const pageQuery = graphql` + query { + allWordpressWpEvents( + sort: { fields: date, order: DESC } + ) { + edges { + node { + ...EventListFields + } + } + } + } +` diff --git a/src/templates/event.js b/src/templates/event.js new file mode 100644 index 0000000..8831c12 --- /dev/null +++ b/src/templates/event.js @@ -0,0 +1,69 @@ +import React from 'react' +import PropTypes from 'prop-types' +import Helmet from 'react-helmet' +import { graphql, Link } from 'gatsby' +import Layout from '../components/Layout' + +export const EventTemplate = ({ + content, + title, +}) => { + return ( +
+

+ {title} +

+
+
+ ) +} + +EventTemplate.propTypes = { + content: PropTypes.node.isRequired, + title: PropTypes.string, +} + +const Event = ({ data }) => { + const { wordpressWpEvents: event } = data + + return ( + + + + + ) +} + +Event.propTypes = { + data: PropTypes.shape({ + markdownRemark: PropTypes.object, + }), +} + +export default Event + +export const eventQuery = graphql` + fragment EventFields on wordpress__wp_events { + id + slug + content + title + } + query EventByID($id: String!) { + wordpressWpEvents(id: { eq: $id }) { + id + title + slug + content + start_time(formatString: "MMMM DD, YYYY") + end_time(formatString: "MMMM DD, YYYY") + } + } +`