forked from AOEpeople/aoe_technology_radar
-
Notifications
You must be signed in to change notification settings - Fork 0
/
data.ts
104 lines (83 loc) · 2.47 KB
/
data.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import data from "../../data/data.json";
import config from "./config";
import { format } from "@/lib/format";
import { Flag, Item, Quadrant, Ring } from "@/lib/types";
export function getLabel(key: keyof typeof config.labels) {
return config.labels[key] || "";
}
export function getAppName() {
return getLabel("title");
}
export function getChartConfig() {
return config.chart;
}
export function getColors() {
return config.colors;
}
export function getFlags() {
return config.flags;
}
export function getFlag(flag: Flag) {
return config.flags[flag];
}
export function getRings(): Ring[] {
return config.rings;
}
export function getRing(id: string): Ring | undefined {
return getRings().find((r) => r.id === id);
}
export function getReleases(): string[] {
return data.releases;
}
export function getSocialLinks() {
return config.social;
}
export function getTags(): string[] {
return data.tags;
}
export function getEditUrl(props: { id: string; release: string }) {
if (!config.editUrl) return "";
return format(config.editUrl, props);
}
export function getQuadrants(): Quadrant[] {
return config.quadrants.map((q, i) => ({ ...q, position: i + 1 }));
}
export function getQuadrant(id: string): Quadrant | undefined {
return getQuadrants().find((q) => q.id === id);
}
export function getItems(quadrant?: string, featured?: boolean): Item[] {
return data.items.filter((item) => {
if (quadrant && item.quadrant !== quadrant) return false;
return !(featured && !item.featured);
}) as Item[];
}
export function getImprintUrl() {
return config.imprint;
}
export function getItem(id: string): Item | undefined {
return data.items.find((item) => item.id === id) as Item;
}
export const sortByFeaturedAndTitle = (a: Item, b: Item) =>
Number(b.featured) - Number(a.featured) || a.title.localeCompare(b.title);
export const groupItemsByRing = (items: Item[]) => {
return getRings().reduce(
(acc, ring) => {
const ringItems = items.filter((item) => item.ring === ring.id);
if (ringItems.length) acc[ring.id] = ringItems;
return acc;
},
{} as { [ringId: string]: Item[] },
);
};
export const groupItemsByQuadrant = (items: Item[]) => {
return getQuadrants().reduce(
(acc, quadrant) => {
const quadrantItems = items.filter(
(item) => item.quadrant === quadrant.id,
);
if (quadrantItems.length) acc[quadrant.id] = quadrantItems;
return acc;
},
{} as { [quadrantId: string]: Item[] },
);
};