Skip to content

Commit ba16dcf

Browse files
author
Akos Kitta
committed
fix: regression with the user fields React widget
Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
1 parent bfcb518 commit ba16dcf

File tree

2 files changed

+37
-74
lines changed

2 files changed

+37
-74
lines changed

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

-2
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ import { PlotterFrontendContribution } from './serial/plotter/plotter-frontend-c
248248
import {
249249
UserFieldsDialog,
250250
UserFieldsDialogProps,
251-
UserFieldsDialogWidget,
252251
} from './dialogs/user-fields/user-fields-dialog';
253252
import { nls } from '@theia/core/lib/common';
254253
import { IDEUpdaterCommands } from './ide-updater/ide-updater-commands';
@@ -916,7 +915,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
916915
title: 'IDEUpdater',
917916
});
918917

919-
bind(UserFieldsDialogWidget).toSelf().inSingletonScope();
920918
bind(UserFieldsDialog).toSelf().inSingletonScope();
921919
bind(UserFieldsDialogProps).toConstantValue({
922920
title: 'UserFields',
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,18 @@
11
import * as React from '@theia/core/shared/react';
22
import { inject, injectable } from '@theia/core/shared/inversify';
3-
import {
4-
AbstractDialog,
5-
DialogProps,
6-
ReactWidget,
7-
} from '@theia/core/lib/browser';
8-
import { Widget } from '@theia/core/shared/@phosphor/widgets';
3+
import { DialogProps } from '@theia/core/lib/browser/dialogs';
94
import { Message } from '@theia/core/shared/@phosphor/messaging';
105
import { UploadSketch } from '../../contributions/upload-sketch';
116
import { UserFieldsComponent } from './user-fields-component';
127
import { BoardUserField } from '../../../common/protocol';
13-
14-
@injectable()
15-
export class UserFieldsDialogWidget extends ReactWidget {
16-
private _currentUserFields: BoardUserField[] = [];
17-
18-
constructor(private cancel: () => void, private accept: () => Promise<void>) {
19-
super();
20-
}
21-
22-
set currentUserFields(userFields: BoardUserField[]) {
23-
this.setUserFields(userFields);
24-
}
25-
26-
get currentUserFields(): BoardUserField[] {
27-
return this._currentUserFields;
28-
}
29-
30-
resetUserFieldsValue(): void {
31-
this._currentUserFields = this._currentUserFields.map((field) => {
32-
field.value = '';
33-
return field;
34-
});
35-
}
36-
37-
private setUserFields(userFields: BoardUserField[]): void {
38-
this._currentUserFields = userFields;
39-
}
40-
41-
protected render(): React.ReactNode {
42-
return (
43-
<form>
44-
<UserFieldsComponent
45-
initialBoardUserFields={this._currentUserFields}
46-
updateUserFields={this.setUserFields.bind(this)}
47-
cancel={this.cancel}
48-
accept={this.accept}
49-
/>
50-
</form>
51-
);
52-
}
53-
}
8+
import { ReactDialog } from '../../theia/dialogs/dialogs';
549

5510
@injectable()
5611
export class UserFieldsDialogProps extends DialogProps {}
5712

5813
@injectable()
59-
export class UserFieldsDialog extends AbstractDialog<BoardUserField[]> {
60-
protected readonly widget: UserFieldsDialogWidget;
14+
export class UserFieldsDialog extends ReactDialog<BoardUserField[]> {
15+
private _currentUserFields: BoardUserField[] = [];
6116

6217
constructor(
6318
@inject(UserFieldsDialogProps)
@@ -69,39 +24,36 @@ export class UserFieldsDialog extends AbstractDialog<BoardUserField[]> {
6924
this.titleNode.classList.add('user-fields-dialog-title');
7025
this.contentNode.classList.add('user-fields-dialog-content');
7126
this.acceptButton = undefined;
72-
this.widget = new UserFieldsDialogWidget(
73-
this.close.bind(this),
74-
this.accept.bind(this)
75-
);
27+
}
28+
29+
get value(): BoardUserField[] {
30+
return this._currentUserFields;
7631
}
7732

7833
set value(userFields: BoardUserField[]) {
79-
this.widget.currentUserFields = userFields;
34+
this._currentUserFields = userFields;
8035
}
8136

82-
get value(): BoardUserField[] {
83-
return this.widget.currentUserFields;
37+
protected override render(): React.ReactNode {
38+
return (
39+
<div>
40+
<form>
41+
<UserFieldsComponent
42+
initialBoardUserFields={this.value}
43+
updateUserFields={this.doUpdateUserFields}
44+
cancel={this.doCancel}
45+
accept={this.doAccept}
46+
/>
47+
</form>
48+
</div>
49+
);
8450
}
8551

8652
protected override onAfterAttach(msg: Message): void {
87-
if (this.widget.isAttached) {
88-
Widget.detach(this.widget);
89-
}
90-
Widget.attach(this.widget, this.contentNode);
9153
super.onAfterAttach(msg);
9254
this.update();
9355
}
9456

95-
protected override onUpdateRequest(msg: Message): void {
96-
super.onUpdateRequest(msg);
97-
this.widget.update();
98-
}
99-
100-
protected override onActivateRequest(msg: Message): void {
101-
super.onActivateRequest(msg);
102-
this.widget.activate();
103-
}
104-
10557
protected override async accept(): Promise<void> {
10658
// If the user presses enter and at least
10759
// a field is empty don't accept the input
@@ -114,8 +66,21 @@ export class UserFieldsDialog extends AbstractDialog<BoardUserField[]> {
11466
}
11567

11668
override close(): void {
117-
this.widget.resetUserFieldsValue();
118-
this.widget.close();
69+
this.resetUserFieldsValue();
11970
super.close();
12071
}
72+
73+
private resetUserFieldsValue(): void {
74+
this.value = this.value.map((field) => {
75+
field.value = '';
76+
return field;
77+
});
78+
}
79+
80+
private readonly doCancel: () => void = () => this.close();
81+
private readonly doAccept: () => Promise<void> = () => this.accept();
82+
private readonly doUpdateUserFields: (userFields: BoardUserField[]) => void =
83+
(userFields: BoardUserField[]) => {
84+
this.value = userFields;
85+
};
12186
}

0 commit comments

Comments
 (0)