51 lines
1.1 KiB
JavaScript
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();
|