1818// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1919// THE SOFTWARE.
2020
21+ import _values from 'lodash/values' ;
2122import PropTypes from 'prop-types' ;
2223import React , { Component } from 'react' ;
2324import { bindActionCreators } from 'redux' ;
2425import { connect } from 'react-redux' ;
2526import { Field , reduxForm , formValueSelector } from 'redux-form' ;
2627import { Link } from 'react-router' ;
2728import { Sticky } from 'react-sticky' ;
28- import * as jaegerApiActions from '../../actions/jaeger-api' ;
2929
3030import JaegerLogo from '../../img/jaeger-logo.svg' ;
3131
32+ import * as jaegerApiActions from '../../actions/jaeger-api' ;
3233import TraceSearchForm from './TraceSearchForm' ;
3334import TraceSearchResult from './TraceSearchResult' ;
3435import 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' ;
4438import { getPercentageOfDuration } from '../../utils/date' ;
4539import getLastXformCacher from '../../utils/get-last-xform-cacher' ;
4640
@@ -52,18 +46,18 @@ let TraceResultsFilterForm = () =>
5246 < div className = "field inline" >
5347 < label htmlFor = "traceResultsSortBy" > Sort</ label >
5448 < 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 >
6054 </ Field >
6155 </ div >
6256 </ div > ;
6357TraceResultsFilterForm = reduxForm ( {
6458 form : 'traceResultsFilters' ,
6559 initialValues : {
66- sortBy : MOST_RECENT ,
60+ sortBy : orderBy . MOST_RECENT ,
6761 } ,
6862} ) ( TraceResultsFilterForm ) ;
6963const traceResultsFiltersFormSelector = formValueSelector ( 'traceResultsFilters' ) ;
@@ -194,13 +188,13 @@ SearchTracePage.propTypes = {
194188} ;
195189
196190const 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 } ;
200194} ) ;
201195
202196const stateServicesXformer = getLastXformCacher ( stateServices => {
203- const { services : serviceList , operationsForService : opsBySvc , error : serviceError } = stateServices . toJS ( ) ;
197+ const { services : serviceList , operationsForService : opsBySvc , error : serviceError } = stateServices ;
204198 const services = serviceList . map ( name => ( {
205199 name,
206200 operations : opsBySvc [ name ] || [ ] ,
@@ -211,18 +205,17 @@ const stateServicesXformer = getLastXformCacher(stateServices => {
211205function mapStateToProps ( state ) {
212206 const query = state . routing . locationBeforeTransitions . query ;
213207 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 ) ;
216209 const { services, serviceError } = stateServicesXformer ( state . services ) ;
217- const sortBy = traceResultsFiltersFormSelector ( state , 'sortBy' ) ;
218- const traceResultsSorted = getSortedTraceResults ( traces , sortBy ) ;
219210 const errorMessage = serviceError || traceError ? `${ serviceError || '' } ${ traceError || '' } ` : '' ;
211+ const sortBy = traceResultsFiltersFormSelector ( state , 'sortBy' ) ;
212+ sortTraces ( traces , sortBy ) ;
220213
221214 return {
222215 isHomepage,
223216 sortTracesBy : sortBy ,
224- traceResults : traceResultsSorted ,
225- numberOfTraceResults : traceResultsSorted . length ,
217+ traceResults : traces ,
218+ numberOfTraceResults : traces . length ,
226219 maxTraceDuration : maxDuration ,
227220 urlQueryParams : query ,
228221 services,
@@ -233,7 +226,6 @@ function mapStateToProps(state) {
233226
234227function mapDispatchToProps ( dispatch ) {
235228 const { searchTraces, fetchServices } = bindActionCreators ( jaegerApiActions , dispatch ) ;
236-
237229 return {
238230 searchTraces,
239231 fetchServices,
0 commit comments