From faebfb5695e376dd4c18a06ee64bb9c23fa740c5 Mon Sep 17 00:00:00 2001 From: Jakob Fahr Date: Wed, 8 Jul 2020 13:27:12 +0200 Subject: [PATCH] move all components into 'components' folder (except app-component) --- src/app/app-routing.module.ts | 10 +- src/app/app.module.ts | 18 +- .../backlog-table/backlog.component.css | 4 +- .../backlog-table/backlog.component.html | 124 +++--- .../backlog-table/backlog.component.ts | 320 +++++++------- .../dashboard/dashboard.component.css | 14 +- .../dashboard/dashboard.component.html | 202 ++++----- .../dashboard/dashboard.component.ts | 2 +- .../sprint-form/sprint-form.component.css | 0 .../sprint-form/sprint-form.component.html | 68 +-- .../sprint-form/sprint-form.component.ts | 120 ++--- .../sprint-table/sprint-table.component.css | 0 .../sprint-table/sprint-table.component.html | 132 +++--- .../sprint-table/sprint-table.component.ts | 174 ++++---- .../task-form/task-form.component.css | 0 .../task-form/task-form.component.html | 0 .../task-form/task-form.component.spec.ts | 0 .../task-form/task-form.component.ts | 400 ++++++++--------- .../task-table/task-table.component.css | 0 .../task-table/task-table.component.html | 0 .../task-table/task-table.component.ts | 6 +- .../userstory-form.component.css | 0 .../userstory-form.component.html | 278 ++++++------ .../userstory-form.component.ts | 414 +++++++++--------- .../userstory-inner-table.component.css | 0 .../userstory-inner-table.component.html | 0 .../userstory-inner-table.component.ts | 6 +- .../userstory-table.component.css | 0 .../userstory-table.component.html | 0 .../userstory-table.component.ts | 2 +- 30 files changed, 1147 insertions(+), 1147 deletions(-) rename src/app/{ => components}/backlog-table/backlog.component.css (96%) rename src/app/{ => components}/backlog-table/backlog.component.html (97%) rename src/app/{ => components}/backlog-table/backlog.component.ts (92%) rename src/app/{ => components}/dashboard/dashboard.component.css (91%) rename src/app/{ => components}/dashboard/dashboard.component.html (97%) rename src/app/{ => components}/dashboard/dashboard.component.ts (99%) rename src/app/{ => components}/sprint-form/sprint-form.component.css (100%) rename src/app/{ => components}/sprint-form/sprint-form.component.html (97%) rename src/app/{ => components}/sprint-form/sprint-form.component.ts (91%) rename src/app/{ => components}/sprint-table/sprint-table.component.css (100%) rename src/app/{ => components}/sprint-table/sprint-table.component.html (97%) rename src/app/{ => components}/sprint-table/sprint-table.component.ts (90%) rename src/app/{ => components}/task-form/task-form.component.css (100%) rename src/app/{ => components}/task-form/task-form.component.html (100%) rename src/app/{ => components}/task-form/task-form.component.spec.ts (100%) rename src/app/{ => components}/task-form/task-form.component.ts (95%) rename src/app/{ => components}/task-table/task-table.component.css (100%) rename src/app/{ => components}/task-table/task-table.component.html (100%) rename src/app/{ => components}/task-table/task-table.component.ts (95%) rename src/app/{ => components}/userstory-form/userstory-form.component.css (100%) rename src/app/{ => components}/userstory-form/userstory-form.component.html (98%) rename src/app/{ => components}/userstory-form/userstory-form.component.ts (94%) rename src/app/{ => components}/userstory-inner-table/userstory-inner-table.component.css (100%) rename src/app/{ => components}/userstory-inner-table/userstory-inner-table.component.html (100%) rename src/app/{ => components}/userstory-inner-table/userstory-inner-table.component.ts (95%) rename src/app/{ => components}/userstory-table/userstory-table.component.css (100%) rename src/app/{ => components}/userstory-table/userstory-table.component.html (100%) rename src/app/{ => components}/userstory-table/userstory-table.component.ts (93%) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 88d37c7..4acfc7b 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,10 +1,10 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import { DashboardComponent } from './dashboard/dashboard.component'; -import { UserstoryTableComponent } from './userstory-table/userstory-table.component'; -import { TaskTableComponent } from './task-table/task-table.component'; -import { SprintTableComponent } from './sprint-table/sprint-table.component'; -import {BacklogComponent} from './backlog-table/backlog.component'; +import { DashboardComponent } from './components/dashboard/dashboard.component'; +import { UserstoryTableComponent } from './components/userstory-table/userstory-table.component'; +import { TaskTableComponent } from './components/task-table/task-table.component'; +import { SprintTableComponent } from './components/sprint-table/sprint-table.component'; +import {BacklogComponent} from './components/backlog-table/backlog.component'; const routes: Routes = [ { path: 'tasks', component: TaskTableComponent }, diff --git a/src/app/app.module.ts b/src/app/app.module.ts index b7809b2..e11e331 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,16 +7,16 @@ import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { BackendService } from './services/backend.service'; -import { TaskFormComponent } from './task-form/task-form.component'; -import { UserstoryFormComponent } from './userstory-form/userstory-form.component'; -import { SprintFormComponent } from './sprint-form/sprint-form.component'; +import { TaskFormComponent } from './components/task-form/task-form.component'; +import { UserstoryFormComponent } from './components/userstory-form/userstory-form.component'; +import { SprintFormComponent } from './components/sprint-form/sprint-form.component'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { UserstoryTableComponent } from './userstory-table/userstory-table.component'; -import { TaskTableComponent } from './task-table/task-table.component'; -import { SprintTableComponent } from './sprint-table/sprint-table.component'; -import { DashboardComponent } from './dashboard/dashboard.component'; -import { UserstoryInnerTableComponent } from './userstory-inner-table/userstory-inner-table.component'; -import { BacklogComponent } from './backlog-table/backlog.component'; +import { UserstoryTableComponent } from './components/userstory-table/userstory-table.component'; +import { TaskTableComponent } from './components/task-table/task-table.component'; +import { SprintTableComponent } from './components/sprint-table/sprint-table.component'; +import { DashboardComponent } from './components/dashboard/dashboard.component'; +import { UserstoryInnerTableComponent } from './components/userstory-inner-table/userstory-inner-table.component'; +import { BacklogComponent } from './components/backlog-table/backlog.component'; @NgModule({ declarations: [ diff --git a/src/app/backlog-table/backlog.component.css b/src/app/components/backlog-table/backlog.component.css similarity index 96% rename from src/app/backlog-table/backlog.component.css rename to src/app/components/backlog-table/backlog.component.css index 7fd1803..a268ac9 100644 --- a/src/app/backlog-table/backlog.component.css +++ b/src/app/components/backlog-table/backlog.component.css @@ -1,3 +1,3 @@ -th.sortable:hover { - text-decoration: underline; +th.sortable:hover { + text-decoration: underline; } \ No newline at end of file diff --git a/src/app/backlog-table/backlog.component.html b/src/app/components/backlog-table/backlog.component.html similarity index 97% rename from src/app/backlog-table/backlog.component.html rename to src/app/components/backlog-table/backlog.component.html index f64ab58..b0295e3 100644 --- a/src/app/backlog-table/backlog.component.html +++ b/src/app/components/backlog-table/backlog.component.html @@ -1,62 +1,62 @@ -
-
- -

Backlog

-
-
-
-
- -
-
-
-
-

Backlog

-
-
-
-

{{story.title}}

-
Prio: {{story.priority}}
-

{{story.content}}

-
- Category: {{story.categoryid || "N/A"}} - Status: {{story.statusid || "N/A"}} -
-
- -
-
-
-
-
-
- -
- -

Sprint-Backlog - Aktueller Sprint: {{this.currentSprint.title}}

-
-
-
-

{{story.title}}

-
Prio: {{story.priority}}
-

{{story.content}}

-
- Category: {{story.categoryid || "N/A"}} - Status: {{story.statusid || "N/A"}} -
-
- -
-
-
-
-
-
-
-
+
+
+ +

Backlog

+
+
+
+
+ +
+
+
+
+

Backlog

+
+
+
+

{{story.title}}

+
Prio: {{story.priority}}
+

{{story.content}}

+
+ Category: {{story.categoryid || "N/A"}} + Status: {{story.statusid || "N/A"}} +
+
+ +
+
+
+
+
+
+ +
+ +

Sprint-Backlog - Aktueller Sprint: {{this.currentSprint.title}}

+
+
+
+

{{story.title}}

+
Prio: {{story.priority}}
+

{{story.content}}

+
+ Category: {{story.categoryid || "N/A"}} + Status: {{story.statusid || "N/A"}} +
+
+ +
+
+
+
+
+
+
+
diff --git a/src/app/backlog-table/backlog.component.ts b/src/app/components/backlog-table/backlog.component.ts similarity index 92% rename from src/app/backlog-table/backlog.component.ts rename to src/app/components/backlog-table/backlog.component.ts index a99e19a..f67c1fb 100644 --- a/src/app/backlog-table/backlog.component.ts +++ b/src/app/components/backlog-table/backlog.component.ts @@ -1,160 +1,160 @@ -import { Component } from '@angular/core'; -import { - BackendService, - ScrumTask, - ScrumUserstory, - ScrumStatus, - ScrumCategory, - ScrumSprint, -} from '../services/backend.service'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { TableComponentBase } from '../services/table-component.base'; -import { getNumberForPriority } from '../services/sorting.service'; -import { UserstoryFormComponent } from '../userstory-form/userstory-form.component'; -import { ActivatedRoute } from '@angular/router'; -import { SprintFormComponent } from '../sprint-form/sprint-form.component'; - - -@Component({ - selector: 'app-backlog', - templateUrl: './backlog.component.html', - styleUrls: ['./backlog.component.css'], -}) -export class BacklogComponent extends TableComponentBase< - ScrumUserstory -> { - public tasks: ScrumTask[] = []; - public filterPriority: string | null = null; - public status: ScrumStatus[] = []; - public categories: ScrumCategory[] = []; - public sprints: ScrumSprint[] = []; - - public backlog: ScrumUserstory[] = []; - public choosen: ScrumUserstory[] = []; - - constructor( - private backendService: BackendService, - private modalService: NgbModal, - private route: ActivatedRoute, - ) { - super(); - backendService.getSprints().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.sprints.push(...response.body); - } - }); - backendService.getUserstories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.backlog = response.body.filter(u => u.sprintid == null); - this.choosen = response.body.filter(u => u.sprintid == this.currentSprint.id); - } - }); - backendService.getTasks().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.tasks.push(...response.body); - } - }); - backendService.getAllStatus().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.status.push(...response.body); - } - }); - backendService.getCategories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.categories.push(...response.body); - } - }); - } - - public deleteUserstory(userstory: ScrumUserstory) { - this.backendService.deleteUserstory(userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - const index = this.items.indexOf(userstory); - if (index !== -1) { - this.items.splice(index, 1); - } - } - - public openUserstoryForm(editUserstory?: ScrumUserstory) { - const modalRef = this.modalService.open(UserstoryFormComponent, { - backdrop: 'static', - keyboard: true, - size: 'lg' - }); - if (editUserstory === null) { - modalRef.result.then((result) => { - this.items.push(result); - }); - } - modalRef.componentInstance.userstory = editUserstory; - } - - public getNumberOfTasks(userstory: ScrumUserstory) { - return this.tasks.filter((t) => t.userstoryid === userstory.id).length; - } - - getCategoryTitleById(id) { - var category = this.categories.find((x) => x.id === id); - if (!category) { - return 'N/A'; - } - return category.title; - } - - // Sprint-Backlog - - public addToSprintBacklog(userstory: ScrumUserstory) { - this.choosen.push(userstory); - const index = this.backlog.indexOf(userstory); - this.backlog.splice(index, 1); - userstory.sprintid = this.currentSprint.id; - this.backendService.putUserstory(userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } - - public deleteFromSprintBacklog(userstory: ScrumUserstory){ - const index = this.choosen.indexOf(userstory); - this.choosen.splice(index, 1); - this.backlog.push(userstory) - userstory.sprintid = null; - this.backendService.putUserstory(userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } - - public get currentSprint(): ScrumSprint { - const now = Date.now(); - return this.sprints.find(s => Date.parse(s.startDate) < now && Date.parse(s.endDate) > now); - } - - public openSprintForm(editSprint?: ScrumSprint) { - const modalRef = this.modalService.open(SprintFormComponent, { - backdrop: 'static', - keyboard: true, - }); - if (editSprint === null) { - modalRef.result.then(result => { - this.items.push(result); - }); - } - modalRef.componentInstance.sprint = editSprint; - } -} +import { Component } from '@angular/core'; +import { + BackendService, + ScrumTask, + ScrumUserstory, + ScrumStatus, + ScrumCategory, + ScrumSprint, +} from '../../services/backend.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { TableComponentBase } from '../../services/table-component.base'; +import { getNumberForPriority } from '../../services/sorting.service'; +import { UserstoryFormComponent } from '../userstory-form/userstory-form.component'; +import { ActivatedRoute } from '@angular/router'; +import { SprintFormComponent } from '../sprint-form/sprint-form.component'; + + +@Component({ + selector: 'app-backlog', + templateUrl: './backlog.component.html', + styleUrls: ['./backlog.component.css'], +}) +export class BacklogComponent extends TableComponentBase< + ScrumUserstory +> { + public tasks: ScrumTask[] = []; + public filterPriority: string | null = null; + public status: ScrumStatus[] = []; + public categories: ScrumCategory[] = []; + public sprints: ScrumSprint[] = []; + + public backlog: ScrumUserstory[] = []; + public choosen: ScrumUserstory[] = []; + + constructor( + private backendService: BackendService, + private modalService: NgbModal, + private route: ActivatedRoute, + ) { + super(); + backendService.getSprints().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.sprints.push(...response.body); + } + }); + backendService.getUserstories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.backlog = response.body.filter(u => u.sprintid == null); + this.choosen = response.body.filter(u => u.sprintid == this.currentSprint.id); + } + }); + backendService.getTasks().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.tasks.push(...response.body); + } + }); + backendService.getAllStatus().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.status.push(...response.body); + } + }); + backendService.getCategories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.categories.push(...response.body); + } + }); + } + + public deleteUserstory(userstory: ScrumUserstory) { + this.backendService.deleteUserstory(userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + const index = this.items.indexOf(userstory); + if (index !== -1) { + this.items.splice(index, 1); + } + } + + public openUserstoryForm(editUserstory?: ScrumUserstory) { + const modalRef = this.modalService.open(UserstoryFormComponent, { + backdrop: 'static', + keyboard: true, + size: 'lg' + }); + if (editUserstory === null) { + modalRef.result.then((result) => { + this.items.push(result); + }); + } + modalRef.componentInstance.userstory = editUserstory; + } + + public getNumberOfTasks(userstory: ScrumUserstory) { + return this.tasks.filter((t) => t.userstoryid === userstory.id).length; + } + + getCategoryTitleById(id) { + var category = this.categories.find((x) => x.id === id); + if (!category) { + return 'N/A'; + } + return category.title; + } + + // Sprint-Backlog + + public addToSprintBacklog(userstory: ScrumUserstory) { + this.choosen.push(userstory); + const index = this.backlog.indexOf(userstory); + this.backlog.splice(index, 1); + userstory.sprintid = this.currentSprint.id; + this.backendService.putUserstory(userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + + public deleteFromSprintBacklog(userstory: ScrumUserstory){ + const index = this.choosen.indexOf(userstory); + this.choosen.splice(index, 1); + this.backlog.push(userstory) + userstory.sprintid = null; + this.backendService.putUserstory(userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + + public get currentSprint(): ScrumSprint { + const now = Date.now(); + return this.sprints.find(s => Date.parse(s.startDate) < now && Date.parse(s.endDate) > now); + } + + public openSprintForm(editSprint?: ScrumSprint) { + const modalRef = this.modalService.open(SprintFormComponent, { + backdrop: 'static', + keyboard: true, + }); + if (editSprint === null) { + modalRef.result.then(result => { + this.items.push(result); + }); + } + modalRef.componentInstance.sprint = editSprint; + } +} diff --git a/src/app/dashboard/dashboard.component.css b/src/app/components/dashboard/dashboard.component.css similarity index 91% rename from src/app/dashboard/dashboard.component.css rename to src/app/components/dashboard/dashboard.component.css index e67ab28..8b09ad4 100644 --- a/src/app/dashboard/dashboard.component.css +++ b/src/app/components/dashboard/dashboard.component.css @@ -1,7 +1,7 @@ -.text-large { - font-size: 1.2rem; -} - -.text-very-large { - font-size: 2.4rem; -} +.text-large { + font-size: 1.2rem; +} + +.text-very-large { + font-size: 2.4rem; +} diff --git a/src/app/dashboard/dashboard.component.html b/src/app/components/dashboard/dashboard.component.html similarity index 97% rename from src/app/dashboard/dashboard.component.html rename to src/app/components/dashboard/dashboard.component.html index 471a142..66fd4e4 100644 --- a/src/app/dashboard/dashboard.component.html +++ b/src/app/components/dashboard/dashboard.component.html @@ -1,101 +1,101 @@ -
-
- -

Dashboard

- -
- -
- - -

Alle Userstories

- Lege einen Sprint an, um Userstories zu organisieren. -
- - - -

Aktueller Sprint:

-

Sprint:

-

{{selectedSprint.title}}

-

{{toDateString(selectedSprint.startDate)}} - {{toDateString(selectedSprint.endDate)}}

- - - - -

- Verbleibende Tage: {{getRemainingDaysInSprint()}} -

- -
- -
- -
- -
-
-
- - Userstories - -
-
-
- Zum Sprint "{{selectedSprint.title}}" sind aktuell keine Userstories vorhanden. -
- -
-
-
-
-
- - {{status.title}} - -
-
- - {{getNumberOfUserstoriesByStatus(status)}} - -
-
-
-
- -
-
-
- -
-
-
- -
- -
-
-
+
+
+ +

Dashboard

+ +
+ +
+ + +

Alle Userstories

+ Lege einen Sprint an, um Userstories zu organisieren. +
+ + + +

Aktueller Sprint:

+

Sprint:

+

{{selectedSprint.title}}

+

{{toDateString(selectedSprint.startDate)}} - {{toDateString(selectedSprint.endDate)}}

+ + + + +

+ Verbleibende Tage: {{getRemainingDaysInSprint()}} +

+ +
+ +
+ +
+ +
+
+
+ + Userstories + +
+
+
+ Zum Sprint "{{selectedSprint.title}}" sind aktuell keine Userstories vorhanden. +
+ +
+
+
+
+
+ + {{status.title}} + +
+
+ + {{getNumberOfUserstoriesByStatus(status)}} + +
+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+
diff --git a/src/app/dashboard/dashboard.component.ts b/src/app/components/dashboard/dashboard.component.ts similarity index 99% rename from src/app/dashboard/dashboard.component.ts rename to src/app/components/dashboard/dashboard.component.ts index 2ea774d..b47f895 100644 --- a/src/app/dashboard/dashboard.component.ts +++ b/src/app/components/dashboard/dashboard.component.ts @@ -1,7 +1,7 @@ import {Component, OnChanges} from '@angular/core'; import {forkJoin} from 'rxjs'; import Chart from 'chart.js'; -import {BackendService, ScrumSprint, ScrumStatus, ScrumUserstory} from '../services/backend.service'; +import {BackendService, ScrumSprint, ScrumStatus, ScrumUserstory} from '../../services/backend.service'; @Component({ selector: 'app-dashboard', diff --git a/src/app/sprint-form/sprint-form.component.css b/src/app/components/sprint-form/sprint-form.component.css similarity index 100% rename from src/app/sprint-form/sprint-form.component.css rename to src/app/components/sprint-form/sprint-form.component.css diff --git a/src/app/sprint-form/sprint-form.component.html b/src/app/components/sprint-form/sprint-form.component.html similarity index 97% rename from src/app/sprint-form/sprint-form.component.html rename to src/app/components/sprint-form/sprint-form.component.html index fe3fb87..fcb9fa8 100644 --- a/src/app/sprint-form/sprint-form.component.html +++ b/src/app/components/sprint-form/sprint-form.component.html @@ -1,35 +1,35 @@ - - -
-
-
-
- -
-

Neuen Sprint anlegen

-
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
+ + +
+
+
+
+ +
+

Neuen Sprint anlegen

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
\ No newline at end of file diff --git a/src/app/sprint-form/sprint-form.component.ts b/src/app/components/sprint-form/sprint-form.component.ts similarity index 91% rename from src/app/sprint-form/sprint-form.component.ts rename to src/app/components/sprint-form/sprint-form.component.ts index ad55a0f..bac0d22 100644 --- a/src/app/sprint-form/sprint-form.component.ts +++ b/src/app/components/sprint-form/sprint-form.component.ts @@ -1,60 +1,60 @@ -// Importing necessary components and interfaces. -import { Component, OnInit, Input } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { - BackendService, - ScrumSprint -} from '../services/backend.service'; - -@Component({ - selector: 'app-task-form', - templateUrl: './sprint-form.component.html', - styleUrls: ['./sprint-form.component.css'] -}) - -// Class implements the logic for a popup window form to create and modify sprints. -export class SprintFormComponent implements OnInit { - @Input() public sprint: ScrumSprint; - public editing: Boolean; - public sprintid: string; - - constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { } - - // If no sprint exists a new one will be created. - // In other cases the sprint exists and gets modifiable. - ngOnInit(): void { - if (this.sprint === null || this.sprint === undefined) { - this.sprint = { title: '', startDate: '', endDate: '' }; - this.editing = false; - } else { - this.editing = true; - } - document.getElementById('titleField').focus(); - } - - // A new created sprint will be saved in backend (POST). - // If a sprint already exists, modifying results an update (PUT) to the backend. - onSubmit() { - if (this.editing) { - this.backendService.putSprint(this.sprint).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } else { - this.backendService.postSprint(this.sprint).subscribe((response) => { - console.log('Sprint gespeichert!'); - if (response.status > 399) { - alert('Fehler'); - } - }); - } - // Closes the popup window after submitting/canceling. - this.activeModalService.close(this.sprint); - } - - // Closes the popup form window (by clicking "close button"). - onClose() { - this.activeModalService.dismiss(this.sprint); - } -} \ No newline at end of file +// Importing necessary components and interfaces. +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { + BackendService, + ScrumSprint +} from '../../services/backend.service'; + +@Component({ + selector: 'app-task-form', + templateUrl: './sprint-form.component.html', + styleUrls: ['./sprint-form.component.css'] +}) + +// Class implements the logic for a popup window form to create and modify sprints. +export class SprintFormComponent implements OnInit { + @Input() public sprint: ScrumSprint; + public editing: Boolean; + public sprintid: string; + + constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { } + + // If no sprint exists a new one will be created. + // In other cases the sprint exists and gets modifiable. + ngOnInit(): void { + if (this.sprint === null || this.sprint === undefined) { + this.sprint = { title: '', startDate: '', endDate: '' }; + this.editing = false; + } else { + this.editing = true; + } + document.getElementById('titleField').focus(); + } + + // A new created sprint will be saved in backend (POST). + // If a sprint already exists, modifying results an update (PUT) to the backend. + onSubmit() { + if (this.editing) { + this.backendService.putSprint(this.sprint).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } else { + this.backendService.postSprint(this.sprint).subscribe((response) => { + console.log('Sprint gespeichert!'); + if (response.status > 399) { + alert('Fehler'); + } + }); + } + // Closes the popup window after submitting/canceling. + this.activeModalService.close(this.sprint); + } + + // Closes the popup form window (by clicking "close button"). + onClose() { + this.activeModalService.dismiss(this.sprint); + } +} diff --git a/src/app/sprint-table/sprint-table.component.css b/src/app/components/sprint-table/sprint-table.component.css similarity index 100% rename from src/app/sprint-table/sprint-table.component.css rename to src/app/components/sprint-table/sprint-table.component.css diff --git a/src/app/sprint-table/sprint-table.component.html b/src/app/components/sprint-table/sprint-table.component.html similarity index 97% rename from src/app/sprint-table/sprint-table.component.html rename to src/app/components/sprint-table/sprint-table.component.html index 04c3d79..251698b 100644 --- a/src/app/sprint-table/sprint-table.component.html +++ b/src/app/components/sprint-table/sprint-table.component.html @@ -1,66 +1,66 @@ -
-
-

- Sprints -

- - - - - - - - - - - - - - - - - - - - - - - -
- ID - - - - - - - Titel - - - - - - - Start - - - - - - - End - - - - - -
{{sprint.id}}{{sprint.title}}{{sprint.startDate | date:'dd.MM.yyyy'}}{{sprint.endDate | date:'dd.MM.yyyy'}} - - -
-
-
+
+
+

+ Sprints +

+ + + + + + + + + + + + + + + + + + + + + + + +
+ ID + + + + + + + Titel + + + + + + + Start + + + + + + + End + + + + + +
{{sprint.id}}{{sprint.title}}{{sprint.startDate | date:'dd.MM.yyyy'}}{{sprint.endDate | date:'dd.MM.yyyy'}} + + +
+
+
diff --git a/src/app/sprint-table/sprint-table.component.ts b/src/app/components/sprint-table/sprint-table.component.ts similarity index 90% rename from src/app/sprint-table/sprint-table.component.ts rename to src/app/components/sprint-table/sprint-table.component.ts index eb646cb..3d18bc7 100644 --- a/src/app/sprint-table/sprint-table.component.ts +++ b/src/app/components/sprint-table/sprint-table.component.ts @@ -1,87 +1,87 @@ -import {Component} from '@angular/core'; -import {BackendService, ScrumSprint} from '../services/backend.service'; -import {TableComponentBase} from '../services/table-component.base'; -import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; -import {ActivatedRoute, ParamMap, Router} from '@angular/router'; -import { SprintFormComponent } from '../sprint-form/sprint-form.component'; - -@Component({ - selector: 'app-sprint', - templateUrl: './sprint-table.component.html', - styleUrls: ['./sprint-table.component.css'] -}) -export class SprintTableComponent extends TableComponentBase { - public filterSprintId: number | null = null; - public highlightId: number; - - public get filteredItems() { - return this.items.filter(sprint => - (this.filterSprintId === null || sprint.id === this.filterSprintId) - ); - } - - constructor( - private backendService: BackendService, private modalService: NgbModal, - private route: ActivatedRoute, private router: Router - ) { - super(); - - this.applyFilterParameters(route.snapshot.paramMap); - route.paramMap.subscribe(map => this.applyFilterParameters(map)); - - backendService.getSprints().subscribe(response => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.items.push(...response.body); - } - }); - } - - private applyFilterParameters(params: ParamMap) { - if (params.has('id')) { - this.highlightId = parseInt(params.get('id')); - } - } - - public deleteSprint(sprint: ScrumSprint) { - this.backendService.deleteSprint(sprint).subscribe(response => { - if (response.status > 399) { - alert('Fehler'); - } - }); - const index = this.items.indexOf(sprint); - if (index !== -1) { - this.items.splice(index, 1); - } - } - - public openSprintForm(editSprint?: ScrumSprint) { - const modalRef = this.modalService.open(SprintFormComponent, { - backdrop: 'static', - keyboard: true, - }); - if (editSprint === null) { - modalRef.result.then(result => { - this.items.push(result); - }); - } - modalRef.componentInstance.sprint = editSprint; - } - - sortById() { - this.doNumericSort('id', sprint => sprint.id); - } - - sortByTitle() { - this.doStringSort('title', sprint => sprint.title); - } - - sortByStartDate() { - this.doStringSort('startDate', sprint => sprint.startDate); - } - - sortByEndDate() { - this.doStringSort('endDate', sprint => sprint.endDate); - } -} +import {Component} from '@angular/core'; +import {BackendService, ScrumSprint} from '../../services/backend.service'; +import {TableComponentBase} from '../../services/table-component.base'; +import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; +import {ActivatedRoute, ParamMap, Router} from '@angular/router'; +import { SprintFormComponent } from '../sprint-form/sprint-form.component'; + +@Component({ + selector: 'app-sprint', + templateUrl: './sprint-table.component.html', + styleUrls: ['./sprint-table.component.css'] +}) +export class SprintTableComponent extends TableComponentBase { + public filterSprintId: number | null = null; + public highlightId: number; + + public get filteredItems() { + return this.items.filter(sprint => + (this.filterSprintId === null || sprint.id === this.filterSprintId) + ); + } + + constructor( + private backendService: BackendService, private modalService: NgbModal, + private route: ActivatedRoute, private router: Router + ) { + super(); + + this.applyFilterParameters(route.snapshot.paramMap); + route.paramMap.subscribe(map => this.applyFilterParameters(map)); + + backendService.getSprints().subscribe(response => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.items.push(...response.body); + } + }); + } + + private applyFilterParameters(params: ParamMap) { + if (params.has('id')) { + this.highlightId = parseInt(params.get('id')); + } + } + + public deleteSprint(sprint: ScrumSprint) { + this.backendService.deleteSprint(sprint).subscribe(response => { + if (response.status > 399) { + alert('Fehler'); + } + }); + const index = this.items.indexOf(sprint); + if (index !== -1) { + this.items.splice(index, 1); + } + } + + public openSprintForm(editSprint?: ScrumSprint) { + const modalRef = this.modalService.open(SprintFormComponent, { + backdrop: 'static', + keyboard: true, + }); + if (editSprint === null) { + modalRef.result.then(result => { + this.items.push(result); + }); + } + modalRef.componentInstance.sprint = editSprint; + } + + sortById() { + this.doNumericSort('id', sprint => sprint.id); + } + + sortByTitle() { + this.doStringSort('title', sprint => sprint.title); + } + + sortByStartDate() { + this.doStringSort('startDate', sprint => sprint.startDate); + } + + sortByEndDate() { + this.doStringSort('endDate', sprint => sprint.endDate); + } +} diff --git a/src/app/task-form/task-form.component.css b/src/app/components/task-form/task-form.component.css similarity index 100% rename from src/app/task-form/task-form.component.css rename to src/app/components/task-form/task-form.component.css diff --git a/src/app/task-form/task-form.component.html b/src/app/components/task-form/task-form.component.html similarity index 100% rename from src/app/task-form/task-form.component.html rename to src/app/components/task-form/task-form.component.html diff --git a/src/app/task-form/task-form.component.spec.ts b/src/app/components/task-form/task-form.component.spec.ts similarity index 100% rename from src/app/task-form/task-form.component.spec.ts rename to src/app/components/task-form/task-form.component.spec.ts diff --git a/src/app/task-form/task-form.component.ts b/src/app/components/task-form/task-form.component.ts similarity index 95% rename from src/app/task-form/task-form.component.ts rename to src/app/components/task-form/task-form.component.ts index d7cf7b9..8da2775 100644 --- a/src/app/task-form/task-form.component.ts +++ b/src/app/components/task-form/task-form.component.ts @@ -1,200 +1,200 @@ -// Importing necessary components and interfaces. -import { Component, OnInit, Input } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { - BackendService, - ScrumTask, - Priority, - ScrumStatus, - ScrumCategory, - ScrumUser, - ScrumProject, - ScrumUserstory -} from '../services/backend.service'; -import { Observable } from 'rxjs'; -import { HttpResponse } from '@angular/common/http'; - -@Component({ - selector: 'app-task-form', - templateUrl: './task-form.component.html', - styleUrls: ['./task-form.component.css'] -}) - -// Class implements the logic for a popup window form to create and modify tasks. -export class TaskFormComponent implements OnInit { - @Input() public task: ScrumTask; - public editing: boolean; - public creating: boolean; - public userstoryId: string; - public userstories: any[] = []; - public allStatus: any[] = []; - public status: ScrumStatus = { title: "", description: "" }; - public allUser: any[] = []; - public user: ScrumUser = { name: "" }; - - constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { - this.getUserStories(); - this.getTaskStatus(); - this.getAllUsers(); - } - - // If no task exists a new one will be created. - // In other cases the task exists and gets modifiable. - ngOnInit(): void { - if (this.task === null || this.task === undefined) { - this.task = { title: '' }; - this.editing = false; - this.creating = false; - } else if (this.task.userstoryid) { - this.editing = true; - } else { - this.creating = true; - } - document.getElementById('titleField').focus(); - this.getRelatedStory(); - } - // A new created task will be saved in backend (POST). - // If a task already exists, modifying results an update (PUT) to the backend. - onSubmit() { - if (this.editing) { - this.backendService.putTask(this.task).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } else { - this.backendService.postTask(this.task).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } - // Closes the popup window after submitting/canceling. - this.activeModalService.close(this.task); - } - - // Closes the popup form window (by clicking "close button"). - onClose() { - this.activeModalService.dismiss(this.task); - } - - // Getting the userstory which is related to a task. - // The related story will be shown in popup window of a task. - getRelatedStory() { - if (!this.task.userstoryid) { - return null; - } - this.backendService.getUserstory(this.task.userstoryid).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.userstoryId = response.body.title; - } - }); - } - - // Getting all userstories from backend to show in a dropdown in popup window. - getUserStories() { - this.backendService.getUserstories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.userstories.push(...response.body); - } - }); - } - - // Getting all available status from backend to list it in status-dropdown in popup window. - getTaskStatus() { - this.backendService.getAllStatus().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allStatus.push(...response.body); - } - }); - } - - // If desired a new arbitrary status (such as "Waiting") can be created, which will be stored in an array. - // The new status is available to all tasks. - createTaskStatus(status: ScrumStatus) { - this.backendService.postStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - this.allStatus.push(response.body); - } - }); - } - - // A custom status can even be deleted if not used anymore. - // This will remove the status from status-array. - deleteStatus(id: number) { - var status = this.allStatus.find((x) => x.id === id); - this.backendService.deleteStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - const index = this.allStatus.indexOf(status); - if (index !== -1) { - this.allStatus.splice(index, 1); - } - } - this.task.statusid = null; - }); - } - - // Getting the values of the Priority enum to be shown in a dropdown in popup window. - getAllPriorities(): Priority[] { - return Object.values(Priority); - } - - // necessary????????????????????????????????????????????????????? - getUserstoryTitleById(id: number): string { - if (!id) { - return null; - } - var story = this.userstories.find((x) => x.id === id); - if (!story) { - return null; - } - return story.title; - } - - // Shows the before choosen status in the status-field in the popup window. - getStatusTitleById(id: number): string { - if (!id) { - return null; - } - var status = this.allStatus.find((x) => x.id === id); - if (!status) { - return null; - } - return status.title; - } - - // Getting all taskboard users from backend to show in a dropdown in popup window. - getAllUsers() { - this.backendService.getUsers().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allUser.push(...response.body); - } - }); - } - - // Shows the before assigned user in the author-field in the popup window. - getAuthorById(id: number): string { - if (!id) { - return null; - } - var user = this.allUser.find((x) => x.id === id); - if (!user) { - return null; - } - return user.name; - } -} \ No newline at end of file +// Importing necessary components and interfaces. +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { + BackendService, + ScrumTask, + Priority, + ScrumStatus, + ScrumCategory, + ScrumUser, + ScrumProject, + ScrumUserstory +} from '../../services/backend.service'; +import { Observable } from 'rxjs'; +import { HttpResponse } from '@angular/common/http'; + +@Component({ + selector: 'app-task-form', + templateUrl: './task-form.component.html', + styleUrls: ['./task-form.component.css'] +}) + +// Class implements the logic for a popup window form to create and modify tasks. +export class TaskFormComponent implements OnInit { + @Input() public task: ScrumTask; + public editing: boolean; + public creating: boolean; + public userstoryId: string; + public userstories: any[] = []; + public allStatus: any[] = []; + public status: ScrumStatus = { title: "", description: "" }; + public allUser: any[] = []; + public user: ScrumUser = { name: "" }; + + constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { + this.getUserStories(); + this.getTaskStatus(); + this.getAllUsers(); + } + + // If no task exists a new one will be created. + // In other cases the task exists and gets modifiable. + ngOnInit(): void { + if (this.task === null || this.task === undefined) { + this.task = { title: '' }; + this.editing = false; + this.creating = false; + } else if (this.task.userstoryid) { + this.editing = true; + } else { + this.creating = true; + } + document.getElementById('titleField').focus(); + this.getRelatedStory(); + } + // A new created task will be saved in backend (POST). + // If a task already exists, modifying results an update (PUT) to the backend. + onSubmit() { + if (this.editing) { + this.backendService.putTask(this.task).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } else { + this.backendService.postTask(this.task).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + // Closes the popup window after submitting/canceling. + this.activeModalService.close(this.task); + } + + // Closes the popup form window (by clicking "close button"). + onClose() { + this.activeModalService.dismiss(this.task); + } + + // Getting the userstory which is related to a task. + // The related story will be shown in popup window of a task. + getRelatedStory() { + if (!this.task.userstoryid) { + return null; + } + this.backendService.getUserstory(this.task.userstoryid).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.userstoryId = response.body.title; + } + }); + } + + // Getting all userstories from backend to show in a dropdown in popup window. + getUserStories() { + this.backendService.getUserstories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.userstories.push(...response.body); + } + }); + } + + // Getting all available status from backend to list it in status-dropdown in popup window. + getTaskStatus() { + this.backendService.getAllStatus().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allStatus.push(...response.body); + } + }); + } + + // If desired a new arbitrary status (such as "Waiting") can be created, which will be stored in an array. + // The new status is available to all tasks. + createTaskStatus(status: ScrumStatus) { + this.backendService.postStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + this.allStatus.push(response.body); + } + }); + } + + // A custom status can even be deleted if not used anymore. + // This will remove the status from status-array. + deleteStatus(id: number) { + var status = this.allStatus.find((x) => x.id === id); + this.backendService.deleteStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + const index = this.allStatus.indexOf(status); + if (index !== -1) { + this.allStatus.splice(index, 1); + } + } + this.task.statusid = null; + }); + } + + // Getting the values of the Priority enum to be shown in a dropdown in popup window. + getAllPriorities(): Priority[] { + return Object.values(Priority); + } + + // necessary????????????????????????????????????????????????????? + getUserstoryTitleById(id: number): string { + if (!id) { + return null; + } + var story = this.userstories.find((x) => x.id === id); + if (!story) { + return null; + } + return story.title; + } + + // Shows the before choosen status in the status-field in the popup window. + getStatusTitleById(id: number): string { + if (!id) { + return null; + } + var status = this.allStatus.find((x) => x.id === id); + if (!status) { + return null; + } + return status.title; + } + + // Getting all taskboard users from backend to show in a dropdown in popup window. + getAllUsers() { + this.backendService.getUsers().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allUser.push(...response.body); + } + }); + } + + // Shows the before assigned user in the author-field in the popup window. + getAuthorById(id: number): string { + if (!id) { + return null; + } + var user = this.allUser.find((x) => x.id === id); + if (!user) { + return null; + } + return user.name; + } +} diff --git a/src/app/task-table/task-table.component.css b/src/app/components/task-table/task-table.component.css similarity index 100% rename from src/app/task-table/task-table.component.css rename to src/app/components/task-table/task-table.component.css diff --git a/src/app/task-table/task-table.component.html b/src/app/components/task-table/task-table.component.html similarity index 100% rename from src/app/task-table/task-table.component.html rename to src/app/components/task-table/task-table.component.html diff --git a/src/app/task-table/task-table.component.ts b/src/app/components/task-table/task-table.component.ts similarity index 95% rename from src/app/task-table/task-table.component.ts rename to src/app/components/task-table/task-table.component.ts index 44299d5..a5559d2 100644 --- a/src/app/task-table/task-table.component.ts +++ b/src/app/components/task-table/task-table.component.ts @@ -5,12 +5,12 @@ import { ScrumStatus, ScrumUser, ScrumCategory, -} from '../services/backend.service'; +} from '../../services/backend.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TaskFormComponent } from '../task-form/task-form.component'; -import { TableComponentBase } from '../services/table-component.base'; +import { TableComponentBase } from '../../services/table-component.base'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { getNumberForPriority } from '../services/sorting.service'; +import { getNumberForPriority } from '../../services/sorting.service'; import { NONE_TYPE } from '@angular/compiler'; @Component({ diff --git a/src/app/userstory-form/userstory-form.component.css b/src/app/components/userstory-form/userstory-form.component.css similarity index 100% rename from src/app/userstory-form/userstory-form.component.css rename to src/app/components/userstory-form/userstory-form.component.css diff --git a/src/app/userstory-form/userstory-form.component.html b/src/app/components/userstory-form/userstory-form.component.html similarity index 98% rename from src/app/userstory-form/userstory-form.component.html rename to src/app/components/userstory-form/userstory-form.component.html index b0fb258..0acc5bb 100644 --- a/src/app/userstory-form/userstory-form.component.html +++ b/src/app/components/userstory-form/userstory-form.component.html @@ -1,140 +1,140 @@ - - -
-
-
-
- -
-
-
-

