Skip to content

Commit e6959e5

Browse files
committed
no more empty folds
1 parent a10f405 commit e6959e5

File tree

7 files changed

+57
-82
lines changed

7 files changed

+57
-82
lines changed

src/DefaultEditor.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
StyleColorbarsPanel,
1717
StyleUpdateMenusPanel,
1818
} from './default_panels';
19+
import {traceHasColorbar} from './default_panels/StyleColorbarsPanel';
1920
import Logo from './components/widgets/Logo';
2021
import {TRANSFORMABLE_TRACES} from './lib/constants';
2122

@@ -62,11 +63,7 @@ class DefaultEditor extends Component {
6263
}
6364

6465
hasColorbars() {
65-
return this.context.fullData.some(
66-
d =>
67-
(d.marker && d.marker.showscale !== undefined) || // eslint-disable-line no-undefined
68-
d.showscale !== undefined // eslint-disable-line no-undefined
69-
);
66+
return this.context.fullData.some(d => traceHasColorbar({}, d));
7067
}
7168

7269
render() {

src/components/containers/SubplotAccordion.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const CartesianSubplotFold = connectCartesianSubplotToLayout(PlotlyFold);
1717
class SubplotAccordion extends Component {
1818
render() {
1919
const {data = [], layout = {}, localize: _} = this.context;
20-
const {children, messageIfEmptyFold} = this.props;
20+
const {children} = this.props;
2121
const subplotFolds = [];
2222

2323
const allCartesianAxisCombinations = data.reduce((acc, curVal, inx) => {
@@ -54,7 +54,6 @@ class SubplotAccordion extends Component {
5454
key={d.index[0]}
5555
traceIndexes={d.index}
5656
canDelete={false}
57-
messageIfEmpty={messageIfEmptyFold}
5857
xaxis={d.xaxis}
5958
yaxis={d.yaxis}
6059
name={`${d.xaxisName} | ${d.yaxisName}`}
@@ -116,7 +115,6 @@ class SubplotAccordion extends Component {
116115
key={layoutKey}
117116
traceIndexes={traceIndexes}
118117
canDelete={false}
119-
messageIfEmpty={messageIfEmptyFold}
120118
subplot={layoutKey}
121119
name={subplotName}
122120
>
@@ -140,7 +138,6 @@ class SubplotAccordion extends Component {
140138
key={i}
141139
traceIndexes={[i]}
142140
canDelete={false}
143-
messageIfEmpty={messageIfEmptyFold}
144141
name={
145142
d.type === 'pie'
146143
? `${_('Pie')} ${pieCounter > 1 ? pieCounter : ''}`
@@ -166,7 +163,6 @@ SubplotAccordion.contextTypes = {
166163

167164
SubplotAccordion.propTypes = {
168165
children: PropTypes.node,
169-
messageIfEmptyFold: PropTypes.string,
170166
};
171167

172168
export default SubplotAccordion;

src/components/containers/TraceAccordion.js

Lines changed: 39 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,21 @@ class TraceAccordion extends Component {
2323
setLocals(props, context) {
2424
// we don't want to include analysis transforms when we're in the create panel
2525
const base = props.canGroup ? context.fullData : context.data;
26+
const traceFilterCondition =
27+
this.props.traceFilterCondition || (() => true);
2628

27-
this.filteredTracesFullDataPositions = [];
29+
this.filteredTracesIndexes = [];
2830
this.filteredTraces = base.filter((t, i) => {
29-
if (props.excludeFits) {
30-
return !(t.transforms && t.transforms.every(tr => tr.type === 'fit'));
31+
if (traceFilterCondition(t, context.fullData[i])) {
32+
this.filteredTracesIndexes.push(i);
33+
return true;
3134
}
32-
this.filteredTracesFullDataPositions.push(i);
33-
return true;
35+
return false;
3436
});
3537
}
3638

3739
renderGroupedTraceFolds() {
38-
if (!this.filteredTraces.length || this.filteredTraces.length < 2) {
40+
if (!this.filteredTraces.length || this.filteredTraces.length <= 1) {
3941
return null;
4042
}
4143

@@ -55,61 +57,45 @@ class TraceAccordion extends Component {
5557

5658
dataArrayPositionsByTraceType[traceType].push(trace.index);
5759
fullDataArrayPositionsByTraceType[traceType].push(
58-
this.filteredTracesFullDataPositions[index]
60+
this.filteredTracesIndexes[index]
5961
);
6062
});
6163

62-
return Object.keys(fullDataArrayPositionsByTraceType).map((type, index) => {
63-
return (
64-
<TraceFold
65-
key={index}
66-
traceIndexes={dataArrayPositionsByTraceType[type]}
67-
name={traceTypes(_).find(t => t.value === type).label}
68-
fullDataArrayPosition={fullDataArrayPositionsByTraceType[type]}
69-
>
70-
{this.props.children}
71-
</TraceFold>
72-
);
73-
});
64+
return Object.keys(fullDataArrayPositionsByTraceType).map((type, index) => (
65+
<TraceFold
66+
key={index}
67+
traceIndexes={dataArrayPositionsByTraceType[type]}
68+
name={traceTypes(_).find(t => t.value === type).label}
69+
fullDataArrayPosition={fullDataArrayPositionsByTraceType[type]}
70+
>
71+
{this.props.children}
72+
</TraceFold>
73+
));
7474
}
7575

7676
renderUngroupedTraceFolds() {
77-
if (!this.filteredTraces.length) {
78-
return null;
79-
}
80-
81-
return this.filteredTraces.map((d, i) => {
82-
return (
83-
<TraceFold
84-
key={i}
85-
traceIndexes={[d.index]}
86-
canDelete={this.props.canAdd}
87-
messageIfEmpty={this.props.messageIfEmptyFold}
88-
fullDataArrayPosition={[this.filteredTracesFullDataPositions[i]]}
89-
>
90-
{this.props.children}
91-
</TraceFold>
92-
);
93-
});
77+
return this.filteredTraces.map((d, i) => (
78+
<TraceFold
79+
key={i}
80+
traceIndexes={[d.index]}
81+
canDelete={this.props.canAdd}
82+
fullDataArrayPosition={[this.filteredTracesIndexes[i]]}
83+
>
84+
{this.props.children}
85+
</TraceFold>
86+
));
9487
}
9588

9689
renderTraceFolds() {
97-
if (!this.filteredTraces.length) {
98-
return null;
99-
}
100-
101-
return this.filteredTraces.map((d, i) => {
102-
return (
103-
<TraceFold
104-
key={i}
105-
traceIndexes={[i]}
106-
canDelete={this.props.canAdd}
107-
messageIfEmpty={this.props.messageIfEmptyFold}
108-
>
109-
{this.props.children}
110-
</TraceFold>
111-
);
112-
});
90+
return this.filteredTraces.map((d, i) => (
91+
<TraceFold
92+
key={i}
93+
traceIndexes={[this.filteredTracesIndexes[i]]}
94+
canDelete={this.props.canAdd}
95+
>
96+
{this.props.children}
97+
</TraceFold>
98+
));
11399
}
114100

115101
render() {
@@ -178,8 +164,7 @@ TraceAccordion.propTypes = {
178164
canAdd: PropTypes.bool,
179165
canGroup: PropTypes.bool,
180166
children: PropTypes.node,
181-
excludeFits: PropTypes.bool,
182-
messageIfEmptyFold: PropTypes.string,
167+
traceFilterCondition: PropTypes.func,
183168
};
184169

185170
export default TraceAccordion;

src/components/containers/TransformAccordion.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,12 @@ import PlotlyPanel from './PlotlyPanel';
33
import PropTypes from 'prop-types';
44
import React, {Component} from 'react';
55
import {connectTransformToTrace} from 'lib';
6-
import FoldEmpty from './FoldEmpty';
7-
import {PlotScatterIcon} from 'plotly-icons';
8-
import {TRANSFORMABLE_TRACES} from 'lib/constants';
96

107
const TransformFold = connectTransformToTrace(PlotlyFold);
118

129
class TransformAccordion extends Component {
1310
render() {
1411
const {
15-
fullContainer,
1612
fullContainer: {transforms = []},
1713
localize: _,
1814
container,
@@ -27,15 +23,6 @@ class TransformAccordion extends Component {
2723
{label: _('Sort'), type: 'sort'},
2824
];
2925

30-
if (!TRANSFORMABLE_TRACES.includes(fullContainer.type)) {
31-
return (
32-
<FoldEmpty
33-
icon={PlotScatterIcon}
34-
messagePrimary={_('No transforms available for this trace type')}
35-
/>
36-
);
37-
}
38-
3926
const transformBy =
4027
container.transforms &&
4128
container.transforms.map(tr => {

src/default_panels/GraphCreatePanel.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ import {
1919

2020
const GraphCreatePanel = (props, {localize: _}) => {
2121
return (
22-
<TraceAccordion canAdd excludeFits>
22+
<TraceAccordion
23+
canAdd
24+
traceFilterCondition={t =>
25+
!(t.transforms && t.transforms.every(tr => tr.type === 'fit'))
26+
}
27+
>
2328
<TraceSelector label={_('Type')} attr="type" show />
2429

2530
<LocationSelector attr="type" />

src/default_panels/GraphTransformsPanel.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
FilterValue,
1212
} from '../components';
1313
import {connectAggregationToTransform} from '../lib';
14+
import {TRANSFORMABLE_TRACES} from 'lib/constants';
1415

1516
const AggregationSection = connectAggregationToTransform(PlotlySection);
1617

@@ -68,7 +69,9 @@ Aggregations.contextTypes = {
6869

6970
const GraphTransformsPanel = (props, {localize: _}) => {
7071
return (
71-
<TraceAccordion>
72+
<TraceAccordion
73+
traceFilterCondition={t => TRANSFORMABLE_TRACES.includes(t.type)}
74+
>
7275
<TransformAccordion>
7376
<Radio
7477
attr="enabled"

src/default_panels/StyleColorbarsPanel.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ import {
1616
VisibilitySelect,
1717
} from '../components';
1818

19+
export const traceHasColorbar = (trace, fullTrace) =>
20+
(fullTrace.marker && fullTrace.marker.showscale !== undefined) || // eslint-disable-line no-undefined
21+
fullTrace.showscale !== undefined; // eslint-disable-line no-undefined
22+
1923
const StyleColorBarsPanel = (props, {localize: _}) => {
2024
return (
21-
<TraceAccordion
22-
messageIfEmptyFold={_('Need a color scale for a colorbar!')}
23-
>
25+
<TraceAccordion traceFilterCondition={traceHasColorbar}>
2426
{['', 'marker.'].map(prefix => {
2527
return (
2628
<VisibilitySelect

0 commit comments

Comments
 (0)