Skip to content

Commit 4886b16

Browse files
committed
board select component
1 parent 3ba61b7 commit 4886b16

File tree

5 files changed

+147
-33
lines changed

5 files changed

+147
-33
lines changed

arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ import { UploadFirmware } from './contributions/upload-firmware';
241241
import {
242242
UploadFirmwareDialog,
243243
UploadFirmwareDialogProps,
244+
UploadFirmwareDialogWidget,
244245
} from './dialogs/upload-firmware-dialog';
245246

246247
const ElementQueries = require('css-element-queries/src/ElementQueries');
@@ -719,6 +720,8 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
719720
id: 'cloud-sketchbook-composite-widget',
720721
createWidget: () => ctx.container.get(CloudSketchbookCompositeWidget),
721722
}));
723+
724+
bind(UploadFirmwareDialogWidget).toSelf().inSingletonScope();
722725
bind(UploadFirmwareDialog).toSelf().inSingletonScope();
723726
bind(UploadFirmwareDialogProps).toConstantValue({
724727
title: 'UploadFirmware',

arduino-ide-extension/src/browser/dialogs/cloud-share-sketch-dialog.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ export const ShareSketchComponent = ({
4242
createApi: CreateApi;
4343
domain?: string;
4444
}): React.ReactElement => {
45-
// const [publicVisibility, setPublicVisibility] = React.useState<boolean>(
46-
// treeNode.isPublic
47-
// );
48-
4945
const [loading, setloading] = React.useState<boolean>(false);
5046

5147
const radioChangeHandler = async (event: React.BaseSyntheticEvent) => {

arduino-ide-extension/src/browser/dialogs/upload-firmware-dialog.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import * as React from 'react';
2+
import { inject, injectable } from 'inversify';
3+
import {
4+
AbstractDialog,
5+
DialogError,
6+
DialogProps,
7+
} from '@theia/core/lib/browser/dialogs';
8+
import { Widget } from '@phosphor/widgets';
9+
import { Message } from '@phosphor/messaging';
10+
import { ReactWidget } from '@theia/core/lib/browser/widgets/react-widget';
11+
import { BoardsServiceProvider } from '../boards/boards-service-provider';
12+
import { ArduinoSelect } from '../widgets/arduino-select';
13+
14+
export const FirmwareUploaderComponent = ({
15+
boardsServiceClient,
16+
}: {
17+
boardsServiceClient: BoardsServiceProvider;
18+
}): React.ReactElement => {
19+
const [defaultValue, setdefaultValue] = React.useState<{
20+
label: string;
21+
value: string;
22+
} | null>(null);
23+
24+
const [disabled, setdisabled] = React.useState(true);
25+
26+
const [portsboards, setportsboards] = React.useState<
27+
{
28+
label: string;
29+
value: string;
30+
}[]
31+
>([]);
32+
33+
React.useEffect(() => {
34+
boardsServiceClient.onAvailableBoardsChanged((availableBoards) => {
35+
let disabled = false;
36+
let selectedBoard = -1;
37+
let boardsList = availableBoards
38+
.filter((board) => !!board.port)
39+
.map((board, i) => {
40+
if (board.selected) {
41+
selectedBoard = i;
42+
}
43+
return {
44+
label: board.name,
45+
value: board.port?.address || '',
46+
};
47+
});
48+
49+
if (boardsList.length === 0) {
50+
disabled = true;
51+
boardsList = [
52+
{ label: 'No board connected to serial port', value: '' },
53+
];
54+
selectedBoard = 0;
55+
}
56+
57+
setdisabled(disabled);
58+
setportsboards(boardsList);
59+
setdefaultValue(boardsList[selectedBoard] || null);
60+
});
61+
}, [boardsServiceClient]);
62+
return (
63+
<div id="widget-container firmware-uploader">
64+
<ArduinoSelect
65+
isDisabled={disabled}
66+
options={portsboards}
67+
value={defaultValue}
68+
/>
69+
</div>
70+
);
71+
};
72+
73+
@injectable()
74+
export class UploadFirmwareDialogWidget extends ReactWidget {
75+
@inject(BoardsServiceProvider)
76+
protected readonly boardsServiceClient: BoardsServiceProvider;
77+
78+
constructor() {
79+
super();
80+
}
81+
82+
protected render(): React.ReactNode {
83+
return (
84+
<div className="selectBoardContainer">
85+
<FirmwareUploaderComponent
86+
boardsServiceClient={this.boardsServiceClient}
87+
/>
88+
</div>
89+
);
90+
}
91+
}
92+
93+
@injectable()
94+
export class UploadFirmwareDialogProps extends DialogProps {}
95+
96+
@injectable()
97+
export class UploadFirmwareDialog extends AbstractDialog<void> {
98+
@inject(UploadFirmwareDialogWidget)
99+
protected readonly widget: UploadFirmwareDialogWidget;
100+
101+
constructor(
102+
@inject(UploadFirmwareDialogProps)
103+
protected readonly props: UploadFirmwareDialogProps
104+
) {
105+
super({ title: 'Connectivity Firmware Updater' });
106+
}
107+
108+
protected setErrorMessage(error: DialogError): void {
109+
if (this.acceptButton) {
110+
this.acceptButton.disabled = !DialogError.getResult(error);
111+
}
112+
}
113+
114+
get value(): void {
115+
return;
116+
}
117+
118+
protected onAfterAttach(msg: Message): void {
119+
if (this.widget.isAttached) {
120+
Widget.detach(this.widget);
121+
}
122+
Widget.attach(this.widget, this.contentNode);
123+
super.onAfterAttach(msg);
124+
this.update();
125+
}
126+
127+
protected onUpdateRequest(msg: Message): void {
128+
super.onUpdateRequest(msg);
129+
this.widget.update();
130+
}
131+
132+
protected onActivateRequest(msg: Message): void {
133+
super.onActivateRequest(msg);
134+
this.widget.activate();
135+
}
136+
}

arduino-ide-extension/src/browser/style/main.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,14 @@
171171

172172
.p-Widget.dialogOverlay .dialogBlock {
173173
background-color: var(--theia-arduino-foreground);
174+
border-radius: 3px;
175+
}
176+
177+
.p-Widget.dialogOverlay .dialogBlock .dialogTitle {
178+
background-color: transparent;
179+
min-height: 54px;
180+
font-size: var(--theia-ui-font-size2);
181+
color: var(--theia-list-inactiveSelectionForeground);
174182
}
175183

176184
#arduino-open-sketch-control--toolbar--container {

0 commit comments

Comments
 (0)