Files
TechRadarAJR/common/model.js
2017-11-27 09:07:15 +01:00

51 lines
1.1 KiB
JavaScript

export const featuredOnly = items => items.filter(item => item.featured);
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();