1
1
import { inject , injectable } from '@theia/core/shared/inversify' ;
2
2
import { DisposableCollection , nls } from '@theia/core/lib/common' ;
3
- import { BoardUserField } from '../../common/protocol' ;
3
+ import { BoardUserField , CoreError } from '../../common/protocol' ;
4
4
import { BoardsServiceProvider } from '../boards/boards-service-provider' ;
5
5
import { UserFieldsDialog } from '../dialogs/user-fields/user-fields-dialog' ;
6
6
import { ArduinoMenus , PlaceholderMenuNode } from '../menu/arduino-menus' ;
@@ -18,7 +18,7 @@ export class UserFields extends Contribution {
18
18
private readonly userFieldsDialog : UserFieldsDialog ;
19
19
20
20
@inject ( BoardsServiceProvider )
21
- protected readonly boardsServiceProvider : BoardsServiceProvider ;
21
+ private readonly boardsServiceProvider : BoardsServiceProvider ;
22
22
23
23
@inject ( MenuModelRegistry )
24
24
private readonly menuRegistry : MenuModelRegistry ;
@@ -58,17 +58,17 @@ export class UserFields extends Contribution {
58
58
}
59
59
}
60
60
61
- private selectedFqbnAddress ( ) : string {
61
+ private selectedFqbnAddress ( ) : string | undefined {
62
62
const { boardsConfig } = this . boardsServiceProvider ;
63
63
const fqbn = boardsConfig . selectedBoard ?. fqbn ;
64
64
if ( ! fqbn ) {
65
- return '' ;
65
+ return undefined ;
66
66
}
67
67
const address =
68
68
boardsConfig . selectedBoard ?. port ?. address ||
69
69
boardsConfig . selectedPort ?. address ;
70
70
if ( ! address ) {
71
- return '' ;
71
+ return undefined ;
72
72
}
73
73
return fqbn + '|' + address ;
74
74
}
@@ -78,9 +78,7 @@ export class UserFields extends Contribution {
78
78
) : Promise < BoardUserField [ ] | undefined > {
79
79
const cached = this . cachedUserFields . get ( key ) ;
80
80
// Deep clone the array of board fields to avoid editing the cached ones
81
- this . userFieldsDialog . value = (
82
- cached ?? ( await this . boardsServiceProvider . selectedBoardUserFields ( ) )
83
- ) . map ( ( f ) => ( { ...f } ) ) ;
81
+ this . userFieldsDialog . value = cached ? cached . slice ( ) : await this . boardsServiceProvider . selectedBoardUserFields ( ) ;
84
82
const result = await this . userFieldsDialog . open ( ) ;
85
83
if ( ! result ) {
86
84
return ;
@@ -91,7 +89,7 @@ export class UserFields extends Contribution {
91
89
return result ;
92
90
}
93
91
94
- async checkUserFieldsDialog ( forceOpen : boolean ) : Promise < boolean > {
92
+ async checkUserFieldsDialog ( forceOpen = false ) : Promise < boolean > {
95
93
const key = this . selectedFqbnAddress ( ) ;
96
94
if ( ! key ) {
97
95
return false ;
@@ -130,7 +128,11 @@ export class UserFields extends Contribution {
130
128
}
131
129
132
130
getUserFields ( ) : BoardUserField [ ] {
133
- return this . cachedUserFields . get ( this . selectedFqbnAddress ( ) ) ?? [ ] ;
131
+ const fqbnAddress = this . selectedFqbnAddress ( ) ;
132
+ if ( ! fqbnAddress ) {
133
+ return [ ] ;
134
+ }
135
+ return this . cachedUserFields . get ( fqbnAddress ) ?? [ ] ;
134
136
}
135
137
136
138
isRequired ( ) : boolean {
@@ -140,8 +142,7 @@ export class UserFields extends Contribution {
140
142
notifyFailedWithError ( e : Error ) : void {
141
143
if (
142
144
this . boardRequiresUserFields &&
143
- typeof e . message === 'string' &&
144
- e . message . startsWith ( 'Upload error:' )
145
+ CoreError . UploadFailed . is ( e )
145
146
) {
146
147
this . userFieldsSet = false ;
147
148
}
0 commit comments