22import { texts } from ' ../../i18n/home'
33import SectionTitle from ' ../SectionTitle.astro'
44import CenteredPanel from ' ../CenteredPanel.astro'
5- import type { ISponsor } from ' ../../types/sponsors'
5+ import type { ISponsor , TSponsorTier } from ' ../../types/sponsors'
66import SponsorsGroup from ' ./sponsors/SponsorsGroup.astro'
77
88const sponsors = Object .values (import .meta .glob (' ../../data/sponsors/*.md' , { eager: true })) as {
@@ -16,59 +16,38 @@ interface Props {
1616const { lang } = Astro .props
1717const t = texts [lang as keyof typeof texts ]
1818
19- function filterSponsorsByTier(tier : string ): ISponsor [] {
19+ function filterSponsorsByTier(tier : TSponsorTier ): ISponsor [] {
2020 return sponsors
2121 .filter ((s ) => s .frontmatter .tier === tier )
2222 .map ((s ) => s .frontmatter )
2323 .sort ((a , b ) => a .name .localeCompare (b .name ))
2424}
2525
26- const bronze = filterSponsorsByTier (' bronze' )
27- const silver = filterSponsorsByTier (' silver' )
28- const gold = filterSponsorsByTier (' gold' )
29- const platinum = filterSponsorsByTier (' platinum' )
30- const main = filterSponsorsByTier (' main' )
26+ const tierDefs: Array <{ key: TSponsorTier ; size: number ; color: string }> = [
27+ { key: ' main' , size: 280 , color: ' text-tier-main' },
28+ { key: ' platinum' , size: 170 , color: ' text-tier-platinum' },
29+ { key: ' gold' , size: 140 , color: ' text-tier-gold' },
30+ { key: ' silver' , size: 110 , color: ' text-tier-silver' },
31+ { key: ' bronze' , size: 90 , color: ' text-tier-bronze' },
32+ { key: ' community' , size: 140 , color: ' text-tier-community' },
33+ ]
3134---
3235
3336<div class =" flex flex-col items-center gap-6" >
3437 <SectionTitle title ={ t [' sponsors.title' ]} />
3538 <CenteredPanel text ={ t [' sponsors.description' ]} />
3639
3740 <div class =" w-full flex flex-col gap-10 mt-4" >
38- <SponsorsGroup
39- lang ={ lang }
40- title ={ t [' sponsors.main' ]}
41- sponsors ={ main }
42- tierColor =" text-tier-main"
43- size ={ 280 }
44- />
45- <SponsorsGroup
46- lang ={ lang }
47- title ={ t [' sponsors.platinum' ]}
48- sponsors ={ platinum }
49- tierColor =" text-tier-platinum"
50- size ={ 170 }
51- />
52- <SponsorsGroup
53- lang ={ lang }
54- title ={ t [' sponsors.gold' ]}
55- sponsors ={ gold }
56- tierColor =" text-tier-gold"
57- size ={ 140 }
58- />
59- <SponsorsGroup
60- lang ={ lang }
61- title ={ t [' sponsors.silver' ]}
62- sponsors ={ silver }
63- tierColor =" text-tier-silver"
64- size ={ 110 }
65- />
66- <SponsorsGroup
67- lang ={ lang }
68- title ={ t [' sponsors.bronze' ]}
69- sponsors ={ bronze }
70- tierColor =" text-tier-bronze"
71- size ={ 90 }
72- />
41+ {
42+ tierDefs .map ((tier ) => (
43+ <SponsorsGroup
44+ lang = { lang }
45+ title = { t [` sponsors.${tier .key } ` ]}
46+ sponsors = { filterSponsorsByTier (tier .key )}
47+ tierColor = { tier .color }
48+ size = { tier .size }
49+ />
50+ ))
51+ }
7352 </div >
7453</div >
0 commit comments