mirror of
https://github.com/bellingcat/ukraine-timemap.git
synced 2026-06-12 21:38:35 +03:00
Modifying aggregatedpaths func to return paths as keys to object instead of just singular leaf
This commit is contained in:
@@ -7,7 +7,6 @@ import { getFilterIdxFromColorSet } from "../../common/utilities";
|
||||
/** recursively get an array of node keys to toggle */
|
||||
function getFiltersToToggle(filter, activeFilters) {
|
||||
const [key, children] = filter;
|
||||
|
||||
// base case: no children to recurse through
|
||||
if (children === {}) return [key];
|
||||
|
||||
@@ -21,18 +20,28 @@ function getFiltersToToggle(filter, activeFilters) {
|
||||
}
|
||||
|
||||
function aggregatePaths(filters) {
|
||||
function insertPath(children = {}, [headOfPath, ...remainder]) {
|
||||
const childKey = Object.keys(children).find((key) => key === headOfPath);
|
||||
if (!childKey) children[headOfPath] = {};
|
||||
if (remainder.length > 0) insertPath(children[headOfPath], remainder);
|
||||
function insertPath(
|
||||
children = {},
|
||||
[headOfPath, ...remainder],
|
||||
accumulatedPath
|
||||
) {
|
||||
const childKey = Object.keys(children).find((path) => {
|
||||
const splitPath = path.split("/");
|
||||
const pathLeaf = splitPath[splitPath.length - 1];
|
||||
return pathLeaf === headOfPath;
|
||||
});
|
||||
accumulatedPath.push(headOfPath);
|
||||
const accumulatedPlusHead = accumulatedPath.join("/");
|
||||
if (!childKey) children[accumulatedPlusHead] = {};
|
||||
if (remainder.length > 0)
|
||||
insertPath(children[accumulatedPlusHead], remainder, accumulatedPath);
|
||||
return children;
|
||||
}
|
||||
|
||||
const allPaths = [];
|
||||
filters.forEach((filterItem) => allPaths.push(filterItem.filter_paths));
|
||||
|
||||
const aggregatedPaths = allPaths.reduce(
|
||||
(children, path) => insertPath(children, path),
|
||||
(children, path) => insertPath(children, path, []),
|
||||
{}
|
||||
);
|
||||
return aggregatedPaths;
|
||||
|
||||
@@ -2,6 +2,7 @@ import Joi from "joi";
|
||||
|
||||
const associationsSchema = Joi.object().keys({
|
||||
id: Joi.string().allow("").required(),
|
||||
title: Joi.string().allow("").required(),
|
||||
desc: Joi.string().allow(""),
|
||||
mode: Joi.string().allow("").required(),
|
||||
filter_paths: Joi.array(),
|
||||
|
||||
@@ -137,6 +137,10 @@ export function validateDomain(domain, features) {
|
||||
// append events with datetime and sort
|
||||
sanitizedDomain.events = sanitizedDomain.events.filter((event, idx) => {
|
||||
event.id = idx;
|
||||
// if lat, long come in with commas, replace with decimal format
|
||||
event.latitude = event.latitude.replace(",", ".");
|
||||
event.longitude = event.longitude.replace(",", ".");
|
||||
|
||||
event.datetime = calcDatetime(event.date, event.time);
|
||||
if (!isValidDate(event.datetime)) {
|
||||
discardedDomain.events.push({
|
||||
|
||||
Reference in New Issue
Block a user