@@ -8,7 +8,7 @@ import React, {
88 useMemo ,
99} from 'react' ;
1010import { usePanzoom , PanzoomControls } from './panzoom' ;
11- import MapTest from './maps/MapTest ' ;
11+ import MapTest from './maps/MapWrapper ' ;
1212import {
1313 svgToLookup ,
1414 svgToLookupWithGroups ,
@@ -56,17 +56,17 @@ const MapPane = (props: {
5656
5757const initialFilters = {
5858 search : '' , // Search term, not supported yet but added for future use
59- selection : [ ] , // Array for flexibility in case we want to build more complex filter combinations
59+ selection : null , // Array for flexibility in case we want to build more complex filter combinations
6060} as {
6161 search : string ;
62- selection : string [ ] ;
62+ selection : string | null ;
6363} ;
6464
6565export const VenueMap = ( ) => {
6666 const svgRef = useRef < SVGSVGElement | null > ( null ) ;
6767 const containerRef = useRef < HTMLDivElement | null > ( null ) ;
6868 const [ elementLookup , setElementLookup ] = useState < SVGLookup > ( { } ) ;
69- const [ svgScale , setSvgScale ] = useState ( { scaleX : 1 , scaleY : 1 } ) ;
69+ // const [svgScale, setSvgScale] = useState({ scaleX: 1, scaleY: 1 });
7070 const [ hoveredElement , setHoveredElement ] = useState < string | null > ( null ) ;
7171 const searchParams = useSearchParams ( ) ;
7272 const [ elementData , setElementData ] = useState < { [ key : string ] : any } > ( {
@@ -83,6 +83,9 @@ export const VenueMap = () => {
8383 groups : [ 'coworks' ] ,
8484 } ,
8585 } ) ;
86+ const [ zoomLevel , setZoomLevel ] = useState < 'zoomed-in' | 'zoomed-out' > (
87+ 'zoomed-out'
88+ ) ;
8689
8790 const [ currentFilters , setCurrentFilters ] =
8891 useState < typeof initialFilters > ( initialFilters ) ;
@@ -92,7 +95,7 @@ export const VenueMap = () => {
9295 if ( selection ) {
9396 setCurrentFilters ( {
9497 ...currentFilters ,
95- selection : [ selection ] ,
98+ selection : selection ,
9699 } ) ;
97100 }
98101 } , [ searchParams ] ) ;
@@ -111,7 +114,7 @@ export const VenueMap = () => {
111114
112115 // console.log(allPossibleFilters, 'allPossibleFilters');
113116
114- const selectedElements = useMemo ( ( ) => {
117+ const selectedElement = useMemo ( ( ) => {
115118 const { groups, elements } = allPossibleFilters ;
116119
117120 // Selected filters
@@ -120,27 +123,32 @@ export const VenueMap = () => {
120123 // return filters[key];
121124 // });
122125
123- return elements . filter ( ( key ) => {
126+ return elements . find ( ( key ) => {
124127 // const element = elementLookup[key];
125128 const element = elementData [ key ] ;
126- const elementGroups = element ?. groups ;
129+ // const elementGroups = element?.groups;
127130
128131 // @ts -ignore
129- const isInGroup = elementGroups
130- ? currentFilters . selection . some ( ( activeGroup : string ) =>
131- elementGroups . some ( ( g : string ) => g === activeGroup )
132- )
133- : false ;
132+ // const isInGroup = elementGroups
133+ // ? currentFilters.selection.some((activeGroup: string) =>
134+ // elementGroups.some((g: string) => g === activeGroup)
135+ // )
136+ // : false;
134137 // @ts -ignore
135- const isSelected = currentFilters . selection . includes ( key ) ;
138+ const isSelected = currentFilters . selection === key ;
136139
137- return isInGroup || isSelected ;
140+ return isSelected ; // isInGroup || isSelected;
138141 } ) ;
139142 } , [ currentFilters , allPossibleFilters ] ) ;
140143
144+ console . log ( selectedElement , 'selectedElements' ) ;
145+
141146 // console.log(selectedElements, 'selectedElements');
142147
143- const { panzoomInstance, interactionsLocked } = usePanzoom ( 'venue-map' ) ;
148+ const { panzoomInstance, interactionsLocked } = usePanzoom (
149+ 'venue-map' ,
150+ setZoomLevel
151+ ) ;
144152
145153 useEffect ( ( ) => {
146154 const elementsWithIds = svgRef . current ?. querySelectorAll (
@@ -175,19 +183,19 @@ export const VenueMap = () => {
175183 // // }
176184 // });
177185
178- requestAnimationFrame ( ( ) => {
179- if ( svgRef . current ) {
180- const svgRect = svgRef . current . getBoundingClientRect ( ) ;
181- const viewBox = svgRef . current . viewBox . baseVal ;
182- const scaleX = svgRect . width / viewBox . width ;
183- const scaleY = svgRect . height / viewBox . height ;
184- setSvgScale ( { scaleX, scaleY } ) ;
185- }
186- } ) ;
186+ // requestAnimationFrame(() => {
187+ // if (svgRef.current) {
188+ // const svgRect = svgRef.current.getBoundingClientRect();
189+ // const viewBox = svgRef.current.viewBox.baseVal;
190+ // const scaleX = svgRect.width / viewBox.width;
191+ // const scaleY = svgRect.height / viewBox.height;
192+ // setSvgScale({ scaleX, scaleY });
193+ // }
194+ // });
187195 } , [ ] ) ;
188196
189197 const hasActiveFilters =
190- currentFilters . selection . length > 0 || currentFilters . search . length > 0 ;
198+ currentFilters . selection !== null || currentFilters . search . length > 0 ;
191199
192200 // Apply hover effect to all SVG elements dynamically
193201 useEffect ( ( ) => {
@@ -196,7 +204,7 @@ export const VenueMap = () => {
196204 const svgElements = svgRef . current . querySelectorAll ( '[id]:not(g)' ) ;
197205
198206 svgElements . forEach ( ( element ) => {
199- const isSelected = selectedElements . includes ( element . id ) ;
207+ const isSelected = selectedElement === element . id ;
200208 const isHovered = hoveredElement === element . id ;
201209
202210 const svgElement = element as SVGElement ;
@@ -210,7 +218,7 @@ export const VenueMap = () => {
210218 svgElement . style . opacity = '1' ;
211219 }
212220 } ) ;
213- } , [ selectedElements , hoveredElement , hasActiveFilters ] ) ;
221+ } , [ selectedElement , hoveredElement , hasActiveFilters ] ) ;
214222
215223 const handleSVGMouseOver = ( e : React . MouseEvent < HTMLDivElement > ) => {
216224 const target = e . target as SVGElement ;
@@ -240,6 +248,7 @@ export const VenueMap = () => {
240248
241249 const focusOnElement = ( id : string ) => {
242250 const svgElement = document . getElementById ( id ) ;
251+
243252 if ( ! svgElement || ! panzoomInstance || ! containerRef . current ) return ;
244253
245254 // Get actual screen positions - no scaling needed!
@@ -267,28 +276,27 @@ export const VenueMap = () => {
267276 id : string ,
268277 event : React . MouseEvent < SVGElement >
269278 ) => {
270- if ( elementLookup [ id ] && ! interactionsLocked ) {
271- // const isCurrentlySelected = selectedElement === id;
272- // setSelectedElement(isCurrentlySelected ? null : id);
279+ // if (elementLookup[id] && !interactionsLocked) {
280+ // const isCurrentlySelected = selectedElement === id;
281+ // setSelectedElement(isCurrentlySelected ? null : id);
273282
274- setCurrentFilters ( {
275- ...currentFilters ,
276- selection : [ id ] ,
277- } ) ;
283+ // console.log(id, 'id');
278284
279- // Focus on the element if it's being selected (not deselected)
280- // if (!isCurrentlySelected) {
281- focusOnElement ( id ) ;
282- // }
283- }
285+ setCurrentFilters ( {
286+ ...currentFilters ,
287+ selection : id ,
288+ } ) ;
289+
290+ focusOnElement ( id ) ;
284291 } ;
285292
286293 return (
287294 < div
288295 ref = { containerRef }
289296 id = "venue-container"
290297 className = { cn (
291- 'relative w-full overflow-hidden grow flex py-8'
298+ 'relative w-full overflow-hidden grow flex py-8' ,
299+ 'gradient-background'
292300 // hasActiveFilters && css['has-selection-or-hover']
293301 ) }
294302 onClick = { ( e ) => {
@@ -328,7 +336,7 @@ export const VenueMap = () => {
328336 </ div >
329337
330338 < MapPane
331- selection = { currentFilters . selection [ 0 ] }
339+ selection = { currentFilters . selection }
332340 elementLookup = { elementLookup }
333341 setCurrentFilters = { setCurrentFilters }
334342 />
@@ -344,19 +352,21 @@ export const VenueMap = () => {
344352 e . preventDefault ( ) ;
345353 panzoomInstance ?. moveTo ( 0 , 0 ) ;
346354 panzoomInstance ?. smoothZoomAbs ( 0 , 0 , 1 ) ;
347- setCurrentFilters ( { ...currentFilters , selection : [ group ] } ) ;
355+ setCurrentFilters ( { ...currentFilters , selection : group } ) ;
348356 } }
349357 onTouchEnd = { ( e ) => {
350358 e . stopPropagation ( ) ;
351359 e . preventDefault ( ) ;
352360 panzoomInstance ?. moveTo ( 0 , 0 ) ;
353361 panzoomInstance ?. smoothZoomAbs ( 0 , 0 , 1 ) ;
354- setCurrentFilters ( { ...currentFilters , selection : [ group ] } ) ;
362+ setCurrentFilters ( { ...currentFilters , selection : group } ) ;
355363 } }
356364 >
357365 { group }
358366 </ button >
359367 ) ) }
368+
369+ { zoomLevel }
360370 </ div >
361371
362372 { /* Zoom controls */ }
@@ -409,3 +419,11 @@ export const VenueMap = () => {
409419 4) Get current zoom level
410420 5) Show different parts of the map depending on the zoom level (low to high fidelity)
411421*/
422+
423+ /*
424+ 1) All data should be fetched and ready
425+
426+ 2) On click, set id
427+ 2.1) Pane should receive the current selection
428+
429+ */
0 commit comments