From 9983f1ed0576d37e037652dbcfefe8dc0b579382 Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Tue, 19 Jul 2022 10:17:23 +0200 Subject: [PATCH 1/2] prevent deselecting a board from the board selctor --- .../browser/boards/boards-toolbar-item.tsx | 23 +++++++++++++++---- .../contributions/open-boards-config.ts | 2 +- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx b/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx index 3cbf1d96f..e9cdcbaee 100644 --- a/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx +++ b/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx @@ -10,6 +10,7 @@ import { } from './boards-service-provider'; import { nls } from '@theia/core/lib/common'; import classNames from 'classnames'; +import { BoardsConfig } from './boards-config'; export interface BoardsDropDownListCoords { readonly top: number; @@ -245,10 +246,12 @@ export class BoardsToolBarItem extends React.Component< ...board, onClick: () => { if (board.state === AvailableBoard.State.incomplete) { + const previousBoardConfig = + this.props.boardsServiceProvider.boardsConfig; this.props.boardsServiceProvider.boardsConfig = { selectedPort: board.port, }; - this.openDialog(); + this.openDialog(previousBoardConfig); } else { this.props.boardsServiceProvider.boardsConfig = { selectedBoard: board, @@ -264,10 +267,20 @@ export class BoardsToolBarItem extends React.Component< ); } - protected openDialog = (): void => { - this.props.commands.executeCommand( - OpenBoardsConfig.Commands.OPEN_DIALOG.id - ); + protected openDialog = async ( + previousBoardConfig?: BoardsConfig.Config + ): Promise => { + const selectedBoardConfig = + await this.props.commands.executeCommand( + OpenBoardsConfig.Commands.OPEN_DIALOG.id + ); + if ( + previousBoardConfig && + (!selectedBoardConfig?.selectedPort || + !selectedBoardConfig?.selectedBoard) + ) { + this.props.boardsServiceProvider.boardsConfig = previousBoardConfig; + } }; } export namespace BoardsToolBarItem { diff --git a/arduino-ide-extension/src/browser/contributions/open-boards-config.ts b/arduino-ide-extension/src/browser/contributions/open-boards-config.ts index 3b8e1294e..8feffc14f 100644 --- a/arduino-ide-extension/src/browser/contributions/open-boards-config.ts +++ b/arduino-ide-extension/src/browser/contributions/open-boards-config.ts @@ -17,7 +17,7 @@ export class OpenBoardsConfig extends Contribution { execute: async (query?: string | undefined) => { const boardsConfig = await this.boardsConfigDialog.open(query); if (boardsConfig) { - this.boardsServiceProvider.boardsConfig = boardsConfig; + return (this.boardsServiceProvider.boardsConfig = boardsConfig); } }, }); From 21ef44be40e71f74264d998477fc30e87e3f0e3d Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Tue, 19 Jul 2022 11:42:32 +0200 Subject: [PATCH 2/2] orrectly update board selector when baord config changes --- .../src/browser/boards/boards-service-provider.ts | 1 + .../src/browser/boards/boards-toolbar-item.tsx | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arduino-ide-extension/src/browser/boards/boards-service-provider.ts b/arduino-ide-extension/src/browser/boards/boards-service-provider.ts index 12ad3ec19..dc4e66834 100644 --- a/arduino-ide-extension/src/browser/boards/boards-service-provider.ts +++ b/arduino-ide-extension/src/browser/boards/boards-service-provider.ts @@ -516,6 +516,7 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { for (let i = 0; !hasChanged && i < availableBoards.length; i++) { const [left, right] = [availableBoards[i], currentAvailableBoards[i]]; hasChanged = + left.fqbn !== right.fqbn || !!AvailableBoard.compare(left, right) || left.selected !== right.selected; } diff --git a/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx b/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx index e9cdcbaee..a86545ab9 100644 --- a/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx +++ b/arduino-ide-extension/src/browser/boards/boards-toolbar-item.tsx @@ -200,18 +200,17 @@ export class BoardsToolBarItem extends React.Component< override render(): React.ReactNode { const { coords, availableBoards } = this.state; - const selectedBoard = availableBoards.find(({ selected }) => selected); + const { selectedBoard, selectedPort } = + this.props.boardsServiceProvider.boardsConfig; const boardLabel = selectedBoard?.name || nls.localize('arduino/board/selectBoard', 'Select Board'); - const selectedPortLabel = portLabel(selectedBoard?.port?.address); + const selectedPortLabel = portLabel(selectedPort?.address); - const isConnected = Boolean( - selectedBoard && AvailableBoard.hasPort(selectedBoard) - ); + const isConnected = Boolean(selectedBoard && selectedPort); const protocolIcon = isConnected - ? iconNameFromProtocol(selectedBoard?.port?.protocol || '') + ? iconNameFromProtocol(selectedPort?.protocol || '') : null; const protocolIconClassNames = classNames( 'arduino-boards-toolbar-item--protocol', @@ -245,7 +244,7 @@ export class BoardsToolBarItem extends React.Component< .map((board) => ({ ...board, onClick: () => { - if (board.state === AvailableBoard.State.incomplete) { + if (!board.fqbn) { const previousBoardConfig = this.props.boardsServiceProvider.boardsConfig; this.props.boardsServiceProvider.boardsConfig = {