diff --git a/.angular-cli.json b/.angular-cli.json
index 2454891..8600971 100644
--- a/.angular-cli.json
+++ b/.angular-cli.json
@@ -19,6 +19,7 @@
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
+ "../node_modules/semantic-ui-css/semantic.css",
"styles.css"
],
"scripts": [],
diff --git a/package-lock.json b/package-lock.json
index 2818b3a..ff86de6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1180,6 +1180,11 @@
"hoek": "2.16.3"
}
},
+ "bowser": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.3.tgz",
+ "integrity": "sha512-/gp96UlcFw5DbV2KQPCqTqi0Mb9gZRyDAHiDsGEH+4B/KOQjeoE5lM1PxlVX8DQDvfEfitmC1rW2Oy8fk/XBDg=="
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2371,6 +2376,11 @@
"dev": true,
"optional": true
},
+ "date-fns": {
+ "version": "2.0.0-alpha.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-alpha.1.tgz",
+ "integrity": "sha512-4gYdF1rDgv9X/0ko69pt+FgpQtDU5rgqZVmckIOhDicfCSTndwHMhUhLJw+pa4DlPdzIkEBtHg6L6VlQ6ueD1g=="
+ },
"date-format": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
@@ -2787,6 +2797,11 @@
"integrity": "sha1-SpJzTgBEyM8LFVO+V+riGkxuX6s=",
"dev": true
},
+ "element-closest": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz",
+ "integrity": "sha1-cqdAoQdFM4LijfnOXbtajfD5Zuw="
+ },
"elliptic": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
@@ -3313,8 +3328,7 @@
"extend": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
- "dev": true
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
},
"extend-shallow": {
"version": "3.0.2",
@@ -5828,6 +5842,11 @@
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
+ "is-ua-webview": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-ua-webview/-/is-ua-webview-1.0.1.tgz",
+ "integrity": "sha512-0/ex7fXiKlsAOs8IbGi9nzYu6eTCHNUmK0wa2QlQ3zuxejGYjoG5ROJ51dsek4Ut2RMD5xaFwB/H0XUWrpTHlQ=="
+ },
"is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
@@ -6066,6 +6085,11 @@
"integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
"dev": true
},
+ "jquery": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
+ "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
+ },
"js-base64": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
@@ -7223,6 +7247,20 @@
"dev": true,
"optional": true
},
+ "ng2-semantic-ui": {
+ "version": "0.9.7",
+ "resolved": "https://registry.npmjs.org/ng2-semantic-ui/-/ng2-semantic-ui-0.9.7.tgz",
+ "integrity": "sha512-A7I3c1n65OXKa7YVxq6I2DjgWgKcyInVjSpze1hm73HPEEULoUSGBOK8IxbUxUUWiVvC6aGHd+IuoE4EkAIS0w==",
+ "requires": {
+ "bowser": "1.9.3",
+ "date-fns": "2.0.0-alpha.1",
+ "element-closest": "2.0.2",
+ "extend": "3.0.1",
+ "is-ua-webview": "1.0.1",
+ "popper.js": "1.14.3",
+ "rxjs": "5.5.7"
+ }
+ },
"no-case": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
@@ -8188,6 +8226,11 @@
"find-up": "2.1.0"
}
},
+ "popper.js": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz",
+ "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU="
+ },
"portfinder": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
@@ -9260,6 +9303,14 @@
"node-forge": "0.7.1"
}
},
+ "semantic-ui-css": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/semantic-ui-css/-/semantic-ui-css-2.3.1.tgz",
+ "integrity": "sha512-8M2OkoKZHfEnNUYB4Ha8q+tTAWN/g17X2l6HUg6n3DP4QDJLQl1xyhnRvM9UhJpsRvkRqgWgQLbRA6cl7Ep2dw==",
+ "requires": {
+ "jquery": "3.3.1"
+ }
+ },
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
diff --git a/package.json b/package.json
index e8c67a5..0b8fd0f 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,9 @@
"@angular/platform-browser-dynamic": "^5.2.0",
"@angular/router": "^5.2.0",
"core-js": "^2.4.1",
+ "ng2-semantic-ui": "^0.9.7",
"rxjs": "^5.5.6",
+ "semantic-ui-css": "^2.3.1",
"zone.js": "^0.8.19"
},
"devDependencies": {
diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts
new file mode 100644
index 0000000..62fd0fe
--- /dev/null
+++ b/src/app/admin/admin-routing.module.ts
@@ -0,0 +1,23 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { TeamListComponent} from './team-list/team-list.component';
+import { TeamService } from '../shared/service/team.service';
+
+const routes: Routes = [
+ {
+ path: 'admin/teams/list',
+ component: TeamListComponent,
+ // canActivate: [AuthGuardService, RoleGuardService],
+ resolve: {
+ teams: TeamService,
+ },
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class AdminRoutingModule {
+}
diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts
new file mode 100644
index 0000000..0734b47
--- /dev/null
+++ b/src/app/admin/admin.module.ts
@@ -0,0 +1,15 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+import { AdminRoutingModule } from './admin-routing.module';
+import { TeamListComponent } from './team-list/team-list.component';
+
+@NgModule({
+ imports: [
+ CommonModule,
+ AdminRoutingModule
+ ],
+ declarations: [TeamListComponent],
+ providers: []
+})
+export class AdminModule { }
diff --git a/src/app/admin/team-list/team-list.component.css b/src/app/admin/team-list/team-list.component.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/admin/team-list/team-list.component.html b/src/app/admin/team-list/team-list.component.html
new file mode 100644
index 0000000..9570673
--- /dev/null
+++ b/src/app/admin/team-list/team-list.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+ |
+ Team |
+ Members |
+
+
+
+
+ |
+
+ |
+ {{team.name}} |
+ {{fancyMemberNames(team)}} |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/admin/team-list/team-list.component.spec.ts b/src/app/admin/team-list/team-list.component.spec.ts
new file mode 100644
index 0000000..ddcff09
--- /dev/null
+++ b/src/app/admin/team-list/team-list.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TeamListComponent } from './team-list.component';
+
+describe('TeamListComponent', () => {
+ let component: TeamListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ TeamListComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(TeamListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/admin/team-list/team-list.component.ts b/src/app/admin/team-list/team-list.component.ts
new file mode 100644
index 0000000..117949d
--- /dev/null
+++ b/src/app/admin/team-list/team-list.component.ts
@@ -0,0 +1,36 @@
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { Title } from '@angular/platform-browser';
+
+import { Team } from '../../shared/team';
+import { TeamService } from '../../shared/service/team.service';
+
+@Component({
+ selector: 'app-team-list',
+ templateUrl: './team-list.component.html',
+ styleUrls: ['./team-list.component.css']
+})
+export class TeamListComponent implements OnInit {
+
+ constructor(private teamService: TeamService,
+ private titleService: Title,
+ private route: ActivatedRoute) {
+ }
+
+ ngOnInit() {
+ this.titleService.setTitle('Teams : MTAStv');
+ this.route.data.subscribe((data: {teams: Array}) => this.teams = data.teams);
+ }
+
+ get teams(): Array {
+ return this.teamService.teams;
+ }
+
+ set teams(teams: Array) {
+ this.teamService.teams = teams;
+ }
+
+ public fancyMemberNames(team: Team): String {
+ return team.members.map(member => member.name).join(', ');
+ }
+}
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
new file mode 100644
index 0000000..4c70708
--- /dev/null
+++ b/src/app/app-routing.module.ts
@@ -0,0 +1,18 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+// import { HomeComponent } from "./home/home.component";
+// import { AuthGuardService } from "./auth/auth-guard.service";
+// import { PageNotFoundComponent } from "./page-not-found/page-not-found.component";
+
+const routes: Routes = [
+ // {path: '', component: HomeComponent, canActivate: [AuthGuardService]},
+ // {path: '**', component: PageNotFoundComponent},
+];
+
+@NgModule({
+ imports: [RouterModule.forRoot(routes)],
+ exports: [RouterModule]
+})
+export class AppRoutingModule {
+}
diff --git a/src/app/app.component.html b/src/app/app.component.html
index fa2706a..90c6b64 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,20 +1 @@
-
-
-
- Welcome to {{ title }}!
-
-

-
-Here are some links to help you start:
-
-
+
\ No newline at end of file
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 926975a..508cbf8 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,18 +1,32 @@
-import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { HttpClientModule } from '@angular/common/http';
+import { FormsModule } from '@angular/forms';
+import { SuiModule } from 'ng2-semantic-ui';
-
+import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
-
+import { TeamService } from './shared/service/team.service';
+import { SlideService } from './shared/service/slide.service';
+import { AdminModule } from './admin/admin.module';
+import { DisplayModule } from './display/display.module';
+import { CommitTrackerService } from './shared/service/commit-tracker.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
- BrowserModule
+ BrowserModule,
+ HttpClientModule,
+ FormsModule,
+ SuiModule,
+ DisplayModule,
+ AdminModule,
+ AppRoutingModule, // must be last RouterModule import for ** route to work
],
- providers: [],
+ providers: [TeamService, SlideService, CommitTrackerService],
bootstrap: [AppComponent]
})
-export class AppModule { }
+export class AppModule {
+}
diff --git a/src/app/display/commit-tracker/commit-tracker.component.css b/src/app/display/commit-tracker/commit-tracker.component.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/display/commit-tracker/commit-tracker.component.html b/src/app/display/commit-tracker/commit-tracker.component.html
new file mode 100644
index 0000000..2f67923
--- /dev/null
+++ b/src/app/display/commit-tracker/commit-tracker.component.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+ | Last activity |
+ Change subject |
+ Project |
+ Branch |
+ Gerrit |
+ Status |
+
+
+
+
+ | {{commit.gerrit_time}} |
+ {{commit.gerrit_change_subject}} |
+ {{commit.gerrit_project}} |
+ {{commit.branch}} |
+ {{commit.gerrit_change_number}} |
+
+ {{CommitStatus.Verified}}
+ {{CommitStatus.CodeReview}}
+ {{CommitStatus.CommitFeedbackLoop}}
+ {{CommitStatus.ShortFeedbackLoop}}
+ {{CommitStatus.NightlyFeedbackLoop}}
+ |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/display/commit-tracker/commit-tracker.component.spec.ts b/src/app/display/commit-tracker/commit-tracker.component.spec.ts
new file mode 100644
index 0000000..0872a3c
--- /dev/null
+++ b/src/app/display/commit-tracker/commit-tracker.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CommitTrackerComponent } from './commit-tracker.component';
+
+describe('CommitTrackerComponent', () => {
+ let component: CommitTrackerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ CommitTrackerComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CommitTrackerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/display/commit-tracker/commit-tracker.component.ts b/src/app/display/commit-tracker/commit-tracker.component.ts
new file mode 100644
index 0000000..9882651
--- /dev/null
+++ b/src/app/display/commit-tracker/commit-tracker.component.ts
@@ -0,0 +1,106 @@
+import { Component, OnInit } from '@angular/core';
+import { Title } from '@angular/platform-browser';
+import { ActivatedRoute } from '@angular/router';
+
+import { CommitTrackerService } from '../../shared/service/commit-tracker.service';
+import { Commit } from '../../shared/commit';
+import { CommitStatus } from '../../shared/commit-status.enum';
+import { Result } from '../../shared/result.enum';
+
+@Component({
+ selector: 'app-commit-tracker',
+ templateUrl: './commit-tracker.component.html',
+ styleUrls: ['./commit-tracker.component.css']
+})
+export class CommitTrackerComponent implements OnInit {
+
+ public CommitStatus = CommitStatus;
+
+ constructor(private commitTrackerService: CommitTrackerService,
+ private titleService: Title,
+ private route: ActivatedRoute) {}
+
+ ngOnInit() {
+ this.titleService.setTitle('Commit-tracker : MTAStv');
+ this.route.data.subscribe((data: {commits: Array}) => this.commits = data.commits);
+ }
+
+ get commits(): Array {
+ return this.commitTrackerService.commits;
+ }
+
+ set commits(commits: Array) {
+ this.commitTrackerService.commits = commits;
+ }
+
+ public labelClasses(commit: Commit, commitStatus: String) {
+ const classes: Object = {
+ ui: true,
+ big: true,
+ circular: true,
+ label: true,
+ };
+
+ switch (commitStatus) {
+ case CommitStatus.Verified:
+ return Object.assign(classes, {
+ green: commit.gerrit_verified === 2,
+ yellow: commit.gerrit_verified === 0,
+ red: commit.gerrit_verified === -2,
+ });
+ case CommitStatus.CodeReview:
+ return Object.assign(classes, {
+ green: commit.gerrit_code_review === 1,
+ yellow: commit.gerrit_code_review === 0,
+ red: commit.gerrit_code_review === -1,
+ });
+ case CommitStatus.CommitFeedbackLoop:
+ return Object.assign(classes, {
+ green: commit.cfl_result === Result.Success,
+ yellow: commit.cfl_result === Result.Aborted,
+ orange: commit.cfl_result === Result.Unstable,
+ red: commit.cfl_result === Result.Failure,
+ brown: commit.cfl_result === Result.NotBuilt,
+ });
+ case CommitStatus.ShortFeedbackLoop:
+ return Object.assign(classes, {
+ green: commit.sfl_result === Result.Success,
+ yellow: commit.sfl_result === Result.Aborted,
+ orange: commit.sfl_result === Result.Unstable,
+ red: commit.sfl_result === Result.Failure,
+ brown: commit.sfl_result === Result.NotBuilt,
+ });
+ case CommitStatus.NightlyFeedbackLoop:
+ return Object.assign(classes, {
+ green: commit.nfl_result === Result.Success,
+ yellow: commit.nfl_result === Result.Aborted,
+ red: commit.nfl_result === Result.Failure,
+ });
+ }
+
+ return classes;
+ }
+
+ public rowClasses(commit: Commit) {
+ return {
+ positive: this.isAllOk(commit),
+ negative: this.hasAnyFailure(commit)
+ };
+ }
+
+ private isAllOk(commit: Commit) {
+ return [
+ commit.cfl_result,
+ commit.sfl_result,
+ commit.nfl_result,
+ ].every(result => result === Result.Success);
+ }
+
+ private hasAnyFailure(commit: Commit) {
+ return [
+ commit.cfl_result,
+ commit.sfl_result,
+ commit.nfl_result,
+ ].some(result => result === Result.Failure);
+ }
+}
diff --git a/src/app/display/display-routing.module.ts b/src/app/display/display-routing.module.ts
new file mode 100644
index 0000000..ff69e15
--- /dev/null
+++ b/src/app/display/display-routing.module.ts
@@ -0,0 +1,22 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { CommitTrackerComponent } from './commit-tracker/commit-tracker.component';
+import { CommitTrackerService } from '../shared/service/commit-tracker.service';
+
+const routes: Routes = [
+ {
+ path: 'commit-tracker',
+ component: CommitTrackerComponent,
+ // canActivate: [AuthGuardService, RoleGuardService],
+ resolve: {
+ commits: CommitTrackerService,
+ },
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class DisplayRoutingModule { }
diff --git a/src/app/display/display.module.ts b/src/app/display/display.module.ts
new file mode 100644
index 0000000..dad6dc0
--- /dev/null
+++ b/src/app/display/display.module.ts
@@ -0,0 +1,14 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+import { DisplayRoutingModule } from './display-routing.module';
+import { CommitTrackerComponent } from './commit-tracker/commit-tracker.component';
+
+@NgModule({
+ imports: [
+ CommonModule,
+ DisplayRoutingModule
+ ],
+ declarations: [CommitTrackerComponent]
+})
+export class DisplayModule { }
diff --git a/src/app/shared/build.ts b/src/app/shared/build.ts
new file mode 100644
index 0000000..72cff11
--- /dev/null
+++ b/src/app/shared/build.ts
@@ -0,0 +1,18 @@
+import { Result } from './result.enum';
+
+export class Build {
+ abort: boolean;
+ build: {
+ subBuild: Array;
+ };
+ buildNumber: Number;
+ duration: String;
+ icon: String;
+ jobName: String;
+ parentBuildNumber: Number;
+ parentJobName: String;
+ phaseName: String;
+ result: Result;
+ retry: boolean;
+ url: String;
+}
diff --git a/src/app/shared/commit-status.enum.ts b/src/app/shared/commit-status.enum.ts
new file mode 100644
index 0000000..6d97b19
--- /dev/null
+++ b/src/app/shared/commit-status.enum.ts
@@ -0,0 +1,7 @@
+export enum CommitStatus {
+ Verified = 'V',
+ CodeReview = 'C-R',
+ CommitFeedbackLoop = 'CFL',
+ ShortFeedbackLoop = 'SFL',
+ NightlyFeedbackLoop = 'NFL',
+}
diff --git a/src/app/shared/commit.ts b/src/app/shared/commit.ts
new file mode 100644
index 0000000..999020f
--- /dev/null
+++ b/src/app/shared/commit.ts
@@ -0,0 +1,44 @@
+import { Build } from './build';
+import { Result } from './result.enum';
+
+export class Commit {
+ change_id: String;
+ branch: String;
+ owner: String;
+ gerrit_change_number: Number;
+ gerrit_change_subject: String;
+ gerrit_project: String;
+ gerrit_verified: Number;
+ gerrit_code_review: Number;
+ gerrit_time: String;
+
+ cfl_id: Number;
+ cfl_build_number: Number;
+ cfl_timestamp: Number;
+ cfl_building: Number;
+ cfl_duration: Number;
+ cfl_result: Result;
+ cfl_sub_builds: Build;
+
+ sfl_id: Number;
+ sfl_build_number: Number;
+ sfl_timestamp: Number;
+ sfl_building: Number;
+ sfl_duration: Number;
+ sfl_result: Result;
+ sfl_sub_builds: Build;
+ sfl_fail_count: Number;
+ sfl_skip_count: Number;
+ sfl_total_count: Number;
+
+ nfl_id: Number;
+ nfl_build_number: Number;
+ nfl_timestamp: Number;
+ nfl_building: Number;
+ nfl_duration: Number;
+ nfl_result: Result;
+ nfl_sub_builds: Build;
+ nfl_fail_count: Number;
+ nfl_skip_count: Number;
+ nfl_total_count: Number;
+}
diff --git a/src/app/shared/member.ts b/src/app/shared/member.ts
new file mode 100644
index 0000000..4682662
--- /dev/null
+++ b/src/app/shared/member.ts
@@ -0,0 +1,4 @@
+export class Member {
+ signum: String;
+ name: String;
+}
diff --git a/src/app/shared/result.enum.ts b/src/app/shared/result.enum.ts
new file mode 100644
index 0000000..7e70c8d
--- /dev/null
+++ b/src/app/shared/result.enum.ts
@@ -0,0 +1,7 @@
+export enum Result {
+ Aborted = 'ABORTED',
+ Failure = 'FAILURE',
+ NotBuilt = 'NOT_BUILT',
+ Success = 'SUCCESS',
+ Unstable = 'UNSTABLE',
+}
diff --git a/src/app/shared/service/commit-tracker.service.ts b/src/app/shared/service/commit-tracker.service.ts
new file mode 100644
index 0000000..bd04278
--- /dev/null
+++ b/src/app/shared/service/commit-tracker.service.ts
@@ -0,0 +1,36 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
+import { Observable } from 'rxjs/Observable';
+
+import { environment } from '../../../environments/environment';
+import { Commit } from '../commit';
+import { TeamService } from './team.service';
+
+@Injectable()
+export class CommitTrackerService implements Resolve> {
+
+ private apiEndPoint = environment.commitTrackerApiUrl;
+ private cachedCommits: Array = [];
+
+ constructor(private httpClient: HttpClient,
+ private teamService: TeamService) { }
+
+ public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise> {
+ return this.getTeamCommits(this.teamService.teamMembers).toPromise();
+ }
+
+ public getTeamCommits(signums: Array): Observable> {
+ return this.httpClient.post>(this.apiEndPoint, {
+ json_signums: signums
+ });
+ }
+
+ get commits(): Array {
+ return this.cachedCommits;
+ }
+
+ set commits(commits: Array) {
+ this.cachedCommits = commits;
+ }
+}
diff --git a/src/app/shared/service/slide.service.spec.ts b/src/app/shared/service/slide.service.spec.ts
new file mode 100644
index 0000000..c38f45f
--- /dev/null
+++ b/src/app/shared/service/slide.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { SlideService } from './slide.service';
+
+describe('SlideService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [SlideService]
+ });
+ });
+
+ it('should be created', inject([SlideService], (service: SlideService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/shared/service/slide.service.ts b/src/app/shared/service/slide.service.ts
new file mode 100644
index 0000000..8bdb738
--- /dev/null
+++ b/src/app/shared/service/slide.service.ts
@@ -0,0 +1,8 @@
+import { Injectable } from '@angular/core';
+
+@Injectable()
+export class SlideService {
+
+ constructor() { }
+
+}
diff --git a/src/app/shared/service/sommit-tracker.service.spec.ts b/src/app/shared/service/sommit-tracker.service.spec.ts
new file mode 100644
index 0000000..66db2d9
--- /dev/null
+++ b/src/app/shared/service/sommit-tracker.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { CommitTrackerService } from './commit-tracker.service';
+
+describe('CommitTrackerService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [CommitTrackerService]
+ });
+ });
+
+ it('should be created', inject([CommitTrackerService], (service: CommitTrackerService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/shared/service/team.service.spec.ts b/src/app/shared/service/team.service.spec.ts
new file mode 100644
index 0000000..42ce51e
--- /dev/null
+++ b/src/app/shared/service/team.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { TeamService } from './team.service';
+
+describe('TeamService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [TeamService]
+ });
+ });
+
+ it('should be created', inject([TeamService], (service: TeamService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/shared/service/team.service.ts b/src/app/shared/service/team.service.ts
new file mode 100644
index 0000000..83446ee
--- /dev/null
+++ b/src/app/shared/service/team.service.ts
@@ -0,0 +1,48 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
+import { Observable } from 'rxjs/Observable';
+
+import { environment } from '../../../environments/environment';
+import { Team } from '../team';
+
+@Injectable()
+export class TeamService implements Resolve> {
+
+ private apiEndPoint = environment.apiUrl + '/api/team';
+ private cachedTeams: Array = [];
+
+ constructor(private httpClient: HttpClient) { }
+
+ public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise> {
+ return this.list().toPromise();
+ }
+
+ public list(): Observable> {
+ return this.httpClient.get>(this.apiEndPoint);
+ }
+
+ public create(team: Team) {
+ return this.httpClient.post(this.apiEndPoint, team);
+ }
+
+ public update(team: Team) {
+ return this.httpClient.put(`${this.apiEndPoint}/${team.id.toString()}`, team);
+ }
+
+ public delete(team: Team) {
+ return this.httpClient.delete(`${this.apiEndPoint}/${team.id.toString()}`);
+ }
+
+ get teams(): Array {
+ return this.cachedTeams;
+ }
+
+ set teams(teams: Array) {
+ this.cachedTeams = teams;
+ }
+
+ get teamMembers(): Array {
+ return ['eztoli', 'etamecs', 'esteist', 'emrtsis', 'erudvel'];
+ }
+}
diff --git a/src/app/shared/slide.ts b/src/app/shared/slide.ts
new file mode 100644
index 0000000..73abaec
--- /dev/null
+++ b/src/app/shared/slide.ts
@@ -0,0 +1,11 @@
+import { Team } from './team';
+
+export class Slide {
+ id: Number;
+ title: String;
+ team: Team;
+ slideData: String;
+ isVisible: boolean;
+ createdAt: String;
+ updatedAt: String;
+}
diff --git a/src/app/shared/team.ts b/src/app/shared/team.ts
new file mode 100644
index 0000000..2127d6d
--- /dev/null
+++ b/src/app/shared/team.ts
@@ -0,0 +1,10 @@
+import { Member } from './member';
+
+export class Team {
+ id: Number;
+ name: String;
+ members: Array;
+ isActive: boolean;
+ createdAt: String;
+ updatedAt: String;
+}
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index 3612073..7f8e77d 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -1,3 +1,5 @@
export const environment = {
- production: true
+ production: true,
+ apiUrl: 'http://localhost:8080',
+ commitTrackerApiUrl: 'https://mtas-trex.rnd.ki.sw.ericsson.se:8080/committracker/api/'
};
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index b7f639a..9b715da 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -4,5 +4,7 @@
// The list of which env maps to which file can be found in `.angular-cli.json`.
export const environment = {
- production: false
+ production: false,
+ apiUrl: 'http://localhost:8080',
+ commitTrackerApiUrl: 'https://mtas-trex.rnd.ki.sw.ericsson.se:8080/committracker/api/'
};
diff --git a/src/styles.css b/src/styles.css
index 90d4ee0..009c911 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -1 +1,8 @@
/* You can add global styles to this file, and also import other style files */
+.main.container {
+ margin-top: 5em;
+}
+
+.ui.checkbox > label[for] {
+ cursor: pointer;
+}