Skip to content

Commit

Permalink
feat: introduce VersionWelcomeDialog
Browse files Browse the repository at this point in the history
  • Loading branch information
giacomocusinato committed Nov 26, 2024
1 parent 51c40fa commit 8b97650
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,10 @@ import {
import { TreeViewDecoratorService } from '@theia/plugin-ext/lib/main/browser/view/tree-view-decorator-service';
import { PLUGIN_VIEW_DATA_FACTORY_ID } from '@theia/plugin-ext/lib/main/browser/view/plugin-view-registry';
import { TreeViewWidget } from './theia/plugin-ext/tree-view-widget';
import {
VersionWelcomeDialog,
VersionWelcomeDialogProps,
} from './dialogs/version-welcome-dialog';

// Hack to fix copy/cut/paste issue after electron version update in Theia.
// https://github.com/eclipse-theia/theia/issues/12487
Expand Down Expand Up @@ -1014,6 +1018,11 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
title: 'IDEUpdater',
});

bind(VersionWelcomeDialog).toSelf().inSingletonScope();
bind(VersionWelcomeDialogProps).toConstantValue({
title: 'VersionWelcomeDialog',
});

bind(UserFieldsDialog).toSelf().inSingletonScope();
bind(UserFieldsDialogProps).toConstantValue({
title: 'UserFields',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
} from '../../common/protocol/ide-updater';
import { IDEUpdaterDialog } from '../dialogs/ide-updater/ide-updater-dialog';
import { Contribution } from './contribution';
import { VersionWelcomeDialog } from '../dialogs/version-welcome-dialog';

@injectable()
export class CheckForIDEUpdates extends Contribution {
Expand All @@ -16,6 +17,9 @@ export class CheckForIDEUpdates extends Contribution {
@inject(IDEUpdaterDialog)
private readonly updaterDialog: IDEUpdaterDialog;

@inject(VersionWelcomeDialog)
private readonly welcomeDialog: VersionWelcomeDialog;

@inject(LocalStorageService)
private readonly localStorage: LocalStorageService;

Expand Down Expand Up @@ -49,6 +53,7 @@ export class CheckForIDEUpdates extends Contribution {
return this.updater.checkForUpdates(true);
})
.then(async (updateInfo) => {
this.welcomeDialog.open();
if (!updateInfo) return;
const versionToSkip = await this.localStorage.getData<string>(
SKIP_IDE_VERSION
Expand Down
102 changes: 102 additions & 0 deletions arduino-ide-extension/src/browser/dialogs/version-welcome-dialog.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import React from '@theia/core/shared/react';
import { inject, injectable } from '@theia/core/shared/inversify';
import { Message } from '@theia/core/shared/@phosphor/messaging';
import { ReactDialog } from '../theia/dialogs/dialogs';
import { nls } from '@theia/core';
import { DialogProps } from '@theia/core/lib/browser';
import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { AppService } from '../app-service';

@injectable()
export class VersionWelcomeDialogProps extends DialogProps {}

@injectable()
export class VersionWelcomeDialog extends ReactDialog<void> {
// @inject(LocalStorageService)
// private readonly localStorageService: LocalStorageService;

@inject(AppService)
private readonly appService: AppService;

@inject(WindowService)
private readonly windowService: WindowService;

constructor(
@inject(VersionWelcomeDialogProps)
protected override readonly props: VersionWelcomeDialogProps
) {
super({
title: nls.localize(
'arduino/versionWelcome/versionWelcomeDialog',
'Welcome to the new Arduino IDE!'
),
});

this.node.id = 'version-welcome-dialog-container';
this.contentNode.classList.add('version-welcome-dialog');
}

protected render(): React.ReactNode {
return (
<div>
<p>
{nls.localize(
'arduino/versionWelcome/donateMessage',
'Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.'
)}
</p>
<p className="bold">
{nls.localize(
'arduino/versionWelcome/donateMessage2',
'Please consider supporting our efforts to keep Arduino IDE free.'
)}
</p>
</div>
);
}

override get value(): void {
return;
}

private appendButtons(): void {
const cancelButton = this.createButton(
nls.localize('arduino/versionWelcome/cancelButton', 'Maybe later')
);
cancelButton.classList.add('secondary');
cancelButton.classList.add('cancel-button');
this.addAction(cancelButton, this.close.bind(this), 'click');
this.controlPanel.appendChild(cancelButton);

const donateButton = this.createButton(
nls.localize('arduino/versionWelcome/donateButton', 'Donate now')
);
this.addAction(donateButton, this.openDonationPage.bind(this), 'click');
this.controlPanel.appendChild(donateButton);
donateButton.focus();
}

private readonly openDonationPage = () => {
const url = 'https://www.arduino.cc/en/donate';
this.windowService.openNewWindow(url, { external: true });
};

// FIXME: AppInfo is not available in the browser?
private async updateTitleVersion(): Promise<void> {
const appInfo = await this.appService.info();
const { appVersion } = appInfo;
const title = nls.localize(
'arduino/versionWelcome/versionWelcomeDialog',
`Welcome to the new Arduino IDE ${appVersion}!`,
appVersion
);
this.titleNode.innerHTML = title;
}

protected override onAfterAttach(msg: Message): void {
this.update();
this.appendButtons();
this.updateTitleVersion();
super.onAfterAttach(msg);
}
}
1 change: 1 addition & 0 deletions arduino-ide-extension/src/browser/style/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
@import "./settings-dialog.css";
@import "./firmware-uploader-dialog.css";
@import "./ide-updater-dialog.css";
@import "./version-welcome-dialog.css";
@import "./certificate-uploader-dialog.css";
@import "./user-fields-dialog.css";
@import "./debug.css";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#version-welcome-dialog-container > .dialogBlock {
width: 546px;

.bold {
font-weight: bold;
}
}
7 changes: 7 additions & 0 deletions i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,13 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name"
},
"versionWelcome": {
"versionWelcomeDialog": "Welcome to Arduino IDE '{0}'!.",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our efforts to keep Arduino IDE free.",
"cancelButton": "Maybe later",
"donateButton": "Donate now"
},
"workspace": {
"alreadyExists": "'{0}' already exists."
}
Expand Down

0 comments on commit 8b97650

Please sign in to comment.