44 lines
1017 B
JavaScript
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();
|