11import "@/styles/devHacksSponsors.scss" ;
22import React from "react" ;
33
4+ //2026 logos
5+ import Ubisoft2026 from "@/resources/images/devhacks/2025/devHacksSponsors/Ubisoft.jpg" ;
6+ import Niche2026 from "@/resources/images/devhacks/2025/devHacksSponsors/niche.png" ;
7+ import G3_2026 from "@/resources/images/devhacks/2025/devHacksSponsors/G3.png" ;
8+ import Pollard2026 from "@/resources/images/devhacks/2025/devHacksSponsors/pollard.jpg" ;
9+
410// 2025 logos
511import Ubisoft from "@/resources/images/devhacks/2025/devHacksSponsors/Ubisoft.jpg" ;
612import Niche2025 from "@/resources/images/devhacks/2025/devHacksSponsors/niche.png" ;
@@ -28,22 +34,46 @@ import Ubisoft2023 from "@/resources/images/devhacks/2023/devHacksSponsors/Ubiso
2834import GreenUmbrella from "@/resources/images/devhacks/2023/devHacksSponsors/greenUmbrella.webp" ;
2935import PayWorks from "@/resources/images/devhacks/2023/devHacksSponsors/payWorks.jpg" ;
3036
31- type HackathonYearSponsorsProps = {
32- year : string | number ;
37+ type HackathonYearSponsorsProps = { year : string | number } ;
38+
39+ type Tier = "platinum" | "gold" | "silver" | "bronze" | "inkind" ;
40+ type Sponsor = { name : string ; logo : string } ;
41+ type YearSponsors = Partial < Record < Tier , Sponsor [ ] > > ;
42+
43+ /** Optional: nicer titles per tier */
44+ const TIER_LABEL : Record < Tier , string > = {
45+ platinum : "Platinum Sponsor" ,
46+ gold : "Gold Sponsor" ,
47+ silver : "Silver Sponsors" ,
48+ bronze : "Bronze Sponsors" ,
49+ inkind : "In-Kind Sponsors" ,
3350} ;
3451
52+ /** Render order */
53+ const TIER_ORDER : Tier [ ] = [ "platinum" , "gold" , "silver" , "bronze" , "inkind" ] ;
54+
3555const HackathonYearSponsors : React . FC < HackathonYearSponsorsProps > = ( {
3656 year,
3757} ) => {
38- const sponsors : Record <
39- string ,
40- {
41- gold : { name : string ; logo : string } ;
42- silver : { name : string ; logo : string } [ ] ;
43- }
44- > = {
58+ const sponsorsByYear : Record < string , YearSponsors > = {
59+ /* -------------------- 2026 -------------------- */
60+ "2026" : {
61+ // platinum: [{ name: "Ubisoft", logo: Ubisoft2026 }],
62+ gold : [ { name : "G3" , logo : G3_2026 } ] ,
63+ silver : [
64+ { name : "Niche" , logo : Niche2026 } ,
65+ { name : "Pollard" , logo : Pollard2026 } ,
66+ ] ,
67+ // inkind: [
68+ // {
69+ // name:"UMSU CARES", logo:umsuCares,
70+ // }
71+ // ],
72+ } ,
73+
74+ /* -------------------- 2025 -------------------- */
4575 "2025" : {
46- gold : { name : "Glitch Secure" , logo : GlitchSecure } ,
76+ gold : [ { name : "Glitch Secure" , logo : GlitchSecure } ] ,
4777 silver : [
4878 { name : "Varian" , logo : Varian } ,
4979 { name : "Ubisoft" , logo : Ubisoft } ,
@@ -56,8 +86,10 @@ const HackathonYearSponsors: React.FC<HackathonYearSponsorsProps> = ({
5686 { name : "FOS" , logo : FOS } ,
5787 ] ,
5888 } ,
89+
90+ /* -------------------- 2024 -------------------- */
5991 "2024" : {
60- gold : { name : "Priceline" , logo : Priceline2024 } ,
92+ gold : [ { name : "Priceline" , logo : Priceline2024 } ] ,
6193 silver : [
6294 { name : "Niche" , logo : Niche2024 } ,
6395 { name : "G3" , logo : G3_2024 } ,
@@ -67,8 +99,10 @@ const HackathonYearSponsors: React.FC<HackathonYearSponsorsProps> = ({
6799 { name : "KarveIT" , logo : KarveIT } ,
68100 ] ,
69101 } ,
102+
103+ /* -------------------- 2023 -------------------- */
70104 "2023" : {
71- gold : { name : "Neo" , logo : Neo } ,
105+ gold : [ { name : "Neo" , logo : Neo } ] ,
72106 silver : [
73107 { name : "Payworks" , logo : PayWorks } ,
74108 { name : "Ubisoft" , logo : Ubisoft2023 } ,
@@ -77,30 +111,30 @@ const HackathonYearSponsors: React.FC<HackathonYearSponsorsProps> = ({
77111 } ,
78112 } ;
79113
80- const sponsorData = sponsors [ String ( year ) ] ;
81- if ( ! sponsorData ) return null ;
114+ const data = sponsorsByYear [ String ( year ) ] ;
115+ if ( ! data ) return null ;
82116
83117 return (
84118 < div className = "sponsors-container" >
85- { /* Gold sponsor */ }
86- < div className = "gold-sponsor" >
87- < img src = { sponsorData . gold . logo } alt = { sponsorData . gold . name } />
88- </ div >
89-
90- { /* Silver sponsors in rows of 3 */ }
91- { Array . from ( { length : Math . ceil ( sponsorData . silver . length / 3 ) } ) . map (
92- ( _ , rowIndex ) => (
93- < div key = { rowIndex } className = "sponsors-row" >
94- { sponsorData . silver
95- . slice ( rowIndex * 3 , rowIndex * 3 + 3 )
96- . map ( ( sponsor , index ) => (
97- < div key = { index } className = "sponsor" >
98- < img src = { sponsor . logo } alt = { sponsor . name } />
119+ { TIER_ORDER . map ( ( tier ) => {
120+ const list = data [ tier ] ;
121+ if ( ! list || list . length === 0 ) return null ;
122+
123+ return (
124+ < div className = { `tier tier--${ tier } ` } key = { tier } >
125+ < h2 className = "tier-title" >
126+ { TIER_LABEL [ tier ] ?? tier [ 0 ] . toUpperCase ( ) + tier . slice ( 1 ) }
127+ </ h2 >
128+ < div className = "tier-logos" >
129+ { list . map ( ( s , i ) => (
130+ < div key = { i } className = "sponsor" >
131+ < img src = { s . logo } alt = { s . name } loading = "lazy" />
99132 </ div >
100133 ) ) }
134+ </ div >
101135 </ div >
102- )
103- ) }
136+ ) ;
137+ } ) }
104138 </ div >
105139 ) ;
106140} ;
0 commit comments