1+ import { faFileAlt , faVideo } from '@fortawesome/free-solid-svg-icons' ;
2+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' ;
3+
14import Image from 'next/legacy/image' ;
25import Link from 'next/link' ;
36import { NextSeo } from 'next-seo' ;
@@ -7,6 +10,7 @@ import Countdown from 'react-countdown';
710import Banner from '../components/Banner' ;
811import Layout from '../components/Layout' ;
912import gmData from '../gmData.json' ;
13+ import pastData from '../past-gm.json' ;
1014
1115import aiLogo from '../public/images/committees/ai_wordmark.svg' ;
1216import boardLogo from '../public/images/committees/board_wordmark.svg' ;
@@ -21,6 +25,11 @@ import wLogo from '../public/images/committees/w_wordmark.svg';
2125import googleSlideLogo from '../public/images/slides.png' ;
2226import winterGMgraphic from '../public/images/Winter_GM_2025_graphic.png' ;
2327
28+ const inlineButtonListStyle = {
29+ display : 'inline-block' ,
30+ marginBottom : '1em' ,
31+ } ;
32+
2433const dayToName = ( day ) => {
2534 switch ( day ) {
2635 case 0 :
@@ -156,6 +165,8 @@ const GMCountdown = (props) => {
156165} ;
157166
158167function gm ( ) {
168+
169+ const pastGMs = [ ...pastData ] . reverse ( ) ;
159170 const data = parseGMData ( gmData ) ;
160171 function countdownRenderer ( { days, hours, minutes, seconds, completed } ) {
161172 const { dayString, hourString, minuteString, secondString } =
@@ -335,6 +346,7 @@ function gm() {
335346 </ div >
336347 { data . initiatives . map ( ( item ) => (
337348 < p key = { item . id } className = "gm-program-row" >
349+ { /* eslint-disable-next-line @next/next/no-img-element */ }
338350 { item }
339351 </ p >
340352 ) ) }
@@ -347,10 +359,67 @@ function gm() {
347359 friends!
348360 </ p >
349361 </ div >
350- < p className = "gm-program-row" > All ACM officers</ p >
362+ < div className = "gm-program-row" > All ACM officers</ div >
351363 </ div >
352364 </ div >
353365 </ div >
366+ { /* Past GMs */ }
367+ < div className = "content-container-medium" >
368+ < hr > </ hr >
369+ < h2 className = "text-center" > Past General Meetings</ h2 >
370+ { pastGMs . map ( ( pastGM , index ) => (
371+ < div className = "grid-tablet-2" key = { index } >
372+ < div >
373+ < h3 > { pastGM . title + ' // ' + pastGM . date } </ h3 >
374+ < p > { pastGM . description } </ p >
375+ < ul className = "list-unstyled" >
376+ < li style = { inlineButtonListStyle } >
377+ < Link href = { pastGM . slides } >
378+ < a
379+ className = "button"
380+ target = "_blank"
381+ rel = "noopener noreferrer"
382+ >
383+ < FontAwesomeIcon
384+ icon = { faFileAlt }
385+ fixedWidth
386+ aria-hidden = { true }
387+ /> { ' ' }
388+ Event Slides
389+ </ a >
390+ </ Link >
391+ </ li > { ' ' }
392+ < li style = { inlineButtonListStyle } >
393+ { pastGM . notes && pastGM . notes . trim ( ) !== '' && (
394+ < Link href = { pastGM . notes } >
395+ < a
396+ className = "button"
397+ target = "_blank"
398+ rel = "noopener noreferrer"
399+ >
400+ < FontAwesomeIcon
401+ icon = { faVideo }
402+ fixedWidth
403+ aria-hidden = { true }
404+ /> { ' ' }
405+ Event Recording
406+ </ a >
407+ </ Link >
408+ ) }
409+ </ li >
410+ </ ul >
411+ </ div >
412+ < div >
413+ { /* eslint-disable-next-line @next/next/no-img-element */ }
414+ < img
415+ src = { pastGM . banner }
416+ alt = { pastGM . alt_text }
417+ style = { { maxWidth : '100%' } }
418+ />
419+ </ div >
420+ </ div >
421+ ) ) }
422+ </ div >
354423 </ Layout >
355424 ) ;
356425}
0 commit comments