@@ -2,31 +2,67 @@ import React from 'react';
2
2
import { connect } from 'react-redux' ;
3
3
import * as _ from 'lodash' ;
4
4
import { withRouter , useHistory } from 'react-router-dom' ;
5
- import Loader from '../Common/Loader' ;
5
+ import { RootState , ExperimentDataType } from 'src/model/types' ;
6
+ import { selectExperiment } from 'src/model/actions/landing' ;
6
7
import {
7
8
getFilteredExperiments ,
8
9
getIsExperimentsLoading ,
9
10
getSelectedPipeline ,
10
11
getSelectedExperiment ,
11
- } from '../../model/selectors/projects' ;
12
- import { selectExperiment } from '../../model/actions/landing' ;
13
- import { RootState , ExperimentDataType } from '../../model/types' ;
14
- import { TagStats , Scale as MatrixScale } from './Matrix/types' ;
12
+ } from 'src/model/selectors/projects' ;
13
+ import Loader from '../Common/Loader' ;
14
+ import { TagStats , MatrixScale } from './Matrix/types' ;
15
15
import { fromTagToID } from './utils' ;
16
16
import Matrix from './Matrix/Matrix' ;
17
17
18
- let props : Props ;
19
18
type StateProps = ReturnType < typeof mapState > ;
20
19
type DispatchProps = ReturnType < typeof mapDispatch > ;
21
20
type Props = StateProps & DispatchProps ;
22
- type renderExperimentProps = {
21
+
22
+ let props : Props ;
23
+ type ExperimentProps = {
23
24
experiment : ExperimentDataType ;
24
25
tagStats : TagStats ;
25
26
matrixScale : MatrixScale ;
26
27
index : number ;
27
- selectedPipeline : typeof props . selectedExperiment ;
28
+ selectedPipeline : typeof props . selectedPipeline ;
28
29
selectedExperiment : typeof props . selectedExperiment ;
29
- onSelectExperiment : typeof props . onSelectExperiment ;
30
+ } ;
31
+
32
+ const countDatarunEvents = ( experiment ) => {
33
+ const { dataruns } = experiment ;
34
+ return dataruns . map ( ( datarun ) => datarun . events . length ) . reduce ( ( item , accumulator ) => item + accumulator , 0 ) ;
35
+ } ;
36
+
37
+ export const Experiment : React . FC < ExperimentProps > = ( {
38
+ experiment,
39
+ tagStats,
40
+ matrixScale,
41
+ index,
42
+ selectedPipeline,
43
+ selectedExperiment,
44
+ } : ExperimentProps ) => {
45
+ let history = useHistory ( ) ;
46
+ const activeClass = selectedPipeline || selectedExperiment === experiment . id ? 'active' : '' ;
47
+ const eventCounts = countDatarunEvents ( experiment ) ;
48
+ const { id, dataruns, name, date_creation, created_by } = experiment ;
49
+
50
+ return (
51
+ < div className = { `cell ${ activeClass } ` } key = { index } onClick = { ( ) => history . push ( `/experiment/${ id } ` ) } >
52
+ < h3 >
53
+ #{ index + 1 } { name }
54
+ </ h3 >
55
+ < div className = "item-data" >
56
+ < ul >
57
+ < li > Signals: { dataruns . length } </ li >
58
+ < li > Events: { eventCounts } </ li >
59
+ < li > DC: { date_creation . substring ( 0 , 10 ) } </ li >
60
+ < li > By: { `${ created_by } ` } </ li >
61
+ </ ul >
62
+ < Matrix experiment = { experiment } tagStats = { tagStats } scale = { matrixScale } />
63
+ </ div >
64
+ </ div >
65
+ ) ;
30
66
} ;
31
67
32
68
export const Experiments : React . FC < Props > = ( {
@@ -35,32 +71,36 @@ export const Experiments: React.FC<Props> = ({
35
71
onSelectExperiment,
36
72
selectedPipeline,
37
73
selectedExperiment,
38
- } ) => {
74
+ } : Props ) => {
39
75
// Compute maxTagNum, maxEventNum, and maxScore
40
76
// which would be used for plotting Matrix
41
-
42
- let maxTagNum = Number . MIN_SAFE_INTEGER ;
43
- let maxEventNum = Number . MIN_SAFE_INTEGER ;
44
- let maxScore = Number . MIN_SAFE_INTEGER ;
77
+ let maxTagNum : number = Number . MIN_SAFE_INTEGER ;
78
+ let maxEventNum : number = Number . MIN_SAFE_INTEGER ;
79
+ let maxScore : number = Number . MIN_SAFE_INTEGER ;
45
80
let tagStatsList : TagStats [ ] = [ ] ;
46
81
47
- // @TODO - move this logic to selectors/experiment
48
- _ . each ( filteredExperiments , ( experiment ) => {
82
+ filteredExperiments . forEach ( ( currentExperiment ) => {
83
+ const { dataruns } = currentExperiment ;
49
84
let tagStats : { [ index : string ] : number } = { } ;
85
+
50
86
for ( let i = 0 ; i < 7 ; i += 1 ) {
51
87
tagStats [ String ( i ) ] = 0 ;
52
88
}
53
- _ . each ( experiment . dataruns , ( datarun ) => {
54
- for ( let i = 0 ; i < datarun . events . length ; i += 1 ) {
55
- let tid = fromTagToID ( datarun . events [ i ] . tag ) ;
56
- tid = tid === 'untagged' ? '0' : tid ;
57
- if ( ! _ . has ( tagStats , tid ) ) {
58
- tagStats [ tid ] = 0 ;
89
+
90
+ dataruns . forEach ( ( currentDatarun ) => {
91
+ const { events } = currentDatarun ;
92
+ for ( let iterator = 0 ; iterator < events . length ; iterator += 1 ) {
93
+ let tagID : string = fromTagToID ( events [ iterator ] . tag ) ;
94
+
95
+ tagID = tagID === 'untagged' ? '0' : tagID ;
96
+ if ( ! _ . has ( tagStats , tagID ) ) {
97
+ tagStats [ tagID ] = 0 ;
59
98
}
60
- tagStats [ tid ] += 1 ;
61
- maxTagNum = maxTagNum < tagStats [ tid ] ? tagStats [ tid ] : maxTagNum ;
62
- maxScore = maxScore > datarun . events [ i ] . score ? maxScore : datarun . events [ i ] . score ;
63
- maxEventNum = maxEventNum < datarun . events . length ? datarun . events . length : maxEventNum ;
99
+
100
+ tagStats [ tagID ] += 1 ;
101
+ maxTagNum = maxTagNum < tagStats [ tagID ] ? tagStats [ tagID ] : maxTagNum ;
102
+ maxScore = maxScore > events [ iterator ] . score ? maxScore : events [ iterator ] . score ;
103
+ maxEventNum = maxEventNum < events . length ? events . length : maxEventNum ;
64
104
}
65
105
} ) ;
66
106
tagStatsList . push ( tagStats ) ;
@@ -99,40 +139,6 @@ export const Experiments: React.FC<Props> = ({
99
139
) ;
100
140
} ;
101
141
102
- const countDatarunEvents = ( experiment ) => {
103
- const { dataruns } = experiment ;
104
- return dataruns . map ( ( datarun ) => datarun . events . length ) . reduce ( ( item , accumulator ) => item + accumulator , 0 ) ;
105
- } ;
106
-
107
- export const Experiment : React . FC < renderExperimentProps > = ( {
108
- experiment,
109
- tagStats,
110
- matrixScale,
111
- index,
112
- selectedPipeline,
113
- selectedExperiment,
114
- } ) => {
115
- let history = useHistory ( ) ;
116
- const activeClass = selectedPipeline || selectedExperiment === experiment . id ? 'active' : '' ;
117
- const eventCounts = countDatarunEvents ( experiment ) ;
118
- return (
119
- < div className = { `cell ${ activeClass } ` } key = { index } onClick = { ( ) => history . push ( `/experiment/${ experiment . id } ` ) } >
120
- < h3 >
121
- { /* #{index + 1} {experiment.dataset}_{experiment.pipeline} */ } #{ index + 1 } { experiment . name }
122
- </ h3 >
123
- < div className = "item-data" >
124
- < ul >
125
- < li > Signals: { experiment . dataruns . length } </ li >
126
- < li > Events: { eventCounts } </ li >
127
- < li > DC: { experiment . date_creation . substring ( 0 , 10 ) } </ li >
128
- < li > By: { `${ experiment . created_by } ` } </ li >
129
- </ ul >
130
- < Matrix experiment = { experiment } tagStats = { tagStats } scale = { matrixScale } />
131
- </ div >
132
- </ div >
133
- ) ;
134
- } ;
135
-
136
142
const mapState = ( state : RootState ) => ( {
137
143
filteredExperiments : getFilteredExperiments ( state ) ,
138
144
isExperimentsLoading : getIsExperimentsLoading ( state ) ,
0 commit comments