mirror of
https://github.com/bellingcat/ukraine-timemap.git
synced 2026-06-11 12:58:35 +03:00
Add selector and reducer for narrative
This commit is contained in:
@@ -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(''),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,6 +7,7 @@ const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl')
|
||||
const initial = {
|
||||
domain: {
|
||||
events: [],
|
||||
narratives: [],
|
||||
locations: [],
|
||||
|
||||
categories: [],
|
||||
|
||||
Reference in New Issue
Block a user