in examples/experimental/h3-grid/src/app.js [34:94]
export default function App() {
const [initialViewState, setInitialViewState] = useState(INITIAL_VIEW_STATE);
const [resolution, setResolution] = useState(1);
const [currentViewState] = useState({...INITIAL_VIEW_STATE});
const onViewStateChange = ({viewState}) => {
// Just save a copy of the viewState, no need to trigger rerender
Object.assign(currentViewState, viewState);
};
const onResolutionChange = evt => {
const newResolution = Number(evt.target.value);
const minZoom = getMinZoom(newResolution, MAX_HEX_COUNT);
setResolution(newResolution);
setInitialViewState({
...currentViewState,
zoom: Math.max(currentViewState.zoom, minZoom),
minZoom
});
};
const layer = new H3GridLayer({
resolution,
maxHexCount: MAX_HEX_COUNT,
filled: true,
extruded: false,
stroked: true,
lineWidthUnits: 'pixels',
getLineWidth: 2,
getFillColor: [0, 0, 0, 1],
pickable: true,
autoHighlight: true
});
return (
<>
<DeckGL
initialViewState={initialViewState}
controller={true}
views={MAP_VIEW}
layers={[layer]}
onViewStateChange={onViewStateChange}
getTooltip={info => info.object}
>
<StaticMap mapStyle="mapbox://styles/mapbox/light-v9" mapboxApiAccessToken={MAPBOX_TOKEN} />
</DeckGL>
<div style={CONTROL_PANEL_STYLE}>
<div>Resolution: {resolution}</div>
<input
type="range"
min="0"
max="15"
step="1"
value={resolution}
onInput={onResolutionChange}
/>
</div>
</>
);
}