@@ -2,14 +2,14 @@ import Fold from './Fold';
2
2
import PropTypes from 'prop-types' ;
3
3
import React , { Component } from 'react' ;
4
4
import { EDITOR_ACTIONS } from '../../lib/constants' ;
5
- import { connectTraceToPlot } from '../../lib' ;
5
+ import { connectTraceToPlot , plotlyToCustom } from '../../lib' ;
6
+ import { Tab , Tabs , TabList , TabPanel } from 'react-tabs' ;
6
7
7
8
const TraceFold = connectTraceToPlot ( Fold ) ;
8
9
9
10
export default class TraceAccordion extends Component {
10
11
constructor ( props ) {
11
12
super ( props ) ;
12
-
13
13
this . addTrace = this . addTrace . bind ( this ) ;
14
14
}
15
15
@@ -23,18 +23,60 @@ export default class TraceAccordion extends Component {
23
23
24
24
render ( ) {
25
25
const data = this . context . data || [ ] ;
26
+ const { canGroup, canAdd} = this . props ;
27
+ const individualPanel = data . map ( ( d , i ) => (
28
+ < TraceFold key = { i } traceIndex = { i } >
29
+ { this . props . children }
30
+ </ TraceFold >
31
+ ) ) ;
32
+ let content = individualPanel ;
33
+
34
+ if ( canGroup && data . length > 1 ) {
35
+ const groupedTraces = { } ;
36
+
37
+ data . forEach ( trace => {
38
+ const traceType = plotlyToCustom ( trace ) ;
39
+ if ( groupedTraces [ traceType ] ) {
40
+ groupedTraces [ traceType ] . push ( trace . index ) ;
41
+ } else {
42
+ groupedTraces [ traceType ] = [ trace . index ] ;
43
+ }
44
+ } ) ;
45
+
46
+ const groupedPanel = Object . keys ( groupedTraces ) . map (
47
+ ( traceType , index ) => {
48
+ return (
49
+ < TraceFold
50
+ key = { index }
51
+ traceIndex = { groupedTraces [ traceType ] }
52
+ name = { traceType }
53
+ >
54
+ { this . props . children }
55
+ </ TraceFold >
56
+ ) ;
57
+ }
58
+ ) ;
59
+
60
+ content = (
61
+ < Tabs >
62
+ < TabList >
63
+ < Tab > Grouped</ Tab >
64
+ < Tab > Individual</ Tab >
65
+ </ TabList >
66
+ < TabPanel key = { 0 } > { groupedPanel } </ TabPanel >
67
+ < TabPanel key = { 1 } > { individualPanel } </ TabPanel >
68
+ </ Tabs >
69
+ ) ;
70
+ }
71
+
26
72
return (
27
73
< div >
28
- { this . props . canAdd ? (
74
+ { canAdd ? (
29
75
< button className = "panel__add-button" onClick = { this . addTrace } >
30
76
+ Trace
31
77
</ button >
32
78
) : null }
33
- { data . map ( ( d , i ) => (
34
- < TraceFold key = { i } traceIndex = { i } >
35
- { this . props . children }
36
- </ TraceFold >
37
- ) ) }
79
+ { content }
38
80
</ div >
39
81
) ;
40
82
}
@@ -48,4 +90,5 @@ TraceAccordion.contextTypes = {
48
90
TraceAccordion . propTypes = {
49
91
children : PropTypes . node ,
50
92
canAdd : PropTypes . bool ,
93
+ canGroup : PropTypes . bool ,
51
94
} ;
0 commit comments