Skip to content
This repository was archived by the owner on Oct 7, 2025. It is now read-only.

Commit c06ac21

Browse files
committed
feat(api/web/sponsors): render data from CMS
1 parent d4361dd commit c06ac21

File tree

2 files changed

+60
-36
lines changed

2 files changed

+60
-36
lines changed

libs/website/ui/sponsorship/constants/sponsorship.constants.ts

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,72 @@
1+
/* eslint-disable antfu/no-top-level-await */
2+
// import type { Where } from 'payload'
13
import onePassword from '@cuhacking/shared/assets/logos/sponsors/1password.white.svg'
24
import balsamiq from '@cuhacking/shared/assets/logos/sponsors/balsamiq.white.svg'
3-
import beeceptor from '@cuhacking/shared/assets/logos/sponsors/beeceptor.svg'
5+
// import beeceptor from '@cuhacking/shared/assets/logos/sponsors/beeceptor.svg'
46
import bloomberg from '@cuhacking/shared/assets/logos/sponsors/bloomberg.white.svg'
5-
import cse from '@cuhacking/shared/assets/logos/sponsors/cse.svg'
7+
// import cse from '@cuhacking/shared/assets/logos/sponsors/cse.svg'
68
import digitalOcean from '@cuhacking/shared/assets/logos/sponsors/digital-ocean.white.svg'
79
import ea from '@cuhacking/shared/assets/logos/sponsors/ea.white.svg'
8-
import fullscript from '@cuhacking/shared/assets/logos/sponsors/fullscript.svg'
9-
import gadget from '@cuhacking/shared/assets/logos/sponsors/gadget.svg'
10+
// import fullscript from '@cuhacking/shared/assets/logos/sponsors/fullscript.svg'
11+
// import gadget from '@cuhacking/shared/assets/logos/sponsors/gadget.svg'
1012
import github from '@cuhacking/shared/assets/logos/sponsors/github.white.svg'
11-
import incogni from '@cuhacking/shared/assets/logos/sponsors/incogni.svg'
12-
import kefc from '@cuhacking/shared/assets/logos/sponsors/kefc.svg'
13+
// import incogni from '@cuhacking/shared/assets/logos/sponsors/incogni.svg'
14+
// import kefc from '@cuhacking/shared/assets/logos/sponsors/kefc.svg'
1315
import marchNetworks from '@cuhacking/shared/assets/logos/sponsors/march-networks.white.svg'
14-
import merryDairy from '@cuhacking/shared/assets/logos/sponsors/merry-dairy.svg'
15-
import mlhColoured from '@cuhacking/shared/assets/logos/sponsors/mlh-coloured.svg'
16+
// import merryDairy from '@cuhacking/shared/assets/logos/sponsors/merry-dairy.svg'
17+
// import mlhColoured from '@cuhacking/shared/assets/logos/sponsors/mlh-coloured.svg'
1618
import mlh from '@cuhacking/shared/assets/logos/sponsors/mlh.white.svg'
17-
import nordPass from '@cuhacking/shared/assets/logos/sponsors/nord-pass.svg'
18-
import nordVpn from '@cuhacking/shared/assets/logos/sponsors/nord-vpn.svg'
19-
import qnx from '@cuhacking/shared/assets/logos/sponsors/qnx.svg'
19+
// import nordPass from '@cuhacking/shared/assets/logos/sponsors/nord-pass.svg'
20+
// import nordVpn from '@cuhacking/shared/assets/logos/sponsors/nord-vpn.svg'
21+
// import qnx from '@cuhacking/shared/assets/logos/sponsors/qnx.svg'
2022
import rbc from '@cuhacking/shared/assets/logos/sponsors/rbc.white.svg'
21-
import redbull from '@cuhacking/shared/assets/logos/sponsors/redbull.svg'
22-
import saily from '@cuhacking/shared/assets/logos/sponsors/saily.svg'
23-
import standoutStickers from '@cuhacking/shared/assets/logos/sponsors/standout-stickers.white.svg'
23+
// import redbull from '@cuhacking/shared/assets/logos/sponsors/redbull.svg'
24+
// import saily from '@cuhacking/shared/assets/logos/sponsors/saily.svg'
25+
// import standoutStickers from '@cuhacking/shared/assets/logos/sponsors/standout-stickers.white.svg'
2426
import techDomains from '@cuhacking/shared/assets/logos/sponsors/techdomains.white.svg'
25-
import wolframRed from '@cuhacking/shared/assets/logos/sponsors/wolfram.red.svg'
27+
// import wolframRed from '@cuhacking/shared/assets/logos/sponsors/wolfram.red.svg'
2628
import wolfram from '@cuhacking/shared/assets/logos/sponsors/wolfram.white.svg'
29+
import { stringify } from 'qs-esm'
2730

