You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2018/01/25 22:07:37 UTC
[incubator-superset] branch master updated: [geo] Add JS controls
to remaining layers (#4272)
This is an automated email from the ASF dual-hosted git repository.
maximebeauchemin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 2384ad4 [geo] Add JS controls to remaining layers (#4272)
2384ad4 is described below
commit 2384ad4eb5441fa353f2a6cd5d5df9ac895afff0
Author: Hugh A. Miles II <hu...@gmail.com>
AuthorDate: Thu Jan 25 14:07:34 2018 -0800
[geo] Add JS controls to remaining layers (#4272)
* Update viz.py
* added JS controls
* add JS to grid layout
* add JS to hexagon layer
* added JS controls to screengrid
* update to js_data_mutator controls
* remove .map()
---
.../assets/javascripts/explore/stores/visTypes.js | 36 ++++++++++++++++++++++
.../assets/visualizations/deckgl/layers/arc.jsx | 14 +++++++--
.../assets/visualizations/deckgl/layers/grid.jsx | 15 +++++++--
.../assets/visualizations/deckgl/layers/hex.jsx | 14 +++++++--
.../visualizations/deckgl/layers/screengrid.jsx | 14 +++++++--
superset/viz.py | 2 +-
6 files changed, 86 insertions(+), 9 deletions(-)
diff --git a/superset/assets/javascripts/explore/stores/visTypes.js b/superset/assets/javascripts/explore/stores/visTypes.js
index 4b0120d..f935a5b 100644
--- a/superset/assets/javascripts/explore/stores/visTypes.js
+++ b/superset/assets/javascripts/explore/stores/visTypes.js
@@ -373,6 +373,15 @@ export const visTypes = {
['grid_size', 'extruded'],
],
},
+ {
+ label: t('Advanced'),
+ controlSetRows: [
+ ['js_columns'],
+ ['js_data_mutator'],
+ ['js_tooltip'],
+ ['js_onclick_href'],
+ ],
+ },
],
controlOverrides: {
size: {
@@ -402,6 +411,15 @@ export const visTypes = {
['grid_size', 'extruded'],
],
},
+ {
+ label: t('Advanced'),
+ controlSetRows: [
+ ['js_columns'],
+ ['js_data_mutator'],
+ ['js_tooltip'],
+ ['js_onclick_href'],
+ ],
+ },
],
controlOverrides: {
size: {
@@ -469,6 +487,15 @@ export const visTypes = {
['grid_size', 'color_picker'],
],
},
+ {
+ label: t('Advanced'),
+ controlSetRows: [
+ ['js_columns'],
+ ['js_data_mutator'],
+ ['js_tooltip'],
+ ['js_onclick_href'],
+ ],
+ },
],
controlOverrides: {
size: {
@@ -582,6 +609,15 @@ export const visTypes = {
['stroke_width', null],
],
},
+ {
+ label: t('Advanced'),
+ controlSetRows: [
+ ['js_columns'],
+ ['js_data_mutator'],
+ ['js_tooltip'],
+ ['js_onclick_href'],
+ ],
+ },
],
},
diff --git a/superset/assets/visualizations/deckgl/layers/arc.jsx b/superset/assets/visualizations/deckgl/layers/arc.jsx
index 38bd1e8..8e04e9a 100644
--- a/superset/assets/visualizations/deckgl/layers/arc.jsx
+++ b/superset/assets/visualizations/deckgl/layers/arc.jsx
@@ -1,16 +1,26 @@
import { ArcLayer } from 'deck.gl';
-export default function arcLayer(formData, payload) {
+import * as common from './common';
+import sandboxedEval from '../../../javascripts/modules/sandbox';
+
+export default function arcLayer(formData, payload, slice) {
const fd = formData;
const fc = fd.color_picker;
- const data = payload.data.arcs.map(d => ({
+ let data = payload.data.arcs.map(d => ({
...d,
color: [fc.r, fc.g, fc.b, 255 * fc.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 ArcLayer({
id: `path-layer-${fd.slice_id}`,
data,
strokeWidth: (fd.stroke_width) ? fd.stroke_width : 3,
+ ...common.commonLayerProps(fd, slice),
});
}
diff --git a/superset/assets/visualizations/deckgl/layers/grid.jsx b/superset/assets/visualizations/deckgl/layers/grid.jsx
index a461eb9..ed970d2 100644
--- a/superset/assets/visualizations/deckgl/layers/grid.jsx
+++ b/superset/assets/visualizations/deckgl/layers/grid.jsx
@@ -1,12 +1,22 @@
import { GridLayer } from 'deck.gl';
-export default function getLayer(formData, payload) {
+import * as common from './common';
+import sandboxedEval from '../../../javascripts/modules/sandbox';
+
+export default function getLayer(formData, payload, slice) {
const fd = formData;
const c = fd.color_picker;
- const data = payload.data.features.map(d => ({
+ 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 GridLayer({
id: `grid-layer-${fd.slice_id}`,
data,
@@ -18,5 +28,6 @@ export default function getLayer(formData, payload) {
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),
});
}
diff --git a/superset/assets/visualizations/deckgl/layers/hex.jsx b/superset/assets/visualizations/deckgl/layers/hex.jsx
index 0e33e94..86fb534 100644
--- a/superset/assets/visualizations/deckgl/layers/hex.jsx
+++ b/superset/assets/visualizations/deckgl/layers/hex.jsx
@@ -1,13 +1,22 @@
import { HexagonLayer } from 'deck.gl';
-export default function getLayer(formData, payload) {
+import * as common from './common';
+import sandboxedEval from '../../../javascripts/modules/sandbox';
+
+export default function getLayer(formData, payload, slice) {
const fd = formData;
const c = fd.color_picker;
- const data = payload.data.features.map(d => ({
+ 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,
@@ -19,5 +28,6 @@ export default function getLayer(formData, payload) {
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),
});
}
diff --git a/superset/assets/visualizations/deckgl/layers/screengrid.jsx b/superset/assets/visualizations/deckgl/layers/screengrid.jsx
index 54edd9e..ca589cd 100644
--- a/superset/assets/visualizations/deckgl/layers/screengrid.jsx
+++ b/superset/assets/visualizations/deckgl/layers/screengrid.jsx
@@ -1,13 +1,22 @@
import { ScreenGridLayer } from 'deck.gl';
-export default function getLayer(formData, payload) {
+import * as common from './common';
+import sandboxedEval from '../../../javascripts/modules/sandbox';
+
+export default function getLayer(formData, payload, slice) {
const fd = formData;
const c = fd.color_picker;
- const data = payload.data.features.map(d => ({
+ 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);
+ }
+
// Passing a layer creator function instead of a layer since the
// layer needs to be regenerated at each render
return new ScreenGridLayer({
@@ -19,5 +28,6 @@ export default function getLayer(formData, payload) {
maxColor: [c.r, c.g, c.b, 255 * c.a],
outline: false,
getWeight: d => d.weight || 0,
+ ...common.commonLayerProps(fd, slice),
});
}
diff --git a/superset/viz.py b/superset/viz.py
index 27eac63..6fa7d98 100644
--- a/superset/viz.py
+++ b/superset/viz.py
@@ -2077,7 +2077,7 @@ class DeckArc(BaseDeckGLViz):
arcs = d['features']
return {
- 'arcs': [arc['position'] for arc in arcs],
+ 'arcs': arcs,
'mapboxApiKey': config.get('MAPBOX_API_KEY'),
}
--
To stop receiving notification emails like this one, please contact
maximebeauchemin@apache.org.