Skip to content

Commit ad26eed

Browse files
committed
feat: use partner categories for grouping
1 parent b693fb1 commit ad26eed

File tree

2 files changed

+67
-20
lines changed

2 files changed

+67
-20
lines changed

app/src/components/PartnersList.tsx

+42-18
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,55 @@
11
import DirectusImage from "./DirectusImage";
2-
import { locale, translate } from "@/locales";
2+
import { getTranslation } from "@/locales";
33
import styles from "@/styles/PartnersList.module.scss";
4-
import { Partner } from "@/types/aliases";
4+
import { Partner, PartnerCategory } from "@/types/aliases";
55
import Link from "next/link";
66
import { useRouter } from "next/router";
77

8-
export default function PartnersList({ partners }: { partners: Partner[] }) {
9-
if (partners.length == 0) {
10-
return;
8+
function PartnerDisplay({ p }: { p: Partner }) {
9+
return (
10+
<Link href={p.link || ""} key={p.id}>
11+
<DirectusImage img={p.logo} name={p.name} className={styles.logo} />
12+
</Link>
13+
);
14+
}
15+
16+
function PartnerCategoryDisplay({
17+
c,
18+
p,
19+
}: {
20+
c: PartnerCategory;
21+
p: Partner[];
22+
}) {
23+
const router = useRouter();
24+
const entries = p
25+
.filter((p) => Date.parse(p.end || "01/01/1970") > Date.now())
26+
.map((p) => <PartnerDisplay key={p.id} p={p} />);
27+
28+
if (entries.length === 0) {
29+
console.log("noooo");
30+
return <></>;
1131
}
1232

13-
var list: any = [];
14-
partners.forEach((p) => {
15-
list.push(
16-
<Link href={p.link || ""} key={p.id}>
17-
<DirectusImage img={p.logo} name={p.name} className={styles.logo} />
18-
</Link>
19-
);
20-
});
33+
return (
34+
<>
35+
<h1 className="light">{getTranslation(c, router.locale).name}</h1>
36+
<div className={styles.list}>{entries}</div>
37+
</>
38+
);
39+
}
40+
41+
export default function PartnersList({
42+
partners,
43+
}: {
44+
partners: [PartnerCategory, Partner[]][];
45+
}) {
46+
partners.sort((a, b) => (b[0].rank || Infinity) - (a[0].rank || Infinity));
2147

22-
var router = useRouter();
2348
return (
2449
<div className={styles.partnersList}>
25-
<h1 className="light">
26-
{translate("partners", locale(router), { capitalize: true })}{" "}
27-
</h1>
28-
<div className={styles.list}>{list}</div>
50+
{partners.map((e) => (
51+
<PartnerCategoryDisplay key={e[0].id} c={e[0]} p={e[1]} />
52+
))}
2953
</div>
3054
);
3155
}

app/src/pages/index.tsx

+25-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
Member,
1616
News,
1717
Partner,
18+
PartnerCategory,
1819
PublicFiles,
1920
SocialLink,
2021
} from "@/types/aliases";
@@ -28,6 +29,21 @@ export default function Home(
2829
const router = useRouter();
2930
const translation = getTranslation(props.association, router.locale);
3031

32+
var orderedPartners = props.partners.reduce(
33+
(list: [PartnerCategory, Partner[]][], partner: Partner) => {
34+
var entry = list.find(
35+
(e) => e[0].rank === (partner.category as PartnerCategory).rank
36+
);
37+
if (entry) {
38+
entry[1].push(partner);
39+
} else {
40+
list.push([partner.category as PartnerCategory, [partner]]);
41+
}
42+
return list;
43+
},
44+
[]
45+
);
46+
3147
return (
3248
<>
3349
<div className={styles.divLogo}>
@@ -53,7 +69,7 @@ export default function Home(
5369
/>
5470
</div>
5571

56-
<PartnersList partners={props.partners} />
72+
<PartnersList partners={orderedPartners} />
5773

5874
<AssociationDescription
5975
association={props.association}
@@ -84,7 +100,14 @@ export const getServerSideProps: GetServerSideProps<{
84100
partners: (await directus()
85101
.request(
86102
readItems("association_partners", {
87-
fields: [{ partners_id: ["*"] }],
103+
fields: [
104+
{
105+
partners_id: [
106+
"*",
107+
{ category: ["*", { translations: ["*"] }] },
108+
],
109+
},
110+
],
88111
})
89112
)
90113
.then((result) => result.map((p) => p.partners_id))) as Partner[],

0 commit comments

Comments
 (0)