28-
const presentSponsors
29-
= [
30-
{ name: 'QNX', logo: qnx, link: '' },
31-
{ name: 'Fullscript', logo: fullscript, link: '' },
32-
{ name: 'CSE', logo: cse, link: '' },
33-
{ name: 'Gadget', logo: gadget, link: '' },
34-
{ name: 'MLH', logo: mlhColoured, link: '' },
35-
{ name: 'StandOut Stickers', logo: standoutStickers, link: 'http://hackp.ac/mlh-StandOutStickers-hackathons' },
36-
{ name: 'KEFC', logo: kefc, link: '' },
37-
{ name: 'Beeceptor', logo: beeceptor, link: '' },
38-
{ name: 'Red Bull', logo: redbull, link: '' },
39-
{ name: 'Wolfram', logo: wolframRed, link: '' },
40-
{ name: 'Merry', logo: merryDairy, link: '' },
41-
{ name: 'NordVPN', logo: nordVpn, link: '' },
42-
{ name: 'Nord Pass', logo: nordPass, link: '' },
43-
{ name: 'Incogni', logo: incogni, link: '' },
44-
{ name: 'Saily', logo: saily, link: '' },
45-
]
31+
async function fetchSponsorData(name: string) {
32+
const query = { name: { equals: name } }
33+
const stringifiedQuery = stringify({ where: query }, { addQueryPrefix: true })
34+
35+
const response = await fetch(`http://localhost:8000/api/brands${stringifiedQuery}`)
36+
const data = await response.json()
37+
38+
return {
39+
logo: data?.docs?.[0]?.symbol?.url || '',
40+
domain: data?.docs?.[0]?.domain || '',
41+
}
42+
}
43+
44+
const presentSponsors = await Promise.all(
45+
[
46+
{ name: 'QNX' },
47+
{ name: 'FullScript' },
48+
{ name: 'CSE' },
49+
{ name: 'Gadget' },
50+
{ name: 'MLH' },
51+
{ name: 'StandOut Stickers', link: 'http://hackp.ac/mlh-StandOutStickers-hackathons' },
52+
{ name: 'KEFC' },
53+
{ name: 'Beeceptor' },
54+
{ name: 'Red Bull' },
55+
{ name: 'Wolfram' },
56+
{ name: 'The Merry Dairy' },
57+
{ name: 'NordVPN' },
58+
{ name: 'NordPass' },
59+
{ name: 'incogni' },
60+
{ name: 'Saily' },
61+
].map(async (sponsor) => {
62+
const { logo, domain } = await fetchSponsorData(sponsor.name)
63+
return {
64+
name: sponsor.name,
65+
logo,
66+
link: sponsor.link || (domain ? `https://${domain}` : ''),
67+
}
68+
}),
69+
)
4670

4771
const pastSponsors = [
4872
{ name: 'Electronic Arts', logo: ea, link: 'https://www.ea.com' },

libs/website/ui/sponsorship/sponsor-presenter/sponsor-item.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { Sponsor } from '../types/sponsorship'
22
import { GlassmorphicCard } from '@cuhacking/shared/ui/glassmorphic-card'
33
import { cn } from '@cuhacking/shared/utils/cn'
44
import { cva } from 'class-variance-authority'
5+
import SVG from 'react-inlinesvg'
56

67
interface SponsorPresenterProps {
78
sponsor: Sponsor
@@ -31,10 +32,9 @@ export function SponsorItem({ sponsor, isPresent }: SponsorPresenterProps) {
3132
rel="noopener noreferrer"
3233
aria-label={`Visit ${sponsor.name}'s website`}
3334
>
34-
<img
35+
<SVG
3536
src={sponsor.logo}
36-
alt={`${sponsor.name} logo`}
37-
loading="lazy"
37+
title={`${sponsor.name} logo`}
3838
className={cn(sponsorPresenterVariation({ isPresent }))}
3939
/>
4040
</a>

0 commit comments

Comments
 (0)