all files / src/visualizations/deckgl/layers/ hex.jsx

36.67% Statements 11/30
0% Branches 0/4
0% Functions 0/7
38.46% Lines 10/26
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72                                                                                                                            
import React from 'react';
import ReactDOM from 'react-dom';
 
import { HexagonLayer } from 'deck.gl';
 
import DeckGLContainer from './../DeckGLContainer';
 
import * as common from './common';
import sandboxedEval from '../../../modules/sandbox';
 
function getLayer(formData, payload, slice) {
  const fd = formData;
  const c = fd.color_picker;
  let data = payload.data.features.map(d => ({
    ...d,
    color: [c.r, c.g, c.b, 255 * c.a],
  }));
 
  if (fd.js_data_mutator) {
    // Applying user defined data mutator if defined
    const jsFnMutator = sandboxedEval(fd.js_data_mutator);
    data = jsFnMutator(data);
  }
 
  return new HexagonLayer({
    id: `hex-layer-${fd.slice_id}`,
    data,
    pickable: true,
    radius: fd.grid_size,
    minColor: [0, 0, 0, 0],
    extruded: fd.extruded,
    maxColor: [c.r, c.g, c.b, 255 * c.a],
    outline: false,
    getElevationValue: points => points.reduce((sum, point) => sum + point.weight, 0),
    getColorValue: points => points.reduce((sum, point) => sum + point.weight, 0),
    ...common.commonLayerProps(fd, slice),
  });
}
 
function getPoints(data) {
  return data.map(d => d.position);
}
 
function deckHex(slice, payload, setControlValue) {
  const layer = getLayer(slice.formData, payload, slice);
  let viewport = {
    ...slice.formData.viewport,
    width: slice.width(),
    height: slice.height(),
  };
 
  if (slice.formData.autozoom) {
    viewport = common.fitViewport(viewport, getPoints(payload.data.features));
  }
 
  ReactDOM.render(
    <DeckGLContainer
      mapboxApiAccessToken={payload.data.mapboxApiKey}
      viewport={viewport}
      layers={[layer]}
      mapStyle={slice.formData.mapbox_style}
      setControlValue={setControlValue}
    />,
    document.getElementById(slice.containerId),
  );
}
 
module.exports = {
  default: deckHex,
  getLayer,
};