diff --git a/public/governance/amb150230.jpg b/public/governance/amb150230.jpg new file mode 100644 index 0000000..b98d402 Binary files /dev/null and b/public/governance/amb150230.jpg differ diff --git a/public/governance/amrit.png b/public/governance/amrit.png deleted file mode 100644 index 876c57e..0000000 Binary files a/public/governance/amrit.png and /dev/null differ diff --git a/public/governance/axr200071.jpg b/public/governance/axr200071.jpg new file mode 100644 index 0000000..61a2522 Binary files /dev/null and b/public/governance/axr200071.jpg differ diff --git a/public/governance/axs200279.jpg b/public/governance/axs200279.jpg new file mode 100644 index 0000000..1b1dc3d Binary files /dev/null and b/public/governance/axs200279.jpg differ diff --git a/public/governance/blank.jpg b/public/governance/blank.jpg new file mode 100644 index 0000000..b398aa2 Binary files /dev/null and b/public/governance/blank.jpg differ diff --git a/public/governance/cbm200003.jpg b/public/governance/cbm200003.jpg new file mode 100644 index 0000000..660a653 Binary files /dev/null and b/public/governance/cbm200003.jpg differ diff --git a/public/governance/cnl210000.jpg b/public/governance/cnl210000.jpg new file mode 100644 index 0000000..5c6a8d7 Binary files /dev/null and b/public/governance/cnl210000.jpg differ diff --git a/public/governance/dml190001.jpg b/public/governance/dml190001.jpg new file mode 100644 index 0000000..9428c58 Binary files /dev/null and b/public/governance/dml190001.jpg differ diff --git a/public/governance/ecb180001.jpg b/public/governance/ecb180001.jpg new file mode 100644 index 0000000..43f26eb Binary files /dev/null and b/public/governance/ecb180001.jpg differ diff --git a/public/governance/flh220002.jpg b/public/governance/flh220002.jpg new file mode 100644 index 0000000..06d6a5e Binary files /dev/null and b/public/governance/flh220002.jpg differ diff --git a/public/governance/hxk180000.jpg b/public/governance/hxk180000.jpg new file mode 100644 index 0000000..2ddd572 Binary files /dev/null and b/public/governance/hxk180000.jpg differ diff --git a/public/governance/jjp210000.jpg b/public/governance/jjp210000.jpg new file mode 100644 index 0000000..7535d09 Binary files /dev/null and b/public/governance/jjp210000.jpg differ diff --git a/public/governance/jrs190008.jpg b/public/governance/jrs190008.jpg new file mode 100644 index 0000000..8273e3e Binary files /dev/null and b/public/governance/jrs190008.jpg differ diff --git a/public/governance/jxa220013.jpg b/public/governance/jxa220013.jpg new file mode 100644 index 0000000..1c13eb4 Binary files /dev/null and b/public/governance/jxa220013.jpg differ diff --git a/public/governance/jxc064000.jpg b/public/governance/jxc064000.jpg new file mode 100644 index 0000000..c38100b Binary files /dev/null and b/public/governance/jxc064000.jpg differ diff --git a/public/governance/npn190002.jpg b/public/governance/npn190002.jpg new file mode 100644 index 0000000..400b893 Binary files /dev/null and b/public/governance/npn190002.jpg differ diff --git a/public/governance/nxw180000.jpg b/public/governance/nxw180000.jpg new file mode 100644 index 0000000..1b7cc69 Binary files /dev/null and b/public/governance/nxw180000.jpg differ diff --git a/public/governance/rdo190000.jpg b/public/governance/rdo190000.jpg new file mode 100644 index 0000000..cb2f468 Binary files /dev/null and b/public/governance/rdo190000.jpg differ diff --git a/public/governance/rsj180004.jpg b/public/governance/rsj180004.jpg new file mode 100644 index 0000000..af1cac1 Binary files /dev/null and b/public/governance/rsj180004.jpg differ diff --git a/public/governance/rxr180000.jpg b/public/governance/rxr180000.jpg new file mode 100644 index 0000000..d98802e Binary files /dev/null and b/public/governance/rxr180000.jpg differ diff --git a/public/governance/rxt220032.jpg b/public/governance/rxt220032.jpg new file mode 100644 index 0000000..3c605ab Binary files /dev/null and b/public/governance/rxt220032.jpg differ diff --git a/public/governance/sxd200087.jpg b/public/governance/sxd200087.jpg new file mode 100644 index 0000000..2177c18 Binary files /dev/null and b/public/governance/sxd200087.jpg differ diff --git a/public/governance/sxl220024.jpg b/public/governance/sxl220024.jpg new file mode 100644 index 0000000..cecaa8a Binary files /dev/null and b/public/governance/sxl220024.jpg differ diff --git a/public/governance/sxn180076.jpg b/public/governance/sxn180076.jpg new file mode 100644 index 0000000..3370a3a Binary files /dev/null and b/public/governance/sxn180076.jpg differ diff --git a/public/governance/sxs180000.jpg b/public/governance/sxs180000.jpg new file mode 100644 index 0000000..465d1f2 Binary files /dev/null and b/public/governance/sxs180000.jpg differ diff --git a/public/governance/wec190000.jpg b/public/governance/wec190000.jpg new file mode 100644 index 0000000..b0e5e7c Binary files /dev/null and b/public/governance/wec190000.jpg differ diff --git a/public/governance/wgs190000.jpg b/public/governance/wgs190000.jpg new file mode 100644 index 0000000..e91c17d Binary files /dev/null and b/public/governance/wgs190000.jpg differ diff --git a/src/components/Governance.tsx b/src/components/Governance.tsx index 843f476..6c8f385 100644 --- a/src/components/Governance.tsx +++ b/src/components/Governance.tsx @@ -1,61 +1,63 @@ +import { useState } from 'react'; import Header from '@/components/Header'; import Footer from '@/components/Footer'; import PeriodLinks from '@/components/PeriodLinks'; import Image, { StaticImageData } from 'next/image'; +import { PopulatedGoveranceGroup } from '@/lib/period-populator'; +import { Person } from '@/data/person-dictionary'; -interface LeadershipCardProps { - image: string | StaticImageData; - name: string; - title: string; - links: { - link: string; - image: string | StaticImageData; - }[]; -} -[]; +import LinkedIn from '@/../public/linkedin-royal.svg'; +import Email from '@/../public/email.svg'; + +const fallbackSrc = '/governance/blank.jpg'; -const LeadershipCard = (props: LeadershipCardProps) => { +const LeadershipCard = (props: Person) => { + const [src, setSrc] = useState(`/governance/${props.netId}.jpg`); return (
- {props.image == '' ? ( -
- ) : ( - Headshot - )} + Headshot { + if (result.naturalWidth === 0) { + // Broken image + setSrc(fallbackSrc); + } + }} + onError={() => { + setSrc(fallbackSrc); + }} + />

{props.name}

-

{props.title}

+

{props.role}

- {props.links.map((link, index) => ( - - Social link - - ))} + + Social link + + + Social link +
); }; -interface LeadershipGroupProps { - name: string; - description: string; - people: LeadershipCardProps[]; -} -[]; - -const LeadershipGroup = (props: LeadershipGroupProps) => { +const LeadershipGroup = (props: PopulatedGoveranceGroup) => { return (

{props.name}

{props.description}

{props.people.map((person) => ( - + ))}
@@ -63,28 +65,24 @@ const LeadershipGroup = (props: LeadershipGroupProps) => { }; interface GovernanceProps { - data: LeadershipGroupProps[]; - past?: string; + period: string; + data: PopulatedGoveranceGroup[]; + isCurrent: boolean; periodLinks: { path: string; periods: string[]; - current: string; }; } const Governance = (props: GovernanceProps) => ( -
-
+ <> +
{props.data.map((group) => ( ))} - +
+ ); export default Governance; diff --git a/src/components/PeriodLinks.tsx b/src/components/PeriodLinks.tsx index a651b26..4874824 100644 --- a/src/components/PeriodLinks.tsx +++ b/src/components/PeriodLinks.tsx @@ -1,17 +1,14 @@ import Link from 'next/link'; +import { Listbox, Transition } from '@headlessui/react'; -interface GovernanceProps { +interface PeriodLinkProps { name: string; - past?: string | null; path: string; periods: string[]; - current: string; } -const PeriodLinks = (props: GovernanceProps) => { +const PeriodLinks = (props: PeriodLinkProps) => { const periods = props.periods; - periods[periods.indexOf(props.current)] = 'Current'; - const urls = periods.map((period) => { if (period === 'Current') { return props.path; @@ -20,30 +17,48 @@ const PeriodLinks = (props: GovernanceProps) => { }); return ( -
-

{props.name}

-
- {periods.map((period, index) => { - if ( - period === props.past || - (period === 'Current' && typeof props.past === 'undefined') - ) { - return ( -

- {period} -

- ); - } - return ( - -

{period}

- - ); - })} +
+
+ + {({ open }) => ( + <> + + {props.name} + + + + {periods.map((period, index) => ( + + +

{period}

+ +
+ ))} +
+
+ + )} +
); diff --git a/src/data/governance.tsx b/src/data/governance.tsx deleted file mode 100644 index 0980201..0000000 --- a/src/data/governance.tsx +++ /dev/null @@ -1,259 +0,0 @@ -import { StaticImageData } from 'next/image'; - -import LinkedIn from '@/../public/linkedin-royal.svg'; -import Website from '@/../public/website.svg'; -import Email from '@/../public/email.svg'; - -import Amrit from '@/../public/governance/amrit.png'; - -export const current = '2023-2024'; - -function vacant(title: string) { - return { - image: '', - name: 'Vacant', - title: title, - links: [], - }; -} - -const clubSponsor = { - name: 'Our Club Sponsor', - description: - 'With more than a decade of teaching and mentoring experience within the community here at The University of Texas at Dallas, John Cole consistently leaves a positive impact on the people around him. Here at Nebula Labs we eagerly look forward to utilizing his invaluable support and knowledge as we grow as an organization.', - people: [ - { - image: '', - name: 'John Cole', - title: 'Professor and Club Sponsor', - links: [ - { - link: '/', - image: Website, - }, - { - link: '/', - image: Email, - }, - ], - }, - ], -}; - -interface StringKeys { - [key: string]: { - name: string; - description: string; - people: { - image: string | StaticImageData; - name: string; - title: string; - links: { - link: string; - image: string | StaticImageData; - }[]; - }[]; - }[]; -} - -const data: StringKeys = { - '2023-2024': [ - { - name: 'Officers', - description: - 'As a group of leaders, our officer team works together to guide our organization towards its goals while upholding the principles upon which Nebula Labs was founded. Although each role has distinct responsibilities, they all contribute to ensuring the success and growth of our organization.', - people: [ - { - image: '', - name: 'Caleb Lim', - title: 'President', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'David Launikitis', - title: 'Vice President', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'Jake Spann', - title: 'Executive Director', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'Shaurya Dwivedi', - title: 'Secretary', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: Amrit, - name: 'Amrit Rathie', - title: 'Treasurer', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - ], - }, - { - name: 'Division Heads', - description: - 'By overseeing and managing specific areas within Nebula Labs, division heads leverage their expertise to drive the achievement of organization-wide goals. They play a crucial role in orchestrating collaborative efforts, establishing and upholding standards, and cultivating a culture of innovation and development within their respective domains.', - people: [ - { - image: '', - name: 'Hilary Nguyen', - title: 'Head of Design', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'Jason Antwi-Appah', - title: 'Head of Engineering', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - vacant('Head of Product'), - vacant('Head of Marketing'), - ], - }, - { - name: 'Project Leads', - description: - 'Playing a crucial role in shaping every project we work on, project leads orchestrate the transformation of ideas into tangible and functional products. Their coordination skills ensure the successful development of each project, delivering valuable outcomes that positively impact our community.', - people: [ - { - image: '', - name: 'Stephanie Li', - title: 'Planner Lead', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'Ruben Olano', - title: 'Jupiter Lead', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'William Skaggs', - title: 'Trends and Skedge Lead', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - { - image: '', - name: 'Josh Pahman', - title: 'API and Platform Lead', - links: [ - { - link: '/', - image: LinkedIn, - }, - { - link: '/', - image: Email, - }, - ], - }, - ], - }, - clubSponsor, - ], - '2022-2023': [], - '2021-2022': [], - '2020-2021': [], - '2019-2020': [], - '2018-2019': [], - '2017-2018': [], -}; - -export default data; diff --git a/src/data/period-dictionary.ts b/src/data/period-dictionary.ts new file mode 100644 index 0000000..a525024 --- /dev/null +++ b/src/data/period-dictionary.ts @@ -0,0 +1,64 @@ +export type GoverancePeriod = { + [group: string]: { + [role: string]: string; + }; +}; + +export const periodToLeadershipMap = new Map([ + [ + '2023-2024', + { + Officers: { + President: 'cnl210000', + 'Vice President': 'dml190001', + 'Executive Director': 'jrs190008', + Secretary: 'sxd200087', + Treasurer: 'axr200071', + }, + 'Division Heads': { + 'Head of Design': 'npn190002', + 'Head of Engineering': 'jxa220013', + 'Head of Product': 'sxl220024', + 'Head of Marketing': 'flh220002', + }, + 'Project Leads': { + 'Planner Lead': 'rxt220032', + 'Jupiter Lead': 'rdo190000', + 'Trends & Skedge Lead': 'wgs190000', + 'API & Platform Lead': 'jjp210000', + }, + 'Our Club Sponsor': { + 'Professor and Club Sponsor': 'jxc064000', + }, + }, + ], + [ + '2022-2023', + { + Officers: { + President: 'rxr180000', + 'Vice President': 'ecb180001', + 'Executive Director': 'cbm200003', + Secretary: 'nxw180000', + Treasurer: 'rsj180004', + }, + 'Division Heads': { + 'Head of Design': 'sxs180000', + 'Head of Engineering': 'dml190001', + 'Head of Product': 'hxk180000', + 'Head of Marketing': 'sxn180076', + }, + 'Project Leads': { + 'Planner Lead': 'cnl210000', + 'Jupiter Lead': 'jrs190008', + 'Guide Lead': 'wec190000', + 'Trends Lead': 'wgs190000', + 'Skedge Lead': 'axs200279', + 'API & Platform Lead': 'amb150230', + }, + 'Our Club Sponsor': { + 'Professor and Club Sponsor': 'jxc064000', + }, + }, + ], +]); diff --git a/src/data/person-dictionary.ts b/src/data/person-dictionary.ts new file mode 100644 index 0000000..50c42d7 --- /dev/null +++ b/src/data/person-dictionary.ts @@ -0,0 +1,184 @@ +export interface Person { + netId?: string; + role?: string; + name: string; + linkedIn: string; +} + +export const netIdToPersonMap = new Map([ + [ + 'cnl210000', + { + name: 'Caleb Lim', + linkedIn: 'caleeb-lim', + }, + ], + [ + 'dml190001', + { + name: 'David Launikitis', + linkedIn: 'dlaunikitis', + }, + ], + [ + 'axr200071', + { + name: 'Amrit Rathie', + linkedIn: 'amrit-rathie', + }, + ], + [ + 'jrs190008', + { + name: 'Jake Spann', + linkedIn: 'jake-spann-35210615a', + }, + ], + [ + 'sxd200087', + { + name: 'Shaurya Dwivedi', + linkedIn: 'shaurya-dwivedi', + }, + ], + [ + 'jxa220013', + { + name: 'Jason Antwi-Appah', + linkedIn: 'jasonaa', + }, + ], + [ + 'sxl220024', + { + name: 'Sharon Lnu', + linkedIn: 'sharon-lnu-6949801a3', + }, + ], + [ + 'flh220002', + { + name: 'Frances Hill', + linkedIn: 'flhill', + }, + ], + [ + 'npn190002', + { + name: 'Hilary Nguyen', + linkedIn: 'hilary-nguyen', + }, + ], + [ + 'wgs190000', + { + name: 'William Skaggs', + linkedIn: 'william-skaggs-4b86881b7', + }, + ], + [ + 'rdo190000', + { + name: 'Ruben Olano', + linkedIn: 'rubendolano', + }, + ], + [ + 'jjp210000', + { + name: 'Josh Pahman', + linkedIn: 'jpahm', + }, + ], + [ + 'rxt220032', + { + name: 'Ragini Tiwari', + linkedIn: 'msraginitiwari', + }, + ], + [ + 'rxr180000', + { + name: 'Ryan Radloff', + linkedIn: 'ryan-radloff', + }, + ], + [ + 'ecb180001', + { + name: 'Eric Boysen', + linkedIn: 'eric-boysen-a16243192', + }, + ], + [ + 'cbm200003', + { + name: 'Charlie Mahana', + linkedIn: 'charliemahana', + }, + ], + [ + 'rsj180004', + { + name: 'Rajmeet Juneja', + linkedIn: 'rajmeetjuneja', + }, + ], + [ + 'nxw180000', + { + name: 'Nathan Williams', + linkedIn: 'nathan-williams-357a5b61', + }, + ], + [ + 'sxs180000', + { + name: 'Shreyas Subramanian', + linkedIn: 'shreyas-subramanian', + }, + ], + [ + 'sxn180076', + { + name: 'Shreya Nallamothu', + linkedIn: 'shreya-n-1a334a1b8', + }, + ], + [ + 'hxk180000', + { + name: 'Harsha Ketaraju', + linkedIn: 'harsha-ketaraju', + }, + ], + [ + 'amb150230', + { + name: 'Adam Brunn', + linkedIn: 'adammcadamson', + }, + ], + [ + 'wec190000', + { + name: 'Willie Chalmers III', + linkedIn: 'willie-chalmers-iii', + }, + ], + [ + 'axs200279', + { + name: 'Adam Szumski', + linkedIn: 'aszumski', + }, + ], + [ + 'jxc064000', + { + name: 'John Cole', + linkedIn: 'john-cole-52650592', + }, + ], +]); diff --git a/src/lib/period-populator.ts b/src/lib/period-populator.ts new file mode 100644 index 0000000..086f236 --- /dev/null +++ b/src/lib/period-populator.ts @@ -0,0 +1,82 @@ +import { GoverancePeriod, periodToLeadershipMap } from '@/data/period-dictionary'; +import { netIdToPersonMap, Person } from '@/data/person-dictionary'; + +export interface PopulatedGoveranceGroup { + name: string; + description: string; + people: Person[]; +} + +export function getPopulatedPeriod(period: string) { + const goverance: GoverancePeriod = periodToLeadershipMap.get(period)!; + + const populatedGroups: PopulatedGoveranceGroup[] = Object.keys(goverance).map((groupName) => { + const people = goverance[groupName]; + + const populatedPeople = Object.keys(people).map((role) => { + const netId = people[role]; + const personData: Person = netIdToPersonMap.get(netId)!; + personData['netId'] = netId; + personData['role'] = role; + + return personData; + }); + + const group: PopulatedGoveranceGroup = { + name: groupName, + description: groupNameToDescMap.get(groupName)!, + people: populatedPeople, + }; + + return group; + }); + + return populatedGroups; +} + +const allPeriods = () => { + return Array.from(periodToLeadershipMap.keys()).sort().reverse(); +}; + +export const nonCurrentPeriods = () => { + const all = allPeriods(); + all.shift(); + + return all; +}; + +export const currentPeriod = () => { + return allPeriods()[0]; +}; + +const groupNameToDescMap = new Map([ + [ + 'Officers', + `As a group of leaders, our officer team works together to guide + our organization towards its goals while upholding the principles upon which + Nebula Labs was founded. Although each role has distinct responsibilities, they + all contribute to ensuring the success and growth of our organization.`, + ], + [ + 'Division Heads', + `By overseeing and managing specific areas within Nebula Labs, + division heads leverage their expertise to drive the achievement of organization-wide + goals. They play a crucial role in orchestrating collaborative efforts, establishing + and upholding standards, and cultivating a culture of innovation and development + within their respective domains.`, + ], + [ + 'Project Leads', + `Playing a crucial role in shaping every project we work on, + project leads orchestrate the transformation of ideas into tangible and functional + products. Their coordination skills ensure the successful development of each project, + delivering valuable outcomes that positively impact our community.`, + ], + [ + 'Our Club Sponsor', + `With more than a decade of teaching and mentoring experience + within the community here at The University of Texas at Dallas, John Cole consistently + leaves a positive impact on the people around him. Here at Nebula Labs we eagerly look + forward to utilizing his invaluable support and knowledge as we grow as an organization.`, + ], +]); diff --git a/src/pages/about/governance/[period].tsx b/src/pages/about/governance/[period].tsx index 9ebb928..50f6052 100644 --- a/src/pages/about/governance/[period].tsx +++ b/src/pages/about/governance/[period].tsx @@ -1,42 +1,85 @@ import Header from '@/components/Header'; import Footer from '@/components/Footer'; +import Head from 'next/head'; import PeriodLinks from '@/components/PeriodLinks'; import Image, { StaticImageData } from 'next/image'; import { useRouter } from 'next/router'; -import Governance from '@/components/Governance'; -import data, { current } from '@/data/governance'; +import { + getPopulatedPeriod, + nonCurrentPeriods, + PopulatedGoveranceGroup, +} from '@/lib/period-populator'; +import { netIdToPersonMap } from '@/data/person-dictionary'; +import { periodToLeadershipMap } from '@/data/period-dictionary'; -const Page = () => { - const router = useRouter(); +import Governance from '@/components/Governance'; +const Page = ({ + period, + data, + nonCurrentPeriods, +}: { + period: string; + data: PopulatedGoveranceGroup[]; + nonCurrentPeriods: string[]; +}) => { const periodLinks = { - path: router.pathname.replace(/\[.*\]/, ''), - periods: Object.keys(data), - current: current, + path: '/about/governance/', + periods: nonCurrentPeriods, }; - if ( - typeof router.query.period === 'undefined' || - Array.isArray(router.query.period) || - !(router.query.period in data) - ) { - return ( -
-
- -
-
- ); - } - return ( - + <> + + {period + ' Governance - Nebula Labs'} + + + + + ); }; +export async function getStaticPaths() { + const periods = Array.from(periodToLeadershipMap.keys()); + periods.sort(); + periods.splice(periods.length - 1, 1); + + const paths = periods.map((fileName) => { + return { + params: { + period: fileName, + }, + }; + }); + + return { + paths, + fallback: false, + }; +} + +interface Params { + period: string; +} + +export async function getStaticProps({ params }: { params: Params }) { + const period = params.period; + const data = getPopulatedPeriod(period); + const _nonCurrentPeriods = ['Current', ...nonCurrentPeriods().filter((per) => per !== period)]; + + return { + props: { + period, + data, + nonCurrentPeriods: _nonCurrentPeriods, + }, + }; +} + export default Page; diff --git a/src/pages/about/governance/index.tsx b/src/pages/about/governance/index.tsx index 1ab6691..cf7bf3f 100644 --- a/src/pages/about/governance/index.tsx +++ b/src/pages/about/governance/index.tsx @@ -1,15 +1,38 @@ -import Governance from '@/components/Governance'; -import data, { current } from '@/data/governance'; +import Header from '@/components/Header'; +import Footer from '@/components/Footer'; +import Head from 'next/head'; +import PeriodLinks from '@/components/PeriodLinks'; +import Image, { StaticImageData } from 'next/image'; import { useRouter } from 'next/router'; +import { getPopulatedPeriod, currentPeriod, nonCurrentPeriods } from '@/lib/period-populator'; +import { netIdToPersonMap } from '@/data/person-dictionary'; +import { periodToLeadershipMap } from '@/data/period-dictionary'; + +import Governance from '@/components/Governance'; + +import fs from 'fs'; +import path from 'path'; + const Page = () => { - const router = useRouter(); + const period = currentPeriod(); + const data = getPopulatedPeriod(period); + const _nonCurrentPeriods = nonCurrentPeriods(); + + const periodLinks = { + path: '/about/governance/', + periods: _nonCurrentPeriods, + }; return ( - + <> + + Governance - Nebula Labs + + + + + ); };