18
18
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
// THE SOFTWARE.
20
20
21
+ import _values from 'lodash/values' ;
21
22
import PropTypes from 'prop-types' ;
22
23
import React , { Component } from 'react' ;
23
24
import { bindActionCreators } from 'redux' ;
24
25
import { connect } from 'react-redux' ;
25
26
import { Field , reduxForm , formValueSelector } from 'redux-form' ;
26
27
import { Link } from 'react-router' ;
27
28
import { Sticky } from 'react-sticky' ;
28
- import * as jaegerApiActions from '../../actions/jaeger-api' ;
29
29
30
30
import JaegerLogo from '../../img/jaeger-logo.svg' ;
31
31
32
+ import * as jaegerApiActions from '../../actions/jaeger-api' ;
32
33
import TraceSearchForm from './TraceSearchForm' ;
33
34
import TraceSearchResult from './TraceSearchResult' ;
34
35
import TraceResultsScatterPlot from './TraceResultsScatterPlot' ;
35
- import {
36
- transformTraceResultsSelector ,
37
- getSortedTraceResults ,
38
- LONGEST_FIRST ,
39
- SHORTEST_FIRST ,
40
- MOST_SPANS ,
41
- LEAST_SPANS ,
42
- MOST_RECENT ,
43
- } from '../../selectors/search' ;
36
+ import * as orderBy from '../../model/order-by' ;
37
+ import { sortTraces , getTraceSummaries } from '../../model/search' ;
44
38
import { getPercentageOfDuration } from '../../utils/date' ;
45
39
import getLastXformCacher from '../../utils/get-last-xform-cacher' ;
46
40
@@ -52,18 +46,18 @@ let TraceResultsFilterForm = () =>
52
46
< div className = "field inline" >
53
47
< label htmlFor = "traceResultsSortBy" > Sort</ label >
54
48
< Field name = "sortBy" id = "traceResultsSortBy" className = "ui dropdown" component = "select" >
55
- < option value = { MOST_RECENT } > Most Recent</ option >
56
- < option value = { LONGEST_FIRST } > Longest First</ option >
57
- < option value = { SHORTEST_FIRST } > Shortest First</ option >
58
- < option value = { MOST_SPANS } > Most Spans</ option >
59
- < option value = { LEAST_SPANS } > Least Spans</ option >
49
+ < option value = { orderBy . MOST_RECENT } > Most Recent</ option >
50
+ < option value = { orderBy . LONGEST_FIRST } > Longest First</ option >
51
+ < option value = { orderBy . SHORTEST_FIRST } > Shortest First</ option >
52
+ < option value = { orderBy . MOST_SPANS } > Most Spans</ option >
53
+ < option value = { orderBy . LEAST_SPANS } > Least Spans</ option >
60
54
</ Field >
61
55
</ div >
62
56
</ div > ;
63
57
TraceResultsFilterForm = reduxForm ( {
64
58
form : 'traceResultsFilters' ,
65
59
initialValues : {
66
- sortBy : MOST_RECENT ,
60
+ sortBy : orderBy . MOST_RECENT ,
67
61
} ,
68
62
} ) ( TraceResultsFilterForm ) ;
69
63
const traceResultsFiltersFormSelector = formValueSelector ( 'traceResultsFilters' ) ;
@@ -194,13 +188,13 @@ SearchTracePage.propTypes = {
194
188
} ;
195
189
196
190
const stateTraceXformer = getLastXformCacher ( stateTrace => {
197
- const { traces : traceMap , loading, error : traceError } = stateTrace . toJS ( ) ;
198
- const traces = Object . keys ( traceMap ) . map ( traceID => traceMap [ traceID ] ) ;
199
- return { tracesSrc : { traces } , loading, traceError } ;
191
+ const { traces : traceMap , loading, error : traceError } = stateTrace ;
192
+ const { traces, maxDuration } = getTraceSummaries ( _values ( traceMap ) ) ;
193
+ return { traces, maxDuration , loading, traceError } ;
200
194
} ) ;
201
195
202
196
const stateServicesXformer = getLastXformCacher ( stateServices => {
203
- const { services : serviceList , operationsForService : opsBySvc , error : serviceError } = stateServices . toJS ( ) ;
197
+ const { services : serviceList , operationsForService : opsBySvc , error : serviceError } = stateServices ;
204
198
const services = serviceList . map ( name => ( {
205
199
name,
206
200
operations : opsBySvc [ name ] || [ ] ,
@@ -211,18 +205,17 @@ const stateServicesXformer = getLastXformCacher(stateServices => {
211
205
function mapStateToProps ( state ) {
212
206
const query = state . routing . locationBeforeTransitions . query ;
213
207
const isHomepage = ! Object . keys ( query ) . length ;
214
- const { tracesSrc, loading, traceError } = stateTraceXformer ( state . trace ) ;
215
- const { traces, maxDuration } = transformTraceResultsSelector ( tracesSrc ) ;
208
+ const { traces, maxDuration, loading, traceError } = stateTraceXformer ( state . trace ) ;
216
209
const { services, serviceError } = stateServicesXformer ( state . services ) ;
217
- const sortBy = traceResultsFiltersFormSelector ( state , 'sortBy' ) ;
218
- const traceResultsSorted = getSortedTraceResults ( traces , sortBy ) ;
219
210
const errorMessage = serviceError || traceError ? `${ serviceError || '' } ${ traceError || '' } ` : '' ;
211
+ const sortBy = traceResultsFiltersFormSelector ( state , 'sortBy' ) ;
212
+ sortTraces ( traces , sortBy ) ;
220
213
221
214
return {
222
215
isHomepage,
223
216
sortTracesBy : sortBy ,
224
- traceResults : traceResultsSorted ,
225
- numberOfTraceResults : traceResultsSorted . length ,
217
+ traceResults : traces ,
218
+ numberOfTraceResults : traces . length ,
226
219
maxTraceDuration : maxDuration ,
227
220
urlQueryParams : query ,
228
221
services,
@@ -233,7 +226,6 @@ function mapStateToProps(state) {
233
226
234
227
function mapDispatchToProps ( dispatch ) {
235
228
const { searchTraces, fetchServices } = bindActionCreators ( jaegerApiActions , dispatch ) ;
236
-
237
229
return {
238
230
searchTraces,
239
231
fetchServices,
0 commit comments