11import { inject , injectable } from '@theia/core/shared/inversify' ;
22import { DisposableCollection , nls } from '@theia/core/lib/common' ;
3- import { BoardUserField } from '../../common/protocol' ;
3+ import { BoardUserField , CoreError } from '../../common/protocol' ;
44import { BoardsServiceProvider } from '../boards/boards-service-provider' ;
55import { UserFieldsDialog } from '../dialogs/user-fields/user-fields-dialog' ;
66import { ArduinoMenus , PlaceholderMenuNode } from '../menu/arduino-menus' ;
@@ -18,7 +18,7 @@ export class UserFields extends Contribution {
1818 private readonly userFieldsDialog : UserFieldsDialog ;
1919
2020 @inject ( BoardsServiceProvider )
21- protected readonly boardsServiceProvider : BoardsServiceProvider ;
21+ private readonly boardsServiceProvider : BoardsServiceProvider ;
2222
2323 @inject ( MenuModelRegistry )
2424 private readonly menuRegistry : MenuModelRegistry ;
@@ -58,17 +58,17 @@ export class UserFields extends Contribution {
5858 }
5959 }
6060
61- private selectedFqbnAddress ( ) : string {
61+ private selectedFqbnAddress ( ) : string | undefined {
6262 const { boardsConfig } = this . boardsServiceProvider ;
6363 const fqbn = boardsConfig . selectedBoard ?. fqbn ;
6464 if ( ! fqbn ) {
65- return '' ;
65+ return undefined ;
6666 }
6767 const address =
6868 boardsConfig . selectedBoard ?. port ?. address ||
6969 boardsConfig . selectedPort ?. address ;
7070 if ( ! address ) {
71- return '' ;
71+ return undefined ;
7272 }
7373 return fqbn + '|' + address ;
7474 }
@@ -78,9 +78,7 @@ export class UserFields extends Contribution {
7878 ) : Promise < BoardUserField [ ] | undefined > {
7979 const cached = this . cachedUserFields . get ( key ) ;
8080 // 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 ( ) ;
8482 const result = await this . userFieldsDialog . open ( ) ;
8583 if ( ! result ) {
8684 return ;
@@ -91,7 +89,7 @@ export class UserFields extends Contribution {
9189 return result ;
9290 }
9391
94- async checkUserFieldsDialog ( forceOpen : boolean ) : Promise < boolean > {
92+ async checkUserFieldsDialog ( forceOpen = false ) : Promise < boolean > {
9593 const key = this . selectedFqbnAddress ( ) ;
9694 if ( ! key ) {
9795 return false ;
@@ -130,7 +128,11 @@ export class UserFields extends Contribution {
130128 }
131129
132130 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 ) ?? [ ] ;
134136 }
135137
136138 isRequired ( ) : boolean {
@@ -140,8 +142,7 @@ export class UserFields extends Contribution {
140142 notifyFailedWithError ( e : Error ) : void {
141143 if (
142144 this . boardRequiresUserFields &&
143- typeof e . message === 'string' &&
144- e . message . startsWith ( 'Upload error:' )
145+ CoreError . UploadFailed . is ( e )
145146 ) {
146147 this . userFieldsSet = false ;
147148 }
0 commit comments