Files
TechRadarAJR/common/model.js
2017-02-20 20:12:34 +01:00

44 lines
1017 B
JavaScript

export const groupByQuadrants = (items) => (
items.reduce((quadrants, item) => ({
...quadrants,
[item.quadrant]: addItemToQuadrant(quadrants[item.quadrant], item),
}), {})
);
export const groupByRing = (items) => (
items.reduce((rings, item) => ({
...rings,
[item.ring]: addItemToList(rings[item.ring], item),
}), {})
);
export const groupByFirstLetter = (items) => {
const index = items.reduce((letterIndex, item) => ({
...letterIndex,
[getFirstLetter(item)]: addItemToList(letterIndex[getFirstLetter(item)], item),
}), {});
return Object.keys(index).sort().map((letter) => ({
letter,
items: index[letter],
}));
}
const addItemToQuadrant = (quadrant = {}, item) => ({
...quadrant,
[item.ring]: addItemToRing(quadrant[item.ring], item),
});
const addItemToList = (list = [], item) => ([
...list,
item,
]);
const addItemToRing = (ring = [], item) => ([
...ring,
item,
]);
export const getFirstLetter = (item) => item.title.substr(0,1).toUpperCase();