Link events to venues, but handle custom venues

This commit is contained in:
ponas committed 2019-05-07 02:27:14 +02:00
1 parent cb53037a8b
commit cbe7107038
3 files changed
+55 -13

No files matched your search

+2 -1
View File
@@ -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": []
+21 -3
View File
@@ -28,6 +28,7 @@ export const EventTemplate = ({
startTime,
endTime,
venue,
venueCustom,
facebookUrl,
ticketUrl,
priceStudent,
@@ -41,7 +42,17 @@ export const EventTemplate = ({
<div className="event-hero_text">
<h1>{title}</h1>
<div className="event-meta">
<div className="venue">i {venue}</div>
<div className="venue">
{venueCustom && <span>{venueCustom}</span>}
{venue && venue.title !== 'Hele huset' && (
<span>
{venue.preposition} <Link to={venue.path}>{venue.title}</Link>
</span>
)}
{venue && venue.title === 'Hele huset' && (
<span>på Chateau Neuf</span>
)}
</div>
<div className="event-date">
<span className="event-date-weekday">
{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
+32 -9
View File
@@ -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