@@ -29,9 +29,11 @@ export const FiltersView: React.FC<{
2929 setStatusFilters : ( filters : Map < string , boolean > ) => void ;
3030 projectFilters : Map < string , boolean > ;
3131 setProjectFilters : ( filters : Map < string , boolean > ) => void ;
32+ onlyChanged : boolean ;
33+ setOnlyChanged : ( value : boolean ) => void ;
3234 testModel : TeleSuiteUpdaterTestModel | undefined ,
3335 runTests : ( ) => void ;
34- } > = ( { filterText, setFilterText, statusFilters, setStatusFilters, projectFilters, setProjectFilters, testModel, runTests } ) => {
36+ } > = ( { filterText, setFilterText, statusFilters, setStatusFilters, projectFilters, setProjectFilters, onlyChanged , setOnlyChanged , testModel, runTests } ) => {
3537 const [ expanded , setExpanded ] = React . useState ( false ) ;
3638 const inputRef = React . useRef < HTMLInputElement > ( null ) ;
3739 React . useEffect ( ( ) => {
@@ -53,42 +55,51 @@ export const FiltersView: React.FC<{
5355 runTests ( ) ;
5456 } } /> } >
5557 </ Expandable >
56- < div className = 'filter-summary' title = { 'Status: ' + statusLine + '\nProjects: ' + projectsLine } onClick = { ( ) => setExpanded ( ! expanded ) } >
58+ < div className = 'filter-summary' title = { 'Status: ' + statusLine + '\nProjects: ' + projectsLine + ( onlyChanged ? '\nOnly changed' : '' ) } onClick = { ( ) => setExpanded ( ! expanded ) } >
5759 < span className = 'filter-label' > Status:</ span > { statusLine }
5860 < span className = 'filter-label' > Projects:</ span > { projectsLine }
61+ { onlyChanged && < > < span className = 'filter-label' > Only changed</ span > </ > }
5962 </ div >
60- { expanded && < div className = 'hbox' style = { { marginLeft : 14 , maxHeight : 200 , overflowY : 'auto' } } >
61- < div className = 'filter-list' role = 'list' data-testid = 'status-filters' >
62- { [ ...statusFilters . entries ( ) ] . map ( ( [ status , value ] ) => {
63- return < div className = 'filter-entry' key = { status } role = 'listitem' >
64- < label >
65- < input type = 'checkbox' checked = { value } onChange = { ( ) => {
66- const copy = new Map ( statusFilters ) ;
67- copy . set ( status , ! copy . get ( status ) ) ;
68- setStatusFilters ( copy ) ;
69- } } />
70- < div > { status } </ div >
71- </ label >
72- </ div > ;
73- } ) }
63+ { expanded && < >
64+ < div className = 'hbox' style = { { marginLeft : 14 , maxHeight : 200 , overflowY : 'auto' } } >
65+ < div className = 'filter-list' role = 'list' data-testid = 'status-filters' >
66+ { [ ...statusFilters . entries ( ) ] . map ( ( [ status , value ] ) => {
67+ return < div className = 'filter-entry' key = { status } role = 'listitem' >
68+ < label >
69+ < input type = 'checkbox' checked = { value } onChange = { ( ) => {
70+ const copy = new Map ( statusFilters ) ;
71+ copy . set ( status , ! copy . get ( status ) ) ;
72+ setStatusFilters ( copy ) ;
73+ } } />
74+ < div > { status } </ div >
75+ </ label >
76+ </ div > ;
77+ } ) }
78+ </ div >
79+ < div className = 'filter-list' role = 'list' data-testid = 'project-filters' >
80+ { [ ...projectFilters . entries ( ) ] . map ( ( [ projectName , value ] ) => {
81+ return < div className = 'filter-entry' key = { projectName } role = 'listitem' >
82+ < label >
83+ < input type = 'checkbox' checked = { value } onChange = { ( ) => {
84+ const copy = new Map ( projectFilters ) ;
85+ copy . set ( projectName , ! copy . get ( projectName ) ) ;
86+ setProjectFilters ( copy ) ;
87+ const configFile = testModel ?. config ?. configFile ;
88+ if ( configFile )
89+ settings . setObject ( configFile + ':projects' , [ ...copy . entries ( ) ] . filter ( ( [ _ , v ] ) => v ) . map ( ( [ k ] ) => k ) ) ;
90+ } } />
91+ < div > { projectName || 'untitled' } </ div >
92+ </ label >
93+ </ div > ;
94+ } ) }
95+ </ div >
7496 </ div >
75- < div className = 'filter-list' role = 'list' data-testid = 'project-filters' >
76- { [ ...projectFilters . entries ( ) ] . map ( ( [ projectName , value ] ) => {
77- return < div className = 'filter-entry' key = { projectName } role = 'listitem' >
78- < label >
79- < input type = 'checkbox' checked = { value } onChange = { ( ) => {
80- const copy = new Map ( projectFilters ) ;
81- copy . set ( projectName , ! copy . get ( projectName ) ) ;
82- setProjectFilters ( copy ) ;
83- const configFile = testModel ?. config ?. configFile ;
84- if ( configFile )
85- settings . setObject ( configFile + ':projects' , [ ...copy . entries ( ) ] . filter ( ( [ _ , v ] ) => v ) . map ( ( [ k ] ) => k ) ) ;
86- } } />
87- < div > { projectName || 'untitled' } </ div >
88- </ label >
89- </ div > ;
90- } ) }
97+ < div className = 'filter-entry' style = { { marginLeft : 24 } } >
98+ < label >
99+ < input type = 'checkbox' checked = { onlyChanged } onChange = { ( ) => setOnlyChanged ( ! onlyChanged ) } />
100+ < div > Show only changed files</ div >
101+ </ label >
91102 </ div >
92- </ div > }
103+ </ > }
93104 </ div > ;
94105} ;
0 commit comments