@@ -9,6 +9,7 @@ import Page from "@components/Page";
99import Badge from "@components/Badge" ;
1010import { getTags } from "./api/discover/tags" ;
1111import { getUsers } from "./api/profiles" ;
12+ import { getEvents } from "./api/events" ;
1213import config from "@config/app.json" ;
1314
1415//this is required as leaflet is not compatible with SSR
@@ -21,6 +22,8 @@ export async function getStaticProps() {
2122 let data = {
2223 users : [ ] ,
2324 tags : [ ] ,
25+ events :[ ] ,
26+ points : [ ]
2427 } ;
2528 try {
2629 data . users = await getUsers ( ) ;
@@ -85,15 +88,47 @@ export async function getStaticProps() {
8588 logger . error ( e , "ERROR loading tags" ) ;
8689 }
8790
91+ try {
92+ data . events = await getEvents ( true ) ;
93+ } catch ( e ) {
94+ logger . error ( e , "ERROR loading Events" ) ;
95+ }
96+
97+ data . events = data . events . map ( ( event , index ) => {
98+ const offset = Math . random ( ) * 0.02 ; // ~2.2km
99+ const offset2 = Math . random ( ) * 0.02 ; // ~2.2km
100+ return {
101+ type : "Feature" ,
102+ properties : {
103+ cluster : false ,
104+ isEvent : true ,
105+ description : event . description ,
106+ name : event . name ,
107+ location : event . location ,
108+ date : event . date ,
109+ url : event . url || ''
110+ } ,
111+ geometry : {
112+ type : "Point" ,
113+ coordinates : adjustCoords (
114+ [ parseFloat ( event . location . lon ) , parseFloat ( event . location . lat ) ] ,
115+ offset ,
116+ offset2 ,
117+ index
118+ ) ,
119+ } ,
120+ } ;
121+ } ) ;
122+ data . points = [ ...data . users , ...data . events ]
88123 return {
89124 props : { data } ,
90125 revalidate : pageConfig . revalidateSeconds ,
91126 } ;
92127}
93128
94129export default function Map ( { data } ) {
95- let { users , tags } = data ;
96- const [ filteredUsers , setFilteredUsers ] = useState ( [ ] ) ;
130+ let { tags , points } = data ;
131+ const [ filteredPoints , setFilteredPoints ] = useState ( [ ] ) ;
97132 const [ selectedTags , setSelectedTags ] = useState ( new Set ( ) ) ;
98133
99134 let results = [ ] ;
@@ -115,12 +150,12 @@ export default function Map({ data }) {
115150 const valueLower = value . toLowerCase ( ) ;
116151 const terms = [ ...updateSelectedTagsFilter ( value ) ] ;
117152
118- results = users . filter ( ( user ) => {
119- if ( user . properties . name . toLowerCase ( ) . includes ( valueLower ) ) {
153+ results = points . filter ( ( point ) => {
154+ if ( point . properties . name . toLowerCase ( ) . includes ( valueLower ) ) {
120155 return true ;
121156 }
122157
123- let userTags = user . properties . tags ?. map ( ( tag ) => tag . toLowerCase ( ) ) ;
158+ let userTags = point . properties . tags ?. map ( ( tag ) => tag . toLowerCase ( ) ) ;
124159
125160 if ( terms . every ( ( keyword ) => userTags ?. includes ( keyword . toLowerCase ( ) ) ) ) {
126161 return true ;
@@ -129,11 +164,11 @@ export default function Map({ data }) {
129164 return false ;
130165 } ) ;
131166
132- setFilteredUsers ( results ) ;
167+ setFilteredPoints ( results ) ;
133168 } ;
134169
135170 const resetFilter = ( ) => {
136- setFilteredUsers ( [ ] ) ;
171+ setFilteredPoints ( [ ] ) ;
137172 setSelectedTags ( new Set ( ) ) ;
138173 } ;
139174
@@ -172,9 +207,9 @@ export default function Map({ data }) {
172207 < Badge
173208 disable = { selectedTags . size == 0 ? true : false }
174209 content = {
175- filteredUsers . length > 0 ? filteredUsers . length : users . length
210+ filteredPoints . length > 0 ? filteredPoints . length : points . length
176211 }
177- >
212+ >
178213 < Button
179214 onClick = { resetFilter }
180215 primary = { true }
@@ -196,7 +231,7 @@ export default function Map({ data }) {
196231 </ div >
197232 < div className = "h-screen" >
198233 < DynamicMap
199- users = { filteredUsers . length > 0 ? filteredUsers : users }
234+ points = { filteredPoints . length > 0 ? filteredPoints : points }
200235 />
201236 </ div >
202237 </ Page >
0 commit comments