Skip to content

Commit ba92c6e

Browse files
authored
Hide paths while pressing the "h" key or press a small icon next to the map attribution, second attempt (#435)
1 parent e4d5e18 commit ba92c6e

File tree

1 file changed

+32
-10
lines changed

1 file changed

+32
-10
lines changed

src/layers/UsePathsLayer.tsx

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import { Feature, Map } from 'ol'
22
import { Path } from '@/api/graphhopper'
3-
import { FeatureCollection } from 'geojson'
4-
import { useEffect } from 'react'
3+
import { useEffect, useRef, useState } from 'react'
54
import VectorLayer from 'ol/layer/Vector'
65
import VectorSource from 'ol/source/Vector'
7-
import { GeoJSON } from 'ol/format'
86
import { Stroke, Style } from 'ol/style'
97
import { fromLonLat } from 'ol/proj'
108
import { Select } from 'ol/interaction'
@@ -21,18 +19,42 @@ const selectedPathLayerKey = 'selectedPathLayer'
2119
const accessNetworkLayerKey = 'accessNetworkLayer'
2220

2321
export 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

3860
function removeCurrentPathLayers(map: Map) {

0 commit comments

Comments
 (0)