11import { Feature , Map } from 'ol'
22import { Path } from '@/api/graphhopper'
3- import { FeatureCollection } from 'geojson'
4- import { useEffect } from 'react'
3+ import { useEffect , useRef , useState } from 'react'
54import VectorLayer from 'ol/layer/Vector'
65import VectorSource from 'ol/source/Vector'
7- import { GeoJSON } from 'ol/format'
86import { Stroke , Style } from 'ol/style'
97import { fromLonLat } from 'ol/proj'
108import { Select } from 'ol/interaction'
@@ -21,18 +19,42 @@ const selectedPathLayerKey = 'selectedPathLayer'
2119const accessNetworkLayerKey = 'accessNetworkLayer'
2220
2321export default function usePathsLayer ( map : Map , paths : Path [ ] , selectedPath : Path , queryPoints : QueryPoint [ ] ) {
22+ const [ showPaths , setShowPaths ] = useState ( true )
2423 useEffect ( ( ) => {
2524 removeCurrentPathLayers ( map )
26- addUnselectedPathsLayer (
27- map ,
28- paths . filter ( p => p != selectedPath ) ,
29- )
30- addSelectedPathsLayer ( map , selectedPath )
31- addAccessNetworkLayer ( map , selectedPath , queryPoints )
25+ if ( showPaths ) {
26+ addUnselectedPathsLayer (
27+ map ,
28+ paths . filter ( p => p != selectedPath )
29+ )
30+ addSelectedPathsLayer ( map , selectedPath )
31+ addAccessNetworkLayer ( map , selectedPath , queryPoints )
32+ }
3233 return ( ) => {
3334 removeCurrentPathLayers ( map )
3435 }
35- } , [ map , paths , selectedPath ] )
36+ } , [ map , paths , selectedPath , showPaths ] )
37+ useEffect ( ( ) => {
38+ const handleKeyDown = ( e : KeyboardEvent ) => {
39+ if ( e . key === 'h' ) setShowPaths ( false )
40+ }
41+
42+ const handleKeyUp = ( e : KeyboardEvent ) => {
43+ if ( e . key === 'h' ) setShowPaths ( true )
44+ }
45+
46+ const viewport = map . getViewport ( )
47+ if ( ! viewport ) return
48+
49+ viewport . tabIndex = - 1 // Make element focusable but not in tab order
50+
51+ viewport . addEventListener ( 'keydown' , handleKeyDown )
52+ viewport . addEventListener ( 'keyup' , handleKeyUp )
53+ return ( ) => {
54+ viewport . removeEventListener ( 'keydown' , handleKeyDown )
55+ viewport . removeEventListener ( 'keyup' , handleKeyUp )
56+ }
57+ } , [ ] ) // run only once when component is initialized
3658}
3759
3860function removeCurrentPathLayers ( map : Map ) {
0 commit comments