@@ -10,10 +10,7 @@ import React from '@theia/core/shared/react';
10
10
import ReactDOM from '@theia/core/shared/react-dom' ;
11
11
import classNames from 'classnames' ;
12
12
import { boardIdentifierLabel , Port } from '../../common/protocol' ;
13
- import {
14
- BoardListItem ,
15
- BoardListItemUI ,
16
- } from '../../common/protocol/board-list' ;
13
+ import { BoardListItemUI } from '../../common/protocol/board-list' ;
17
14
import { assertUnreachable } from '../../common/utils' ;
18
15
import { BoardListUI , BoardsServiceProvider } from './boards-service-provider' ;
19
16
@@ -29,13 +26,11 @@ export namespace BoardsDropDown {
29
26
readonly coords : BoardsDropDownListCoords | 'hidden' ;
30
27
readonly boardList : BoardListUI ;
31
28
readonly openBoardsConfig : ( ) => void ;
29
+ readonly hide : ( ) => void ;
32
30
}
33
31
}
34
32
35
- export class BoardListDropDown extends React . Component <
36
- BoardsDropDown . Props ,
37
- { expandedItems : BoardListItem [ ] }
38
- > {
33
+ export class BoardListDropDown extends React . Component < BoardsDropDown . Props > {
39
34
private dropdownElement : HTMLElement ;
40
35
private listRef : React . RefObject < HTMLDivElement > ;
41
36
@@ -49,7 +44,6 @@ export class BoardListDropDown extends React.Component<
49
44
document . body . appendChild ( list ) ;
50
45
this . dropdownElement = list ;
51
46
}
52
- this . state = { expandedItems : [ ] } ;
53
47
}
54
48
55
49
override componentDidUpdate ( prevProps : BoardsDropDown . Props ) : void {
@@ -105,14 +99,15 @@ export class BoardListDropDown extends React.Component<
105
99
}
106
100
107
101
private readonly onDefaultAction = ( item : BoardListItemUI ) : unknown => {
108
- const { boardList } = this . props ;
102
+ const { boardList, hide } = this . props ;
109
103
const { type, params } = item . defaultAction ;
104
+ hide ( ) ;
110
105
switch ( type ) {
111
106
case 'select-boards-config' : {
112
- return boardList . onSelect ( params ) ;
107
+ return boardList . select ( params ) ;
113
108
}
114
109
case 'edit-boards-config' : {
115
- return boardList . onEdit ( params ) ;
110
+ return boardList . edit ( params ) ;
116
111
}
117
112
default :
118
113
return assertUnreachable ( type ) ;
@@ -166,11 +161,20 @@ export class BoardListDropDown extends React.Component<
166
161
}
167
162
168
163
private renderActions ( item : BoardListItemUI ) : React . ReactNode {
169
- const { boardList } = this . props ;
164
+ const { boardList, hide } = this . props ;
170
165
const { revert, edit } = item . otherActions ;
171
166
if ( ! edit && ! revert ) {
172
167
return undefined ;
173
168
}
169
+ const handleOnClick = (
170
+ event : React . MouseEvent < HTMLElement , MouseEvent > ,
171
+ callback : ( ) => void
172
+ ) => {
173
+ event . preventDefault ( ) ;
174
+ event . stopPropagation ( ) ;
175
+ hide ( ) ;
176
+ callback ( ) ;
177
+ } ;
174
178
return (
175
179
< div className = { TabBarToolbar . Styles . TAB_BAR_TOOLBAR } >
176
180
{ edit && (
@@ -185,11 +189,9 @@ export class BoardListDropDown extends React.Component<
185
189
'arduino/board/editBoardsConfig' ,
186
190
'Edit Board and Port...'
187
191
) }
188
- onClick = { ( event ) => {
189
- event . preventDefault ( ) ;
190
- event . stopPropagation ( ) ;
191
- boardList . onEdit ( edit . params ) ;
192
- } }
192
+ onClick = { ( event ) =>
193
+ handleOnClick ( event , ( ) => boardList . edit ( edit . params ) )
194
+ }
193
195
/>
194
196
}
195
197
</ div >
@@ -208,11 +210,9 @@ export class BoardListDropDown extends React.Component<
208
210
boardIdentifierLabel ( revert . params . selectedBoard ) ,
209
211
item . labels . portLabel
210
212
) }
211
- onClick = { ( event ) => {
212
- event . preventDefault ( ) ;
213
- event . stopPropagation ( ) ;
214
- boardList . onSelect ( revert . params ) ;
215
- } }
213
+ onClick = { ( event ) =>
214
+ handleOnClick ( event , ( ) => boardList . select ( revert . params ) )
215
+ }
216
216
/>
217
217
}
218
218
</ div >
@@ -292,16 +292,6 @@ export class BoardsToolBarItem extends React.Component<
292
292
'fa' ,
293
293
protocolIcon
294
294
) ;
295
- const originalOnSelect = boardList . onSelect ;
296
- boardList [ 'onSelect' ] = ( params ) => {
297
- this . hide ( ) ;
298
- return originalOnSelect . bind ( boardList ) ( params ) ;
299
- } ;
300
- const originalOnEdit = boardList . onEdit ;
301
- boardList [ 'onEdit' ] = ( params ) => {
302
- this . hide ( ) ;
303
- return originalOnEdit . bind ( boardList ) ( params ) ;
304
- } ;
305
295
return (
306
296
< React . Fragment >
307
297
< div
@@ -325,7 +315,8 @@ export class BoardsToolBarItem extends React.Component<
325
315
< BoardListDropDown
326
316
coords = { coords }
327
317
boardList = { boardList }
328
- openBoardsConfig = { ( ) => boardList . onEdit ( { query : '' } ) }
318
+ openBoardsConfig = { ( ) => boardList . edit ( { query : '' } ) }
319
+ hide = { this . hide }
329
320
/>
330
321
</ React . Fragment >
331
322
) ;
0 commit comments