@@ -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,59 @@ 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 = data . reduce ( ( allTraces , next , index ) => {
36
+ const traceType = plotlyToCustom ( next ) ;
37
+ if ( allTraces [ traceType ] ) {
38
+ allTraces [ traceType ] . push ( index ) ;
39
+ } else {
40
+ allTraces [ traceType ] = [ index ] ;
41
+ }
42
+ return allTraces ;
43
+ } , { } ) ;
44
+
45
+ const groupedPanel = Object . keys ( groupedTraces ) . map (
46
+ ( traceType , index ) => {
47
+ return (
48
+ < TraceFold
49
+ key = { index }
50
+ traceIndex = { groupedTraces [ traceType ] }
51
+ name = { traceType }
52
+ >
53
+ { this . props . children }
54
+ </ TraceFold >
55
+ ) ;
56
+ }
57
+ ) ;
58
+
59
+ content = (
60
+ < Tabs >
61
+ < TabList >
62
+ < Tab > Grouped</ Tab >
63
+ < Tab > Individual</ Tab >
64
+ </ TabList >
65
+ < TabPanel key = { 0 } > { groupedPanel } </ TabPanel >
66
+ < TabPanel key = { 1 } > { individualPanel } </ TabPanel >
67
+ </ Tabs >
68
+ ) ;
69
+ }
70
+
26
71
return (
27
72
< div >
28
- { this . props . canAdd ? (
73
+ { canAdd ? (
29
74
< button className = "panel__add-button" onClick = { this . addTrace } >
30
75
+ Trace
31
76
</ button >
32
77
) : null }
33
- { data . map ( ( d , i ) => (
34
- < TraceFold key = { i } traceIndex = { i } >
35
- { this . props . children }
36
- </ TraceFold >
37
- ) ) }
78
+ { content }
38
79
</ div >
39
80
) ;
40
81
}
@@ -48,4 +89,5 @@ TraceAccordion.contextTypes = {
48
89
TraceAccordion . propTypes = {
49
90
children : PropTypes . node ,
50
91
canAdd : PropTypes . bool ,
92
+ canGroup : PropTypes . bool ,
51
93
} ;
0 commit comments