Skip to content

Commit 852b11d

Browse files
committed
Move group and filter transforms to main
1 parent cf6a44c commit 852b11d

File tree

7 files changed

+143
-303
lines changed

7 files changed

+143
-303
lines changed

dev/App.js

+32-34
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import brace from 'brace'; // eslint-disable-line no-unused-vars
77
import AceEditor from 'react-ace';
88
import Select from 'react-select';
99
import PlotlyEditor, {DefaultEditor, Panel} from '../src';
10-
import GraphTransformsPanel from '../src/default_panels/GraphTransformsPanelDev';
1110
import Inspector from 'react-inspector';
1211
import tips from './tips';
1312
import 'brace/mode/json';
@@ -43,38 +42,38 @@ const dataSourceOptions = Object.keys(dataSources).map(name => ({
4342
const config = {mapboxAccessToken: ACCESS_TOKENS.MAPBOX, editable: true};
4443

4544
const traceTypesConfig = {
46-
traces: _ => ([
47-
{
48-
value: 'scattergl',
49-
icon: 'scatter',
50-
label: _('Scatter'),
51-
},
52-
{
53-
value: 'bar',
54-
label: _('Bar'),
55-
},
56-
{
57-
value: 'histogram',
58-
label: _('Histogram'),
59-
},
60-
{
61-
value: 'table',
62-
label: _('Table'),
63-
},
64-
{
65-
value: 'pie',
66-
label: _('Pie'),
67-
},
68-
{
69-
value: 'box',
70-
label: _('Box'),
71-
},
72-
{
73-
value: 'histogram2d',
74-
label: _('Histogram 2D'),
75-
},
76-
]),
77-
complex: true
45+
traces: _ => [
46+
{
47+
value: 'scattergl',
48+
icon: 'scatter',
49+
label: _('Scatter'),
50+
},
51+
{
52+
value: 'bar',
53+
label: _('Bar'),
54+
},
55+
{
56+
value: 'histogram',
57+
label: _('Histogram'),
58+
},
59+
{
60+
value: 'table',
61+
label: _('Table'),
62+
},
63+
{
64+
value: 'pie',
65+
label: _('Pie'),
66+
},
67+
{
68+
value: 'box',
69+
label: _('Box'),
70+
},
71+
{
72+
value: 'histogram2d',
73+
label: _('Histogram 2D'),
74+
},
75+
],
76+
complex: true,
7877
};
7978

8079
class App extends Component {
@@ -160,7 +159,6 @@ class App extends Component {
160159
// useAsDefaultTrace={{type: 'scattergl', mode: 'markers'}}
161160
>
162161
<DefaultEditor>
163-
<GraphTransformsPanel group="Dev" name="Transforms" />
164162
<Panel group="Dev" name="JSON">
165163
<div className="mocks">
166164
<Select

dev/percy/panelTest.json

+16-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,22 @@
101101
"color": "#1f77b4",
102102
"thickness": 2,
103103
"width": 4
104-
}
104+
},
105+
"transforms": [
106+
{
107+
"type": "groupby",
108+
"groupssrc": "ints"
109+
},
110+
{
111+
"type": "filter",
112+
"targetsrc": "ints",
113+
"operation": "[]",
114+
"value": [
115+
"0",
116+
""
117+
]
118+
}
119+
]
105120
}
106121
],
107122
"layout": {

src/components/containers/TransformAccordion.js

+57-20
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class TransformAccordion extends Component {
1414
fullContainer,
1515
fullContainer: {transforms = []},
1616
localize: _,
17+
container,
18+
dataSourceOptions,
1719
} = this.context;
1820
const {children} = this.props;
1921

@@ -23,7 +25,9 @@ class TransformAccordion extends Component {
2325
{label: _('Aggregate'), type: 'aggregate'},
2426
];
2527

26-
if (['scatter', 'bar', 'scattergl'].indexOf(fullContainer.type) === -1) {
28+
const transformableCharts = ['scatter', 'bar', 'scattergl'];
29+
30+
if (!transformableCharts.includes(fullContainer.type)) {
2731
return (
2832
<FoldEmpty
2933
icon={PlotScatterIcon}
@@ -32,39 +36,70 @@ class TransformAccordion extends Component {
3236
);
3337
}
3438

39+
const transformBy =
40+
container.transforms &&
41+
container.transforms.map(tr => {
42+
let retValue = '';
43+
if (tr.groupssrc) {
44+
const groupssrc = dataSourceOptions.find(
45+
d => d.value === tr.groupssrc
46+
);
47+
retValue = `: ${
48+
groupssrc && groupssrc.label ? groupssrc.label : tr.groupssrc
49+
}`;
50+
} else if (tr.targetsrc) {
51+
const targetsrc = dataSourceOptions.find(
52+
d => d.value === tr.targetsrc
53+
);
54+
retValue = `: ${
55+
targetsrc && targetsrc.label ? targetsrc.label : tr.targetsrc
56+
}`;
57+
}
58+
return retValue;
59+
});
60+
3561
const filteredTransforms = transforms.filter(({type}) => Boolean(type));
3662
const content =
3763
filteredTransforms.length &&
3864
filteredTransforms.map((tr, i) => (
3965
<TransformFold
4066
key={i}
4167
transformIndex={i}
42-
name={transformTypes.filter(({type}) => type === tr.type)[0].label}
68+
name={`${
69+
transformTypes.filter(({type}) => type === tr.type)[0].label
70+
}${transformBy[i]}`}
4371
canDelete={true}
4472
>
4573
{children}
4674
</TransformFold>
4775
));
4876

49-
const handlers = transformTypes.map(({label, type}) => {
50-
return {
51-
label,
52-
handler: context => {
53-
const {fullContainer, updateContainer} = context;
54-
if (updateContainer) {
55-
const transformIndex = Array.isArray(fullContainer.transforms)
56-
? fullContainer.transforms.length
57-
: 0;
58-
const key = `transforms[${transformIndex}]`;
59-
updateContainer({[key]: {type}});
60-
}
61-
},
62-
};
63-
});
64-
6577
const addAction = {
66-
label: _('Aggregation'),
67-
handler: handlers[2].handler,
78+
label: _('Transform'),
79+
handler: transformTypes.map(({label, type}) => {
80+
return {
81+
label,
82+
handler: context => {
83+
const {fullContainer, updateContainer} = context;
84+
if (updateContainer) {
85+
const transformIndex = Array.isArray(fullContainer.transforms)
86+
? fullContainer.transforms.length
87+
: 0;
88+
const key = `transforms[${transformIndex}]`;
89+
90+
const payload = {type};
91+
const firstDataSource = dataSourceOptions[0].value;
92+
if (type === 'filter') {
93+
payload.targetsrc = firstDataSource;
94+
} else {
95+
payload.groupssrc = firstDataSource;
96+
}
97+
98+
updateContainer({[key]: payload});
99+
}
100+
},
101+
};
102+
}),
68103
};
69104

70105
return (
@@ -78,6 +113,8 @@ class TransformAccordion extends Component {
78113
TransformAccordion.contextTypes = {
79114
fullContainer: PropTypes.object,
80115
localize: PropTypes.func,
116+
container: PropTypes.object,
117+
dataSourceOptions: PropTypes.array,
81118
};
82119

83120
TransformAccordion.propTypes = {

src/components/containers/TransformAccordionDev.js

-130
This file was deleted.

src/components/fields/FilterOperation.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,11 @@ class UnconnectedFilterValue extends Component {
160160
}
161161

162162
render() {
163-
const {
164-
localize: _,
165-
container: {operation},
166-
} = this.context;
163+
const {localize: _, container} = this.context;
164+
165+
const operation =
166+
container && container.operation ? container.operation : '=';
167+
167168
const {fullValue, attr, defaultValue} = this.props;
168169
const op = findOperation(operation);
169170

0 commit comments

Comments
 (0)