Add selector and reducer for narrative

This commit is contained in:
Franc Camps-Febrer
2018-11-12 15:18:11 -05:00
parent 6727d88e4e
commit bd0e6b673e
3 changed files with 46 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ const eventSchema = Joi.object().keys({
longitude: Joi.string().required(),
type: Joi.string().allow(''),
category: Joi.string().required(),
narrative: Joi.string().allow(''),
source: Joi.string().allow(''),
tags: Joi.string().allow(''),
comments: Joi.string().allow(''),

View File

@@ -49,6 +49,7 @@ export const getFilteredEvents = createSelector(
const isRange = (rangeFilter[0] < d3.timeParse('%Y-%m-%dT%H:%M:%S')(value.timestamp)) &&
(d3.timeParse('%Y-%m-%dT%H:%M:%S')(value.timestamp) < rangeFilter[1])
<<<<<<< HEAD
if (isRange && isTagged) {
const event = Object.assign({}, value)
acc[event.id] = event
@@ -57,6 +58,49 @@ export const getFilteredEvents = createSelector(
}, [])
}
)
=======
const isRange = (rangeFilter[0] < d3.timeParse("%Y-%m-%dT%H:%M:%S")(value.timestamp)) &&
(d3.timeParse("%Y-%m-%dT%H:%M:%S")(value.timestamp) < rangeFilter[1]);
if (isRange && isTagged) {
const event = Object.assign({}, value);
acc[event.id] = event;
}
return acc;
}, []);
});
>>>>>>> Add selector and reducer for narrative
/**
* Of all available events, selects those that fall within the time range,
* and if TAGS are being used, select them if their tags are enabled
*/
const parseTimestamp = ts => d3.timeParse("%Y-%m-%dT%H:%M:%S")(ts);
export const getFilteredNarratives = createSelector(
[getEvents, getTagsFilter, getRangeFilter],
(events, tagFilters, rangeFilter) => {
const narratives = {};
events.forEach((evt) => {
const noTags = (tagFilters.length === 0 || !process.env.features.USE_TAGS || tagFilters.every(t => !t.active));
const isTagged = (noTags) || isTaggedIn(evt, tagFilters);
const isRange = (rangeFilter[0] < parseTimestamp(evt.timestamp)) &&
(parseTimestamp(evt.timestamp) < rangeFilter[1]);
if (isRange && isTagged && evt.narrative) {
if (!narratives[evt.narrative]) narratives[evt.narrative] = { key: evt.narrative, steps: [] };
narratives[evt.narrative].steps.push(evt);
}
});
Object.keys(narratives).forEach((key) => {
narratives[key].steps.sort((a, b) => {
return (parseTimestamp(a.timestamp) > parseTimestamp(b.timestamp));
});
})
return Object.values(narratives);
});
/**
* Of all the filtered events, group them by location and return a list of

View File

@@ -7,6 +7,7 @@ const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl')
const initial = {
domain: {
events: [],
narratives: [],
locations: [],
categories: [],