diff --git a/gatsby-node.js b/gatsby-node.js
index b3fa858..7e20d40 100644
--- a/gatsby-node.js
+++ b/gatsby-node.js
@@ -158,6 +158,43 @@ exports.createPages = ({ actions, graphql }) => {
component: programTemplate,
})
})
+ .then(() => {
+ return graphql(`
+ {
+ allWordpressWpEventType(filter: { count: { gt: 0 } }) {
+ edges {
+ node {
+ id
+ name
+ slug
+ fields {
+ link
+ }
+ }
+ }
+ }
+ }
+ `)
+ })
+ .then(result => {
+ if (result.errors) {
+ result.errors.forEach(e => console.error(e.toString()))
+ return Promise.reject(result.errors)
+ }
+
+ const eventTypeTemplate = path.resolve(`./src/templates/event-type.js`)
+
+ _.each(result.data.allWordpressWpEventType.edges, ({ node: event_type }) => {
+ createPage({
+ path: event_type.fields.link,
+ component: eventTypeTemplate,
+ context: {
+ name: event_type.name,
+ slug: event_type.slug,
+ },
+ })
+ })
+ })
.then(() => {
return graphql(`
{
@@ -276,7 +313,8 @@ exports.onCreateNode = ({ node, actions, getNode }) => {
}
if ((node.internal.type === 'wordpress__POST') ||
- (node.internal.type === 'wordpress__wp_events')) {
+ (node.internal.type === 'wordpress__wp_events') ||
+ (node.internal.type === 'wordpress__wp_event_type')) {
const link = new URL(node.link).pathname
createNodeField({
node,
diff --git a/src/components/EventList.js b/src/components/EventList.js
index c87cf8a..4d03797 100644
--- a/src/components/EventList.js
+++ b/src/components/EventList.js
@@ -8,19 +8,50 @@ import 'moment/locale/nb'
moment.locale('nb')
export default class EventList extends React.Component {
- formatDate(dt) {
- return moment(dt).format('D. MMMM')
- }
-
- formatTime(dt) {
- return moment(dt).format('HH:mm')
- }
-
- formatTimes(start, end, sep) {
- if (!end) {
- return this.formatTime(start)
- }
- return this.formatTime(start) + sep + this.formatTime(end)
+ render_event(event) {
+ console.log(event)
+ return (
+
+
+ {event.featured_media && event.featured_media.localFile &&
+
![]()
}
+
+
+
+ )
}
render() {
@@ -31,25 +62,7 @@ export default class EventList extends React.Component {
{title}
{events.map(({ node: event }) => (
-
-
- {event.featured_media && event.featured_media.localFile &&
-
![]()
}
-
-
-
+ this.render_event(event)
))}
@@ -63,6 +76,15 @@ EventList.propTypes = {
}
export const pageQuery = graphql`
+ fragment EventTypeFields on wordpress__wp_events {
+ event_type {
+ name
+ slug
+ fields {
+ link
+ }
+ }
+ }
fragment EventListFields on wordpress__wp_events {
id
title
@@ -76,5 +98,12 @@ export const pageQuery = graphql`
fields {
link
}
+ event_type {
+ name
+ slug
+ fields {
+ link
+ }
+ }
}
`
diff --git a/src/templates/event-type.js b/src/templates/event-type.js
new file mode 100644
index 0000000..d5996c7
--- /dev/null
+++ b/src/templates/event-type.js
@@ -0,0 +1,48 @@
+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 EventTypeProgram extends React.Component {
+ render() {
+ const { data, pageContext } = this.props
+ const { edges: events, totalCount } = data.allWordpressWpEvents
+ const { name: eventTypeName } = pageContext
+
+ return (
+
+
+
+ )
+ }
+}
+
+EventTypeProgram.propTypes = {
+ data: PropTypes.shape({
+ allWordpressWpEventType: PropTypes.shape({
+ edges: PropTypes.array,
+ }),
+ }),
+}
+
+export const pageQuery = graphql`
+ query EventTypeProgramPage($slug: String!) {
+ site {
+ siteMetadata {
+ title
+ }
+ }
+ allWordpressWpEvents(
+ filter: { event_type: { elemMatch: { slug: { eq: $slug } } } },
+ sort: { fields: date, order: DESC }
+ ) {
+ totalCount
+ edges {
+ node {
+ ...EventListFields
+ }
+ }
+ }
+ }
+`
diff --git a/src/templates/event.js b/src/templates/event.js
index 2861a4f..8c6a04f 100644
--- a/src/templates/event.js
+++ b/src/templates/event.js
@@ -30,7 +30,8 @@ export const EventTemplate = ({
facebookUrl,
ticketUrl,
priceStudent,
- priceRegular
+ priceRegular,
+ eventTypes
}) => {
return (
@@ -53,12 +54,12 @@ export const EventTemplate = ({
{moment(startTime).format('YYYY')}
}
-
+
Start: {moment(startTime).format('HH:mm')}
{/* TODO: make the API stop assuming event duration is 2 hours when unspecified? */}
{endTime &&
-
+
Slutt: {moment(endTime).format('HH:mm')}
}
@@ -71,6 +72,20 @@ export const EventTemplate = ({
{facebookUrl &&
Se Facebook-event
}
+ {eventTypes && eventTypes.length &&
+
+
Konsept
+
+ {eventTypes.map(type => (
+ -
+
+ {type.name}
+
+
+ ))}
+
+
+ }
@@ -107,10 +122,7 @@ const Event = ({ data }) => {
ticketUrl={event.ticket_url}
priceStudent={event.price_member}
priceRegular={event.price_regular}
- // categories={post.categories}
- // tags={post.tags}
- // date={post.date}
- // author={post.author}
+ eventTypes={event.event_type}
/>
)
@@ -125,12 +137,6 @@ Event.propTypes = {
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
@@ -149,6 +155,7 @@ export const eventQuery = graphql`
...FluidImage
}
}
+ ...EventTypeFields
}
}
`