From cbe7107038b30796336a20f1de7f1ad227086cd2 Mon Sep 17 00:00:00 2001 From: Jonas Braathen Date: Tue, 7 May 2019 02:27:14 +0200 Subject: [PATCH] Link events to venues, but handle custom venues --- .eslintrc.json | 3 ++- src/templates/event.js | 24 +++++++++++++++++++++--- src/wordpress.js | 41 ++++++++++++++++++++++++++++++++--------- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index ace6f1f..4cef231 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,7 +6,8 @@ "react/prefer-stateless-function": "off", "react/require-default-props": "off", "react/no-danger": "off", - "react/jsx-one-expression-per-line": "off" + "react/jsx-one-expression-per-line": "off", + "no-underscore-dangle": "off" }, "settings": { "import/core-modules": [] diff --git a/src/templates/event.js b/src/templates/event.js index 2b437c0..21062c5 100644 --- a/src/templates/event.js +++ b/src/templates/event.js @@ -28,6 +28,7 @@ export const EventTemplate = ({ startTime, endTime, venue, + venueCustom, facebookUrl, ticketUrl, priceStudent, @@ -41,7 +42,17 @@ export const EventTemplate = ({

{title}

-
i {venue}
+
+ {venueCustom && {venueCustom}} + {venue && venue.title !== 'Hele huset' && ( + + {venue.preposition} {venue.title} + + )} + {venue && venue.title === 'Hele huset' && ( + på Chateau Neuf + )} +
{moment(startTime).format('dddd')}{' '} @@ -111,7 +122,8 @@ EventTemplate.propTypes = { featuredMedia: PropTypes.shape({}), startTime: PropTypes.string.isRequired, endTime: PropTypes.string, - venue: PropTypes.string, + venue: PropTypes.shape({}), + venueCustom: PropTypes.string, facebookUrl: PropTypes.string, ticketUrl: PropTypes.string, priceStudent: PropTypes.string, @@ -132,6 +144,7 @@ const Event = ({ data }) => { startTime={event.start_time} endTime={event.end_time} venue={event.venue} + venueCustom={event.venue_custom} facebookUrl={event.facebook_url} ticketUrl={event.ticket_url} priceStudent={event.price_member} @@ -160,7 +173,12 @@ export const eventQuery = graphql` content start_time end_time - venue + venue { + title + path + preposition + } + venue_custom facebook_url ticket_url price_member diff --git a/src/wordpress.js b/src/wordpress.js index cc88778..9a26ab1 100644 --- a/src/wordpress.js +++ b/src/wordpress.js @@ -2,14 +2,6 @@ const Entities = require('html-entities').AllHtmlEntities const htmlEntities = new Entities() -const neufNormalizer = ({ entities }) => { - entities = decodeTitles(entities) - entities = mapEventsToEventTypes(entities) - return entities -} - -exports.neufNormalizer = neufNormalizer - const decodeTitles = entities => { return entities.map(e => { if (e.title) { @@ -25,7 +17,7 @@ const mapEventsToEventTypes = entities => { return entities.map(e => { // Replace event types with links to their nodes. - let eventHasType = + const eventHasType = e.event_types && Array.isArray(e.event_types) && e.event_types.length if (eventTypes.length && eventHasType) { e.event_types___NODE = e.event_types.map( @@ -41,3 +33,34 @@ const mapEventsToEventTypes = entities => { return e }) } + +const mapEventsToVenues = entities => { + const venues = entities.filter(e => e.__type === 'wordpress__wp_venues') + + return entities.map(e => { + if (e.__type !== 'wordpress__wp_events') { + return e + } + // Replace venue IDs with links to their nodes. + const venueId = parseInt(e.venue_id, 10) + const eventHasVenueId = !Number.isNaN(venueId) + if (!eventHasVenueId) { + e.venue_custom = e.venue + } else { + e.venue_custom = null + e.venue___NODE = venues.find(obj => venueId === obj.wordpress_id).id + } + delete e.venue + delete e.venue_id + return e + }) +} + +const neufNormalizer = ({ entities }) => { + entities = decodeTitles(entities) + entities = mapEventsToEventTypes(entities) + entities = mapEventsToVenues(entities) + return entities +} + +exports.neufNormalizer = neufNormalizer