@@ -13,66 +13,78 @@ import "leaflet/dist/leaflet.css"
1313import pinkCircle from " ./pink-circle.svg"
1414
1515export function EventCard({ href , date , city , name , meta }) {
16- return <a
16+ return (
17+ <a
1718 href = { href }
1819 className = { clsx (
1920 " text-current no-underline flex border border-neutral-300 dark:border-neutral-700 rounded-none" ,
20- ' hover:!border-primary hover:shadow-2xl hover:shadow-primary/10 transition-colors *:transition-colors hover:relative group' ,
21- " relative after:content-['_↗'] after:font-sans after:absolute after:right-4 after:top-4"
21+ " hover:!border-primary hover:shadow-2xl hover:shadow-primary/10 transition-colors *:transition-colors hover:relative group" ,
22+ " relative after:content-['_↗'] after:font-sans after:absolute after:right-4 after:top-4" ,
2223 )}
2324 target = " _blank"
2425 rel = " noreferrer"
2526 >
26- { date && < div
27- className = " px-12 py-9 flex flex-col items-center bg-zinc-100 dark:bg-zinc-800 group-hover:dark:bg-zinc-700 w-48"
28- >
29- <div className = " text-7xl font-bold " > { date . getDate () } </ div >
30- < div className = " text-lg " > { date .toLocaleString (' en ' , {
31- month: ' short' ,
32- year: ' numeric'
33- })} </ div >
34- </div >}
35- < div
36- className = " bg-white dark:bg-neutral-900 group-hover:dark:bg-zinc-800 grow py-7 px-10 flex flex-col gap-4 "
37- >
27+ { date && (
28+ < div className = " px-12 py-9 flex flex-col items-center bg-zinc-100 dark:bg-zinc-800 group-hover:dark:bg-zinc-700 w-48" >
29+ < div className = " text-7xl font-bold " > { date . getDate () } </ div >
30+ <div className = " text-lg " >
31+ { date .toLocaleString (" en " , {
32+ month: " short" ,
33+ year: " numeric" ,
34+ })}
35+ </div >
36+ </ div >
37+ ) }
38+ < div className = " bg-white dark:bg-neutral-900 group-hover:dark:bg-zinc-800 grow py-7 px-10 flex flex-col gap-4 " >
3839 <b className = " text-primary" >{ meta } </b >
3940 <div className = " font-bold text-2xl" >{ name } </div >
4041 <div className = " text-lg flex items-center gap-2" >
41- <LocationIcon className = " fill-primary h-5" />{ city }
42- { date && <>
43- <ClockIcon
44- className = " ml-6 fill-primary h-5"
45- />{ date .toLocaleString (' en' , { hour: ' numeric' , minute: ' numeric' })}
46- </>}
42+ <LocationIcon className = " fill-primary h-5" />
43+ { city }
44+ { date && (
45+ <>
46+ <ClockIcon className = " ml-6 fill-primary h-5" />
47+ { date .toLocaleString (" en" , {
48+ hour: " numeric" ,
49+ minute: " numeric" ,
50+ })}
51+ </>
52+ )}
4753 </div >
4854 </div >
4955 </a >
56+ )
5057}
5158
52- export const { pastEvents, upcomingEvents } = events .reduce ((acc , event ) => {
53- const now = new Date ()
54- const date = new Date (event .date )
55- if (date < now ) {
56- acc .pastEvents .push (event )
57- } else {
58- acc .upcomingEvents .push (event )
59- }
60- return acc
61- }, { pastEvents: [], upcomingEvents: [] })
59+ export const { pastEvents, upcomingEvents } = events .reduce (
60+ (acc , event ) => {
61+ const now = new Date ()
62+ const date = new Date (event .date )
63+ if (date < now ) {
64+ acc .pastEvents .push (event )
65+ } else {
66+ acc .upcomingEvents .push (event )
67+ }
68+ return acc
69+ },
70+ { pastEvents: [], upcomingEvents: [] },
71+ )
6272
6373export function Events({ events }) {
64- return <div className = " mt-6" >
65- { events .map (event => (
66- <EventCard
67- key = { event .slug }
68- href = { event .eventLink }
69- date = { new Date (event .date )}
70- meta = { event .host }
71- name = { event .name }
72- city = { event .location }
73- />
74- ))}
75- </div >
74+ return (
75+ <div className = " mt-6" >
76+ { events .map (event => (
77+ <EventCard
78+ key = { event .slug }
79+ href = { event .eventLink }
80+ date = { new Date (event .date )}
81+ meta = { event .host }
82+ name = { event .name }
83+ city = { event .location }
84+ />
85+ ))}
86+ </div >
87+ )
7688}
7789
7890## Upcoming Events
@@ -89,34 +101,37 @@ export function Events({ events }) {
89101export function Meetups() {
90102 useEffect (() => {
91103 // Load only on client
92- import (' leaflet' ).then (L => {
104+ import (" leaflet" ).then (L => {
93105 // Fixes GET http://localhost:3000/community/upcoming-events/marker-icon-2x.png 404 (Not Found)
94106 // and replace default marker image
95107 L .Icon .Default .mergeOptions ({
96108 iconRetinaUrl: pinkCircle .src ,
97- shadowUrl: ' ' ,
98- });
99- const map = L .map (' map' ).setView ([45 , - 15 ], 2 );
100- L .tileLayer (' https://tile.openstreetmap.org/{z}/{x}/{y}.png' ).addTo (map );
109+ shadowUrl: " " ,
110+ })
111+ const map = L .map (" map" ).setView ([45 , - 15 ], 2 )
112+ L .tileLayer (" https://tile.openstreetmap.org/{z}/{x}/{y}.png" ).addTo (map )
101113 for (const { node } of meetups ) {
102114 L .marker ([node .latitude , node .longitude ])
103115 .addTo (map )
104- .bindPopup (` <a href="${node .link }" target="_blank" rel="noreferrer" class="!text-primary">${node .name }</a> ` )
116+ .bindPopup (
117+ ` <a href="${node .link }" target="_blank" rel="noreferrer" class="!text-primary">${node .name }</a> ` ,
118+ )
105119 }
106120 })
107- }, []);
108-
109- return <>
110- <div id = " map" className = " h-96 my-6" />
111- { meetups .map (({ node }) => (
112- <EventCard
113- key = { node .id }
114- href = { node .link }
115- name = { node .name }
116- city = { node .city }
117- />
118- ))}
119- </>
121+ }, [])
122+ return (
123+ <>
124+ <div id = " map" className = " h-96 my-6" />
125+ { meetups .map (({ node }) => (
126+ <EventCard
127+ key = { node .id }
128+ href = { node .link }
129+ name = { node .name }
130+ city = { node .city }
131+ />
132+ ))}
133+ </>
134+ )
120135}
121136
122137<Meetups />
@@ -186,7 +201,6 @@ const urls = meetups.filter(
186201
187202export const EventsIntro = () => {
188203 const { events } = useData();
189-
190204 return <p>Join one of <strong>{events.length}</strong> recent or upcoming GraphQL events around the world!</p>
191205}
192206
0 commit comments