Neue Userstory anlegen

-
-
-
-
-
-
-
- - -
-
- - -
-
-
- -
- - -
-
- - -
-
- - -
-
-
-
-
- - -
-
-
-
-
+ + +
+
+
+
+ +
+
+
+

Neue Userstory anlegen

+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+
\ No newline at end of file diff --git a/src/app/userstory-form/userstory-form.component.ts b/src/app/components/userstory-form/userstory-form.component.ts similarity index 94% rename from src/app/userstory-form/userstory-form.component.ts rename to src/app/components/userstory-form/userstory-form.component.ts index 023ba0c..9838fe7 100644 --- a/src/app/userstory-form/userstory-form.component.ts +++ b/src/app/components/userstory-form/userstory-form.component.ts @@ -1,207 +1,207 @@ -// Importing necessary components and interfaces. -import { Component, OnInit, Input } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { BackendService, ScrumUserstory, Priority } from '../services/backend.service'; -import { - ScrumTask, - ScrumStatus, - ScrumCategory, - ScrumUser, - ScrumProject, -} from '../services/backend.service'; - -@Component({ - selector: 'app-userstory-form', - templateUrl: './userstory-form.component.html', - styleUrls: ['./userstory-form.component.css'] -}) - -// Class implements the logic for a popup window form to create and modify userstories. -export class UserstoryFormComponent implements OnInit { - @Input() public userstory: ScrumUserstory; - public allStatus: any[] = []; - public status: ScrumStatus = { title: "", description: "" }; - public allUser: any[] = []; - public user: ScrumUser = { name: "" }; - public allCategories: any[] = []; - public category: ScrumCategory = { title: "" }; - private editing: boolean; - - constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { - this.getUserstoryStatus(); - this.getAllUsers(); - this.getUserstoryCategory(); - } - - // If no userstory exists a new one will be created. - // In other cases the userstory exists and gets modifiable. - ngOnInit(): void { - if (this.userstory === null || this.userstory === undefined) { - this.userstory = { title: '' }; - this.editing = false; - } else { - this.editing = true; - } - document.getElementById('titleField').focus(); - } - - // A new created userstory will be saved in backend (POST). - // If a userstory already exists, modifying results an update (PUT) to the backend. - onSubmit() { - if (this.editing) { - this.backendService.putUserstory(this.userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } else { - this.backendService.postUserstory(this.userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } - // Closes the popup window after submitting/canceling. - this.activeModalService.close(this.userstory); - } - - // Closes the popup form window (by clicking "close button"). - onClose() { - this.activeModalService.dismiss(this.userstory); - } - - // Getting all available status from backend to list it in status-dropdown in popup window. - getUserstoryStatus() { - this.backendService.getAllStatus().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allStatus.push(...response.body); - } - }); - } - - // If desired a new arbitrary status (such as "Waiting") can be created, which will be stored in an array. - // The new status is available to all userstories. - createUserstoryStatus(status: ScrumStatus) { - this.backendService.postStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - this.allStatus.push(response.body); - } - }); - } - - // A custom status can even be deleted if not used anymore. - // This will remove the status from status-array. - deleteStatus(id: number) { - var status = this.allStatus.find((x) => x.id === id); - this.backendService.deleteStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - const index = this.allStatus.indexOf(status); - if (index !== -1) { - this.allStatus.splice(index, 1); - } - } - this.userstory.statusid = null; - }); - } - - // Getting the values of the Priority enum to be shown in a dropdown in popup window. - getAllPriorities(): Priority[] { - return Object.values(Priority); - } - - // Shows the before choosen status in the status-field in the popup window. - getStatusTitleById(id: number): string { - if (!id) { - return null; - } - var status = this.allStatus.find((x) => x.id === id); - if (!status) { - return null; - } - return status.title; - } - - // Getting all taskboard users from backend to show in a dropdown in popup window. - getAllUsers() { - this.backendService.getUsers().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allUser.push(...response.body); - } - }); - } - - // Shows the before assigned user in the author-field in the popup window. - getAuthorById(id: number): string { - if (!id) { - return null; - } - var user = this.allUser.find((x) => x.id === id); - if (!user) { - return null; - } - return user.name; - } - - // Getting all available categories from backend to list it in status-dropdown in popup window. - getUserstoryCategory() { - this.backendService.getCategories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allCategories.push(...response.body); - } - }); - } - - // If desired a new arbitrary category can be created, which will be stored in an array. - // The new category is available to all userstories. - createUserstoryCategory(category: ScrumCategory) { - this.backendService.postCategory(category).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - this.allCategories.push(response.body); - } - }); - } - - // A custom category can even be deleted if not used anymore. - // This will remove the category from category-array. - deleteCategory(id: number) { - var category = this.allCategories.find((x) => x.id === id); - this.backendService.deleteCategory(category).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - const index = this.allCategories.indexOf(category); - if (index !== -1) { - this.allCategories.splice(index, 1); - } - } - this.userstory.categoryid = null; - }); - } - // Shows the before choosen category in the category-field in the popup window. - getCategoryById(id: number): string { - if (!id) { - return null; - } - var category = this.allCategories.find((x) => x.id === id); - if (!category) { - return null; - } - return category.title; - } -} \ No newline at end of file +// Importing necessary components and interfaces. +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { BackendService, ScrumUserstory, Priority } from '../../services/backend.service'; +import { + ScrumTask, + ScrumStatus, + ScrumCategory, + ScrumUser, + ScrumProject, +} from '../../services/backend.service'; + +@Component({ + selector: 'app-userstory-form', + templateUrl: './userstory-form.component.html', + styleUrls: ['./userstory-form.component.css'] +}) + +// Class implements the logic for a popup window form to create and modify userstories. +export class UserstoryFormComponent implements OnInit { + @Input() public userstory: ScrumUserstory; + public allStatus: any[] = []; + public status: ScrumStatus = { title: "", description: "" }; + public allUser: any[] = []; + public user: ScrumUser = { name: "" }; + public allCategories: any[] = []; + public category: ScrumCategory = { title: "" }; + private editing: boolean; + + constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { + this.getUserstoryStatus(); + this.getAllUsers(); + this.getUserstoryCategory(); + } + + // If no userstory exists a new one will be created. + // In other cases the userstory exists and gets modifiable. + ngOnInit(): void { + if (this.userstory === null || this.userstory === undefined) { + this.userstory = { title: '' }; + this.editing = false; + } else { + this.editing = true; + } + document.getElementById('titleField').focus(); + } + + // A new created userstory will be saved in backend (POST). + // If a userstory already exists, modifying results an update (PUT) to the backend. + onSubmit() { + if (this.editing) { + this.backendService.putUserstory(this.userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } else { + this.backendService.postUserstory(this.userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + // Closes the popup window after submitting/canceling. + this.activeModalService.close(this.userstory); + } + + // Closes the popup form window (by clicking "close button"). + onClose() { + this.activeModalService.dismiss(this.userstory); + } + + // Getting all available status from backend to list it in status-dropdown in popup window. + getUserstoryStatus() { + this.backendService.getAllStatus().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allStatus.push(...response.body); + } + }); + } + + // If desired a new arbitrary status (such as "Waiting") can be created, which will be stored in an array. + // The new status is available to all userstories. + createUserstoryStatus(status: ScrumStatus) { + this.backendService.postStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + this.allStatus.push(response.body); + } + }); + } + + // A custom status can even be deleted if not used anymore. + // This will remove the status from status-array. + deleteStatus(id: number) { + var status = this.allStatus.find((x) => x.id === id); + this.backendService.deleteStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + const index = this.allStatus.indexOf(status); + if (index !== -1) { + this.allStatus.splice(index, 1); + } + } + this.userstory.statusid = null; + }); + } + + // Getting the values of the Priority enum to be shown in a dropdown in popup window. + getAllPriorities(): Priority[] { + return Object.values(Priority); + } + + // Shows the before choosen status in the status-field in the popup window. + getStatusTitleById(id: number): string { + if (!id) { + return null; + } + var status = this.allStatus.find((x) => x.id === id); + if (!status) { + return null; + } + return status.title; + } + + // Getting all taskboard users from backend to show in a dropdown in popup window. + getAllUsers() { + this.backendService.getUsers().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allUser.push(...response.body); + } + }); + } + + // Shows the before assigned user in the author-field in the popup window. + getAuthorById(id: number): string { + if (!id) { + return null; + } + var user = this.allUser.find((x) => x.id === id); + if (!user) { + return null; + } + return user.name; + } + + // Getting all available categories from backend to list it in status-dropdown in popup window. + getUserstoryCategory() { + this.backendService.getCategories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allCategories.push(...response.body); + } + }); + } + + // If desired a new arbitrary category can be created, which will be stored in an array. + // The new category is available to all userstories. + createUserstoryCategory(category: ScrumCategory) { + this.backendService.postCategory(category).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + this.allCategories.push(response.body); + } + }); + } + + // A custom category can even be deleted if not used anymore. + // This will remove the category from category-array. + deleteCategory(id: number) { + var category = this.allCategories.find((x) => x.id === id); + this.backendService.deleteCategory(category).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + const index = this.allCategories.indexOf(category); + if (index !== -1) { + this.allCategories.splice(index, 1); + } + } + this.userstory.categoryid = null; + }); + } + // Shows the before choosen category in the category-field in the popup window. + getCategoryById(id: number): string { + if (!id) { + return null; + } + var category = this.allCategories.find((x) => x.id === id); + if (!category) { + return null; + } + return category.title; + } +} diff --git a/src/app/userstory-inner-table/userstory-inner-table.component.css b/src/app/components/userstory-inner-table/userstory-inner-table.component.css similarity index 100% rename from src/app/userstory-inner-table/userstory-inner-table.component.css rename to src/app/components/userstory-inner-table/userstory-inner-table.component.css diff --git a/src/app/userstory-inner-table/userstory-inner-table.component.html b/src/app/components/userstory-inner-table/userstory-inner-table.component.html similarity index 100% rename from src/app/userstory-inner-table/userstory-inner-table.component.html rename to src/app/components/userstory-inner-table/userstory-inner-table.component.html diff --git a/src/app/userstory-inner-table/userstory-inner-table.component.ts b/src/app/components/userstory-inner-table/userstory-inner-table.component.ts similarity index 95% rename from src/app/userstory-inner-table/userstory-inner-table.component.ts rename to src/app/components/userstory-inner-table/userstory-inner-table.component.ts index 3430dc0..7a82081 100644 --- a/src/app/userstory-inner-table/userstory-inner-table.component.ts +++ b/src/app/components/userstory-inner-table/userstory-inner-table.component.ts @@ -5,10 +5,10 @@ import { ScrumUserstory, ScrumStatus, ScrumCategory, -} from '../services/backend.service'; +} from '../../services/backend.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { TableComponentBase } from '../services/table-component.base'; -import { getNumberForPriority } from '../services/sorting.service'; +import { TableComponentBase } from '../../services/table-component.base'; +import { getNumberForPriority } from '../../services/sorting.service'; import { UserstoryFormComponent } from '../userstory-form/userstory-form.component'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; diff --git a/src/app/userstory-table/userstory-table.component.css b/src/app/components/userstory-table/userstory-table.component.css similarity index 100% rename from src/app/userstory-table/userstory-table.component.css rename to src/app/components/userstory-table/userstory-table.component.css diff --git a/src/app/userstory-table/userstory-table.component.html b/src/app/components/userstory-table/userstory-table.component.html similarity index 100% rename from src/app/userstory-table/userstory-table.component.html rename to src/app/components/userstory-table/userstory-table.component.html diff --git a/src/app/userstory-table/userstory-table.component.ts b/src/app/components/userstory-table/userstory-table.component.ts similarity index 93% rename from src/app/userstory-table/userstory-table.component.ts rename to src/app/components/userstory-table/userstory-table.component.ts index b61809b..fba1dd1 100644 --- a/src/app/userstory-table/userstory-table.component.ts +++ b/src/app/components/userstory-table/userstory-table.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core'; import { BackendService, ScrumUserstory, -} from '../services/backend.service'; +} from '../../services/backend.service'; @Component({ selector: 'app-userstory-table',