Skip to content
This repository was archived by the owner on Jul 15, 2022. It is now read-only.

Commit ca2d35b

Browse files
author
Leonardo Chaia
committed
feat: added Tabs support
1 parent d98529f commit ca2d35b

File tree

43 files changed

+476
-271
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+476
-271
lines changed

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
"@angular/material": "^6.4.1",
5858
"@angular/platform-browser": "6.1.0",
5959
"@angular/platform-browser-dynamic": "6.1.0",
60-
"@angular/router": "6.1.0",
6160
"@angularclass/hmr": "^2.1.3",
6261
"@commitlint/cli": "^7.0.0",
6362
"@commitlint/config-conventional": "^7.0.1",

src/app/app-routing-module.ts

-90
This file was deleted.

src/app/app.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<router-outlet></router-outlet>
1+
<tim-navigation-container></tim-navigation-container>

src/app/app.module.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,24 @@ import { BrowserModule } from '@angular/platform-browser';
22
import { NgModule } from '@angular/core';
33
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
44
import { AppComponent } from './app.component';
5-
import { AppRoutingModule } from './app-routing-module';
5+
import { NavigationModule } from './navigation/navigation.module';
6+
import { HomeModule } from './home/home.module';
7+
import { DaemonToolsModule } from './daemon-tools/daemon-tools.module';
8+
import { RegistryModule } from './registry/registry.module';
9+
import { SettingsModule } from './settings/settings.module';
10+
import { ApplicationTemplatesModule } from './application-templates/application-templates.module';
611

