diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5b23e6fa..95311bf8 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -256,6 +256,7 @@ import { ConfigDialogComponent } from './components/project-map/context-menu/dia import { Gns3vmComponent } from './components/preferences/gns3vm/gns3vm.component'; import { Gns3vmService } from './services/gns3vm.service'; import { ThemeService } from './services/theme.service'; +import { ConfigureGns3VMDialogComponent } from './components/servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component'; if (environment.production) { Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', { @@ -430,7 +431,8 @@ if (environment.production) { AlignVerticallyActionComponent, ConfirmationBottomSheetComponent, ConfigDialogComponent, - Gns3vmComponent + Gns3vmComponent, + ConfigureGns3VMDialogComponent ], imports: [ BrowserModule, @@ -540,6 +542,7 @@ if (environment.production) { InfoDialogComponent, ChangeSymbolDialogComponent, EditProjectDialogComponent, + ConfigureGns3VMDialogComponent, ConfiguratorDialogVpcsComponent, ConfiguratorDialogEthernetHubComponent, ConfiguratorDialogEthernetSwitchComponent, diff --git a/src/app/components/projects/projects.component.spec.ts b/src/app/components/projects/projects.component.spec.ts index 602a3e41..3c7c32df 100644 --- a/src/app/components/projects/projects.component.spec.ts +++ b/src/app/components/projects/projects.component.spec.ts @@ -2,9 +2,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIconModule, MatSortModule, MatTableModule, MatTooltipModule, MatDialogModule, MatFormFieldModule, MatInputModule, MatDialogRef, MatDialogContainer, MatBottomSheetModule } from '@angular/material'; import { RouterTestingModule } from '@angular/router/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; - import { Observable, of } from 'rxjs'; - import { ProjectsComponent } from './projects.component'; import { ServerService } from '../../services/server.service'; import { MockedServerService } from '../../services/server.service.spec'; @@ -23,6 +21,8 @@ import { ChooseNameDialogComponent } from './choose-name-dialog/choose-name-dial import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { OverlayRef } from '@angular/cdk/overlay'; import { ToasterService } from '../../services/toaster.service'; +import { ElectronService } from 'ngx-electron'; +import { ConfigureGns3VMDialogComponent } from '../servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component'; describe('ProjectsComponent', () => { let component: ProjectsComponent; @@ -33,8 +33,20 @@ describe('ProjectsComponent', () => { let server: Server; let progressService: ProgressService; let mockedProjectService: MockedProjectService = new MockedProjectService(); + let electronService; beforeEach(async(() => { + electronService = { + isElectronApp: true, + remote: { + require: (file) => { + return { + openConsole() {} + } + } + } + }; + TestBed.configureTestingModule({ imports: [ MatTableModule, @@ -55,12 +67,13 @@ describe('ProjectsComponent', () => { { provide: ProjectService, useValue: mockedProjectService }, { provide: SettingsService, useClass: MockedSettingsService }, { provide: ToasterService }, + { provide: ElectronService, useValue: electronService }, ProgressService ], - declarations: [ProjectsComponent, ChooseNameDialogComponent, ProjectsFilter], + declarations: [ProjectsComponent, ChooseNameDialogComponent, ConfigureGns3VMDialogComponent, ProjectsFilter], schemas: [NO_ERRORS_SCHEMA] }) - .overrideModule(BrowserDynamicTestingModule, { set: { entryComponents: [ChooseNameDialogComponent] } }) + .overrideModule(BrowserDynamicTestingModule, { set: { entryComponents: [ChooseNameDialogComponent, ConfigureGns3VMDialogComponent] } }) .compileComponents(); serverService = TestBed.get(ServerService); diff --git a/src/app/components/projects/projects.component.ts b/src/app/components/projects/projects.component.ts index da0bcc9a..0ef4d6db 100644 --- a/src/app/components/projects/projects.component.ts +++ b/src/app/components/projects/projects.component.ts @@ -20,6 +20,8 @@ import { ChooseNameDialogComponent } from './choose-name-dialog/choose-name-dial import { NavigationDialogComponent } from './navigation-dialog/navigation-dialog.component'; import { ConfirmationBottomSheetComponent } from './confirmation-bottomsheet/confirmation-bottomsheet.component'; import { ToasterService } from '../../services/toaster.service'; +import { ConfigureGns3VMDialogComponent } from '../servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component'; +import { ElectronService } from 'ngx-electron'; @Component({ selector: 'app-projects', @@ -46,7 +48,8 @@ export class ProjectsComponent implements OnInit { public dialog: MatDialog, private router: Router, private bottomSheet: MatBottomSheet, - private toasterService: ToasterService + private toasterService: ToasterService, + private electronService: ElectronService ) {} ngOnInit() { @@ -69,6 +72,22 @@ export class ProjectsComponent implements OnInit { }); this.settings = this.settingsService.getAll(); + + let gns3vmConfig = localStorage.getItem('gns3vmConfig'); + if (this.electronService.isElectronApp && gns3vmConfig!=='configured') { + const dialogRef = this.dialog.open(ConfigureGns3VMDialogComponent, { + width: '350px', + height: '120px', + autoFocus: false + }); + + dialogRef.afterClosed().subscribe((answer: boolean) => { + if (answer) { + localStorage.setItem('gns3vmConfig', 'configured'); + this.router.navigate(['/server', this.server.id, 'preferences', 'gns3vm']); + } + }); + }; } refresh() { diff --git a/src/app/components/servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component.html b/src/app/components/servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component.html new file mode 100644 index 00000000..c9f74ebf --- /dev/null +++ b/src/app/components/servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component.html @@ -0,0 +1,7 @@ +
+