Skip to content

Commit f338106

Browse files
author
Akos Kitta
committed
fix: react widget regression after open/close/open
- removed the firmware updater dialog widget - let the patched react dialog to render the content Signed-off-by: Akos Kitta <[email protected]>
1 parent 9e042ae commit f338106

File tree

2 files changed

+34
-69
lines changed

2 files changed

+34
-69
lines changed

Diff for: arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

-2
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,6 @@ import { UploadFirmware } from './contributions/upload-firmware';
232232
import {
233233
UploadFirmwareDialog,
234234
UploadFirmwareDialogProps,
235-
UploadFirmwareDialogWidget,
236235
} from './dialogs/firmware-uploader/firmware-uploader-dialog';
237236

238237
import { UploadCertificate } from './contributions/upload-certificate';
@@ -902,7 +901,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
902901
createWidget: () => ctx.container.get(CloudSketchbookCompositeWidget),
903902
}));
904903

905-
bind(UploadFirmwareDialogWidget).toSelf().inSingletonScope();
906904
bind(UploadFirmwareDialog).toSelf().inSingletonScope();
907905
bind(UploadFirmwareDialogProps).toConstantValue({
908906
title: 'UploadFirmware',

Diff for: arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-dialog.tsx

+34-67
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@ import {
55
postConstruct,
66
} from '@theia/core/shared/inversify';
77
import { DialogProps } from '@theia/core/lib/browser/dialogs';
8-
import { AbstractDialog } from '../../theia/dialogs/dialogs';
9-
import { Widget } from '@theia/core/shared/@phosphor/widgets';
8+
import { ReactDialog } from '../../theia/dialogs/dialogs';
109
import { Message } from '@theia/core/shared/@phosphor/messaging';
11-
import { ReactWidget } from '@theia/core/lib/browser/widgets/react-widget';
1210
import {
1311
AvailableBoard,
1412
BoardsServiceProvider,
@@ -23,26 +21,30 @@ import { Port } from '../../../common/protocol';
2321
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
2422

2523
@injectable()
26-
export class UploadFirmwareDialogWidget extends ReactWidget {
27-
@inject(BoardsServiceProvider)
28-
protected readonly boardsServiceClient: BoardsServiceProvider;
24+
export class UploadFirmwareDialogProps extends DialogProps {}
2925

26+
@injectable()
27+
export class UploadFirmwareDialog extends ReactDialog<void> {
28+
@inject(BoardsServiceProvider)
29+
private readonly boardsServiceClient: BoardsServiceProvider;
3030
@inject(ArduinoFirmwareUploader)
31-
protected readonly arduinoFirmwareUploader: ArduinoFirmwareUploader;
32-
31+
private readonly arduinoFirmwareUploader: ArduinoFirmwareUploader;
3332
@inject(FrontendApplicationStateService)
3433
private readonly appStatusService: FrontendApplicationStateService;
3534

36-
protected updatableFqbns: string[] = [];
37-
protected availableBoards: AvailableBoard[] = [];
38-
protected isOpen = new Object();
39-
40-
public busyCallback = (busy: boolean) => {
41-
return;
42-
};
35+
private updatableFqbns: string[] = [];
36+
private availableBoards: AvailableBoard[] = [];
37+
private isOpen = new Object();
38+
private busy = false;
4339

44-
constructor() {
45-
super();
40+
constructor(
41+
@inject(UploadFirmwareDialogProps)
42+
protected override readonly props: UploadFirmwareDialogProps
43+
) {
44+
super({ title: UploadFirmware.Commands.OPEN.label || '' });
45+
this.node.id = 'firmware-uploader-dialog-container';
46+
this.contentNode.classList.add('firmware-uploader-dialog');
47+
this.acceptButton = undefined;
4648
}
4749

4850
@postConstruct()
@@ -59,19 +61,11 @@ export class UploadFirmwareDialogWidget extends ReactWidget {
5961
});
6062
}
6163

62-
protected flashFirmware(firmware: FirmwareInfo, port: Port): Promise<any> {
63-
this.busyCallback(true);
64-
return this.arduinoFirmwareUploader
65-
.flash(firmware, port)
66-
.finally(() => this.busyCallback(false));
67-
}
68-
69-
protected override onCloseRequest(msg: Message): void {
70-
super.onCloseRequest(msg);
71-
this.isOpen = new Object();
64+
get value(): void {
65+
return;
7266
}
7367

74-
protected render(): React.ReactNode {
68+
protected override render(): React.ReactNode {
7569
return (
7670
<form>
7771
<FirmwareUploaderComponent
@@ -84,54 +78,20 @@ export class UploadFirmwareDialogWidget extends ReactWidget {
8478
</form>
8579
);
8680
}
87-
}
88-
89-
@injectable()
90-
export class UploadFirmwareDialogProps extends DialogProps {}
91-
92-
@injectable()
93-
export class UploadFirmwareDialog extends AbstractDialog<void> {
94-
@inject(UploadFirmwareDialogWidget)
95-
protected readonly widget: UploadFirmwareDialogWidget;
96-
97-
private busy = false;
98-
99-
constructor(
100-
@inject(UploadFirmwareDialogProps)
101-
protected override readonly props: UploadFirmwareDialogProps
102-
) {
103-
super({ title: UploadFirmware.Commands.OPEN.label || '' });
104-
this.node.id = 'firmware-uploader-dialog-container';
105-
this.contentNode.classList.add('firmware-uploader-dialog');
106-
this.acceptButton = undefined;
107-
}
108-
109-
get value(): void {
110-
return;
111-
}
11281

11382
protected override onAfterAttach(msg: Message): void {
114-
if (this.widget.isAttached) {
115-
Widget.detach(this.widget);
116-
}
117-
Widget.attach(this.widget, this.contentNode);
118-
const firstButton = this.widget.node.querySelector('button');
83+
const firstButton = this.node.querySelector('button');
11984
firstButton?.focus();
120-
this.widget.busyCallback = this.busyCallback.bind(this);
12185
super.onAfterAttach(msg);
12286
this.update();
12387
}
12488

12589
protected override onUpdateRequest(msg: Message): void {
12690
super.onUpdateRequest(msg);
127-
this.widget.update();
128-
}
129-
130-
protected override onActivateRequest(msg: Message): void {
131-
super.onActivateRequest(msg);
132-
this.widget.activate();
91+
this.update();
13392
}
13493

94+
// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars
13595
protected override handleEnter(event: KeyboardEvent): boolean | void {
13696
return false;
13797
}
@@ -140,16 +100,23 @@ export class UploadFirmwareDialog extends AbstractDialog<void> {
140100
if (this.busy) {
141101
return;
142102
}
143-
this.widget.close();
144103
super.close();
104+
this.isOpen = new Object();
145105
}
146106

147-
busyCallback(busy: boolean): void {
107+
private busyCallback(busy: boolean): void {
148108
this.busy = busy;
149109
if (busy) {
150110
this.closeCrossNode.classList.add('disabled');
151111
} else {
152112
this.closeCrossNode.classList.remove('disabled');
153113
}
154114
}
115+
116+
private flashFirmware(firmware: FirmwareInfo, port: Port): Promise<any> {
117+
this.busyCallback(true);
118+
return this.arduinoFirmwareUploader
119+
.flash(firmware, port)
120+
.finally(() => this.busyCallback(false));
121+
}
155122
}

0 commit comments

Comments
 (0)