@@ -81,31 +81,34 @@ export const GlobalFilterView: React.FC<{
81
81
const StatsNavView : React . FC < {
82
82
stats : Stats
83
83
} > = ( { stats } ) => {
84
- const searchParams = React . useContext ( SearchParamsContext ) ;
85
- const q = searchParams . get ( 'q' ) ?. toString ( ) || '' ;
86
84
return < nav >
87
85
< Link className = 'subnav-item' href = '#?' >
88
86
< span className = 'subnav-item-label' > All</ span >
89
87
< span className = 'd-inline counter' > { stats . total - stats . skipped } </ span >
90
88
</ Link >
91
- < Link className = 'subnav-item' click = { filterWithQuery ( q , 's:passed' , false ) } ctrlClick = { filterWithQuery ( q , 's:passed' , true ) } >
92
- < span className = 'subnav-item-label' > Passed</ span >
93
- < span className = 'd-inline counter' > { stats . expected } </ span >
94
- </ Link >
95
- < Link className = 'subnav-item' click = { filterWithQuery ( q , 's:failed' , false ) } ctrlClick = { filterWithQuery ( q , 's:failed' , true ) } >
96
- { ! ! stats . unexpected && statusIcon ( 'unexpected' ) }
97
- < span className = 'subnav-item-label' > Failed</ span >
98
- < span className = 'd-inline counter' > { stats . unexpected } </ span >
99
- </ Link >
100
- < Link className = 'subnav-item' click = { filterWithQuery ( q , 's:flaky' , false ) } ctrlClick = { filterWithQuery ( q , 's:flaky' , true ) } >
101
- { ! ! stats . flaky && statusIcon ( 'flaky' ) }
102
- < span className = 'subnav-item-label' > Flaky</ span >
103
- < span className = 'd-inline counter' > { stats . flaky } </ span >
104
- </ Link >
105
- < Link className = 'subnav-item' click = { filterWithQuery ( q , 's:skipped' , false ) } ctrlClick = { filterWithQuery ( q , 's:skipped' , true ) } >
106
- { ! ! stats . skipped && statusIcon ( 'skipped' ) }
107
- < span className = 'subnav-item-label' > Skipped</ span >
108
- < span className = 'd-inline counter' > { stats . skipped } </ span >
109
- </ Link >
89
+ < NavLink token = 'passed' count = { stats . expected } />
90
+ < NavLink token = 'failed' count = { stats . unexpected } />
91
+ < NavLink token = 'flaky' count = { stats . flaky } />
92
+ < NavLink token = 'skipped' count = { stats . skipped } />
110
93
</ nav > ;
111
94
} ;
95
+
96
+ const NavLink : React . FC < {
97
+ token : string ,
98
+ count : number ,
99
+ } > = ( { token, count } ) => {
100
+ const searchParams = React . useContext ( SearchParamsContext ) ;
101
+ const q = searchParams . get ( 'q' ) ?. toString ( ) || '' ;
102
+ const queryToken = `s:${ token } ` ;
103
+
104
+ const clickUrl = filterWithQuery ( q , queryToken , false ) ;
105
+ const ctrlClickUrl = filterWithQuery ( q , queryToken , true ) ;
106
+
107
+ const label = token . charAt ( 0 ) . toUpperCase ( ) + token . slice ( 1 ) ;
108
+
109
+ return < Link className = 'subnav-item' href = { clickUrl } click = { clickUrl } ctrlClick = { ctrlClickUrl } >
110
+ { count > 0 && statusIcon ( token as any ) }
111
+ < span className = 'subnav-item-label' > { label } </ span >
112
+ < span className = 'd-inline counter' > { count } </ span >
113
+ </ Link > ;
114
+ } ;
0 commit comments