712
@NgModule({
813
imports: [
914
BrowserModule,
1015
BrowserAnimationsModule,
11-
AppRoutingModule,
16+
17+
HomeModule,
18+
DaemonToolsModule,
19+
RegistryModule,
20+
SettingsModule,
21+
NavigationModule,
22+
ApplicationTemplatesModule,
1223
],
1324
declarations: [
1425
AppComponent,
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,15 @@
1-
import { Component, OnInit, OnDestroy } from '@angular/core';
2-
import { ActivatedRoute } from '@angular/router';
3-
import { ApplicationService } from '../application.service';
1+
import { Component, Inject } from '@angular/core';
42
import { Application } from '../application.model';
5-
import { Subject } from 'rxjs';
6-
import { takeUntil } from 'rxjs/operators';
3+
import { TAB_DATA } from '../../navigation/tab.model';
74

85
@Component({
96
selector: 'tim-application-launch-container',
107
templateUrl: './application-launch-container.component.html',
118
styleUrls: ['./application-launch-container.component.scss']
129
})
13-
export class ApplicationLaunchContainerComponent implements OnInit, OnDestroy {
14-
public application: Application;
10+
export class ApplicationLaunchContainerComponent {
11+
constructor(
12+
@Inject(TAB_DATA)
13+
public application: Application) { }
1514

16-
private componetDestroyed = new Subject();
17-
18-
constructor(private route: ActivatedRoute,
19-
private applicationService: ApplicationService) { }
20-
21-
public ngOnInit() {
22-
this.route.paramMap.subscribe(params => {
23-
const appId = params.get('appId');
24-
this.applicationService.getApplication(appId)
25-
.pipe(takeUntil(this.componetDestroyed))
26-
.subscribe(app => {
27-
this.application = app;
28-
});
29-
});
30-
}
31-
32-
public ngOnDestroy() {
33-
this.componetDestroyed.next();
34-
this.componetDestroyed.unsubscribe();
35-
}
3615
}

src/app/application-templates/application-launch/application-launch.component.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Component, OnInit, Input } from '@angular/core';
22
import { Application } from '../application.model';
3-
import { Router } from '@angular/router';
3+
import { TimoneerTabsService } from '../../navigation/timoneer-tabs.service';
44

55
@Component({
66
selector: 'tim-application-launch',
@@ -12,12 +12,12 @@ export class ApplicationLaunchComponent implements OnInit {
1212
@Input()
1313
public application: Application;
1414

15-
constructor(private router: Router) { }
15+
constructor(private tabService: TimoneerTabsService) { }
1616

1717
public ngOnInit() {
1818
}
1919

2020
public containerCreated(id: string) {
21-
this.router.navigate(['/docker/containers/', id, 'attach']);
21+
this.tabService.attach(id, true);
2222
}
2323
}

src/app/application-templates/application-list-container/application-list-container.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export class ApplicationListContainerComponent implements OnInit {
99

1010
constructor() { }
1111

12-
ngOnInit() {
12+
public ngOnInit() {
1313
}
1414

1515
}

src/app/application-templates/application-list/application-list.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ <h2>
1818
<a fxFlex
1919
mat-raised-button
2020
color="primary"
21-
[routerLink]="['/applications/', app.id, 'launch']">
21+
(click)="openAppTab(app)">
2222
Launch
2323
</a>
2424
</mat-card>

src/app/application-templates/application-list/application-list.component.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { Component, OnInit } from '@angular/core';
22
import { ApplicationService } from '../application.service';
3+
import { Application } from '../application.model';
4+
import { TabService } from '../../navigation/tab.service';
5+
import { ApplicationLaunchContainerComponent } from '../application-launch-container/application-launch-container.component';
36

47
@Component({
58
selector: 'tim-application-list',
@@ -8,7 +11,8 @@ import { ApplicationService } from '../application.service';
811
})
912
export class ApplicationListComponent implements OnInit {
1013

11-
constructor(private applicationService: ApplicationService) { }
14+
constructor(private applicationService: ApplicationService,
15+
private tabService: TabService) { }
1216

1317
public get applications$() {
1418
return this.applicationService.getApplications();
@@ -17,4 +21,12 @@ export class ApplicationListComponent implements OnInit {
1721
public ngOnInit() {
1822
}
1923

24+
public openAppTab(app: Application) {
25+
this.tabService.addTab({
26+
title: `Launch ${app.title}`,
27+
component: ApplicationLaunchContainerComponent,
28+
params: app
29+
});
30+
}
31+
2032
}

src/app/application-templates/application-templates.module.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { CommonModule } from '@angular/common';
33
import { ApplicationListComponent } from './application-list/application-list.component';
44
import { MatIconModule, MatCardModule, MatButtonModule, MatFormFieldModule, MatInputModule, MatDividerModule } from '@angular/material';
55
import { FlexLayoutModule } from '@angular/flex-layout';
6-
import { RouterModule } from '@angular/router';
76
import { ApplicationListContainerComponent } from './application-list-container/application-list-container.component';
87
import { ApplicationLaunchContainerComponent } from './application-launch-container/application-launch-container.component';
98
import { ApplicationLaunchComponent } from './application-launch/application-launch.component';
@@ -14,7 +13,6 @@ import { DaemonToolsModule } from '../daemon-tools/daemon-tools.module';
1413
@NgModule({
1514
imports: [
1615
CommonModule,
17-
RouterModule,
1816
FormsModule,
1917
ReactiveFormsModule,
2018
MatInputModule,
@@ -38,6 +36,10 @@ import { DaemonToolsModule } from '../daemon-tools/daemon-tools.module';
3836
exports: [
3937
ApplicationListComponent,
4038
ApplicationListContainerComponent,
39+
],
40+
entryComponents: [
41+
ApplicationListContainerComponent,
42+
ApplicationLaunchContainerComponent,
4143
]
4244
})
4345
export class ApplicationTemplatesModule { }

src/app/daemon-tools/container-actions-sheet/container-actions-sheet.component.html

+4-6
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,15 @@ <h1>
1010
</p>
1111
<mat-nav-list>
1212

13-
<a [routerLink]="['/docker/containers/', container.Id, 'attach']"
14-
mat-list-item
15-
(click)="dismiss()">
13+
<a mat-list-item
14+
(click)="attach()">
1615
<mat-icon mat-list-icon>folder</mat-icon>
1716
<h4 mat-line>Attach</h4>
1817
<p mat-line>Attach to the container's process</p>
1918
</a>
2019

21-
<a [routerLink]="['/docker/containers/', container.Id, 'exec']"
22-
mat-list-item
23-
(click)="dismiss()">
20+
<a mat-list-item
21+
(click)="exec()">
2422
<mat-icon mat-list-icon>folder</mat-icon>
2523
<h4 mat-line>Exec</h4>
2624
<p mat-line>Execute a command inside the container</p>

src/app/daemon-tools/container-actions-sheet/container-actions-sheet.component.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { catchError } from 'rxjs/operators';
55
import { throwError, Observable } from 'rxjs';
66
import { ContainerInfo } from 'dockerode';
77
import { DockerContainerService } from '../docker-container.service';
8+
import { TimoneerTabsService } from '../../navigation/timoneer-tabs.service';
89

910
@Component({
1011
selector: 'tim-container-actions-sheet',
@@ -22,7 +23,8 @@ export class ContainerActionsSheetComponent {
2223
public container: ContainerInfo,
2324
private bottomSheetRef: MatBottomSheetRef<ContainerActionsSheetComponent>,
2425
private notificationService: NotificationService,
25-
private containerService: DockerContainerService) { }
26+
private containerService: DockerContainerService,
27+
private tabService: TimoneerTabsService) { }
2628

2729
public dismiss() {
2830
this.bottomSheetRef.dismiss();
@@ -44,6 +46,16 @@ export class ContainerActionsSheetComponent {
4446
});
4547
}
4648

49+
public attach() {
50+
this.dismiss();
51+
this.tabService.attach(this.container.Id);
52+
}
53+
54+
public exec() {
55+
this.dismiss();
56+
this.tabService.exec(this.container.Id);
57+
}
58+
4759
private bindLoading(obs: Observable<any>) {
4860
this.loading = true;
4961
return obs.pipe(catchError((e) => {

0 commit comments

Comments
 (0)