* semantic ui added

* very basic kanban module implementation to show api operation
This commit is contained in:
Dávid Danyi
2017-08-02 18:50:50 +02:00
parent 862b53d0e9
commit f7bb463bd4
31 changed files with 3386 additions and 393 deletions

View File

@@ -0,0 +1,13 @@
<div class="ui main fullwide-container">
<div class="ui grid">
<div class="six wide column">
<app-kanban-entry-item [kanbanEntries]="kanbanBoard.inbox"></app-kanban-entry-item>
</div>
<div class="six wide column">
<app-kanban-entry-item [kanbanEntries]="kanbanBoard.inProgress"></app-kanban-entry-item>
</div>
<div class="four wide column">
<app-kanban-entry-item [kanbanEntries]="kanbanBoard.verification"></app-kanban-entry-item>
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { KanbanBoardComponent } from './kanban-board.component';
describe('KanbanBoardComponent', () => {
let component: KanbanBoardComponent;
let fixture: ComponentFixture<KanbanBoardComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ KanbanBoardComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(KanbanBoardComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,27 @@
import {Component, OnInit} from '@angular/core';
import {Title} from '@angular/platform-browser';
import {ActivatedRoute} from '@angular/router';
import {
KanbanBoard
} from "../shared";
@Component({
selector: 'app-kanban-board',
templateUrl: './kanban-board.component.html',
styleUrls: ['./kanban-board.component.css']
})
export class KanbanBoardComponent implements OnInit {
public kanbanBoard: KanbanBoard = new KanbanBoard;
constructor(private titleService: Title,
private route: ActivatedRoute) {
}
ngOnInit() {
this.titleService.setTitle('TaurusXFT : Kanban board');
this.route.data.subscribe((data: { kanbanBoard: KanbanBoard }) => this.kanbanBoard = data.kanbanBoard);
}
}

View File

@@ -0,0 +1,17 @@
<div class="ui card" *ngFor="let kanbanEntry of kanbanEntries">
<div class="ui tiny image">
<img src="{{avatarUrl(kanbanEntry.assignee?.avatar)}}">
</div>
<div class="content">
<a class="header">{{kanbanEntry.assignee?.name}}</a>
<div class="description">
{{kanbanEntry.summary}}
</div>
</div>
<div class="extra content">
<a>
<i class="user icon"></i>
22 Friends
</a>
</div>
</div>

View File

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { KanbanEntryCardComponent } from './kanban-entry-card.component';
describe('KanbanEntryCardComponent', () => {
let component: KanbanEntryCardComponent;
let fixture: ComponentFixture<KanbanEntryCardComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ KanbanEntryCardComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(KanbanEntryCardComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,25 @@
import {Component, Input, OnInit} from '@angular/core';
import {environment} from "../../../environments/environment";
import {KanbanEntry} from "../shared/kanban-entry.model";
@Component({
selector: 'app-kanban-entry-card',
templateUrl: './kanban-entry-card.component.html',
styleUrls: ['./kanban-entry-card.component.css']
})
export class KanbanEntryCardComponent implements OnInit {
@Input() kanbanEntries: Array<KanbanEntry>;
constructor() {}
ngOnInit() {}
public avatarUrl(avatar: string): string {
try {
return environment.apiUri + avatar;
} catch (e) {
return "";
}
}
}

View File

@@ -0,0 +1,16 @@
<div class="ui divided items">
<div class="item" *ngFor="let kanbanEntry of kanbanEntries">
<div class="ui tiny image">
<img src="{{avatarUrl(kanbanEntry.assignee?.avatar)}}">
</div>
<div class="content">
<a class="header">{{kanbanEntry.key}}</a>
<div class="description">
<p>{{kanbanEntry.summary}}</p>
</div>
<div class="extra">
Additional Details
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { KanbanEntryItemComponent } from './kanban-entry-item.component';
describe('KanbanEntryItemComponent', () => {
let component: KanbanEntryItemComponent;
let fixture: ComponentFixture<KanbanEntryItemComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ KanbanEntryItemComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(KanbanEntryItemComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,25 @@
import {Component, Input, OnInit} from '@angular/core';
import {environment} from "../../../environments/environment";
import {KanbanEntry} from "../shared/kanban-entry.model";
@Component({
selector: 'app-kanban-entry-item',
templateUrl: './kanban-entry-item.component.html',
styleUrls: ['./kanban-entry-item.component.css']
})
export class KanbanEntryItemComponent implements OnInit {
@Input() kanbanEntries: Array<KanbanEntry>;
constructor() {}
ngOnInit() {}
public avatarUrl(avatarPath: string): string {
try {
return environment.apiUri + avatarPath;
} catch (e) {
return "";
}
}
}

View File

@@ -0,0 +1,27 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HttpModule } from "@angular/http";
import { KanbanBoardComponent } from './kanban-board/kanban-board.component';
import { KanbanService } from './shared/kanban.service';
import { KanbanEntryItemComponent } from './kanban-entry-item/kanban-entry-item.component';
import { KanbanEntryCardComponent } from './kanban-entry-card/kanban-entry-card.component';
@NgModule({
imports: [
CommonModule,
HttpModule,
],
declarations: [
KanbanBoardComponent,
KanbanEntryItemComponent,
KanbanEntryCardComponent,
],
providers: [
KanbanService,
],
exports: [],
})
export class KanbanModule {
}

View File

@@ -0,0 +1,6 @@
export * from './jira-assignee.model';
export * from './jira-issue-type.model';
export * from './jira-status.model';
export * from './kanban-board.model';
export * from './kanban-entry.model';
export * from './kanban.service';

View File

@@ -0,0 +1,7 @@
export class JiraAssignee {
public signum: string;
public name: string;
public email: string;
public avatar: string;
public active: boolean;
}

View File

@@ -0,0 +1,5 @@
export class JiraIssueType {
public name: string;
public description: string;
public icon: string;
}

View File

@@ -0,0 +1,4 @@
export class JiraStatus {
public name: string;
public color: string;
}

View File

@@ -0,0 +1,8 @@
import {KanbanEntry} from "./kanban-entry.model";
export class KanbanBoard {
public inbox: Array<KanbanEntry>;
public inProgress: Array<KanbanEntry>;
public verification: Array<KanbanEntry>;
public done: Array<KanbanEntry>;
}

View File

@@ -0,0 +1,22 @@
import {JiraIssueType} from "./jira-issue-type.model";
import {JiraStatus} from "./jira-status.model";
import {JiraAssignee} from "./jira-assignee.model";
export class KanbanEntry {
public id: number;
public key: string;
public summary: string;
public issueType: JiraIssueType;
public status: JiraStatus;
public assignee: JiraAssignee;
public prio: number;
public functionalAreas: Array<string>;
public externalId: string;
public externalLink: string;
public project: string;
public mhwebStatus: string;
public mhwebHot: boolean;
public mhwebExternal: boolean;
public team: string;
public answerCode: string;
}

View File

@@ -0,0 +1,15 @@
import { TestBed, inject } from '@angular/core/testing';
import { KanbanService } from './kanban.service';
describe('KanbanService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [KanbanService]
});
});
it('should be created', inject([KanbanService], (service: KanbanService) => {
expect(service).toBeTruthy();
}));
});

View File

@@ -0,0 +1,25 @@
import { Injectable } from '@angular/core';
import { Http, Headers } from "@angular/http";
import 'rxjs/Rx';
import { Router, Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { environment } from '../../../environments/environment';
import {
KanbanBoard
} from '../shared';
@Injectable()
export class KanbanService {
private url = environment.apiUri + '/api/kanban';
constructor(private httpService: Http) {}
public getList(): Observable<KanbanBoard> {
return this.httpService.get(this.url).map(res => <KanbanBoard>res.json())
}
public resolve(route: ActivatedRouteSnapshot): Promise<KanbanBoard> {
return this.getList().toPromise().then(result => result ? result : false);
}
}