AP-45 #57
| @@ -2,5 +2,5 @@ export interface Task { | ||||
|     id: number; | ||||
|     name: string; | ||||
|     reward: number; | ||||
|     assigned: number; | ||||
|     assigned: number | null; | ||||
| } | ||||
| @@ -1,7 +1,7 @@ | ||||
| <ion-header [translucent]="true"> | ||||
|   <ion-toolbar> | ||||
|     <ion-title *ngIf="isAddMode">Create Task</ion-title> | ||||
|     <ion-title **ngIf="!isAddMode">Edit Task</ion-title> | ||||
|     <ion-title *ngIf="!isAddMode">Edit Task</ion-title> | ||||
|   </ion-toolbar> | ||||
| </ion-header> | ||||
|  | ||||
| @@ -13,7 +13,12 @@ | ||||
|     <label>Reward</label> | ||||
|     <input id="name" type="number" formControlName="reward"/> | ||||
|  | ||||
|     <button type="button" [disabled]="!form.valid"> | ||||
|     <label>Assigned</label> | ||||
|     <select formControlName="assigned"> | ||||
|       <option *ngFor="let user of users" [value]="user.id">{{ user.name }}</option> | ||||
|     </select> | ||||
|  | ||||
|     <button type="button" [disabled]="!form.valid" (click)="submit()"> | ||||
|       <span *ngIf="isAddMode">Add Task</span> | ||||
|       <span *ngIf="!isAddMode">Update Task</span> | ||||
|     </button> | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| form { | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     align-items: center; | ||||
|     height: 100%; | ||||
| } | ||||
|  | ||||
| label { | ||||
|     color: var(--ion-color-primary); | ||||
|     margin-top: 25px; | ||||
|     margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| input, | ||||
| select { | ||||
|     border: 1px solid var(--ion-color-primary); | ||||
|     border-radius: 5px; | ||||
|     width: 250px; | ||||
| } | ||||
|  | ||||
| button { | ||||
|     background-color: var(--ion-color-primary); | ||||
|     border-radius: 5px; | ||||
|     color: white; | ||||
|     padding: 10px; | ||||
|     width: 250px; | ||||
|     margin-top: auto; | ||||
|     margin-bottom: 50px; | ||||
| } | ||||
|  | ||||
| button:disabled, | ||||
| button[disabled]{ | ||||
|     opacity: 0.5; | ||||
| } | ||||
| @@ -1,7 +1,10 @@ | ||||
| import { Location } from '@angular/common'; | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { FormBuilder, FormGroup, Validators } from '@angular/forms'; | ||||
| import { ActivatedRoute } from '@angular/router'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { User } from 'src/app/models/user'; | ||||
| import { TaskService } from 'src/app/services/task.service'; | ||||
| import { UserService } from 'src/app/services/user.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-edit-task', | ||||
| @@ -13,25 +16,30 @@ export class EditTaskPage implements OnInit { | ||||
|   form: FormGroup; | ||||
|   id: number; | ||||
|   isAddMode: boolean; | ||||
|   users: Array<User> = [{id: 0, name: 'unassigned'}]; | ||||
|  | ||||
|   constructor( | ||||
|     private route: ActivatedRoute, | ||||
|     private formBuilder: FormBuilder, | ||||
|     private taskService: TaskService, | ||||
|     private userService: UserService, | ||||
|     private router: Router | ||||
|   ) { | ||||
|     console.log('Test?') | ||||
|     this.id = this.route.snapshot.params['id']; | ||||
|     this.isAddMode = !this.id; | ||||
|  | ||||
|     this.form = this.formBuilder.group({ | ||||
|       name: ['', Validators.required], | ||||
|       reward: ['', Validators.required], | ||||
|       assigned: ['', Validators.required] | ||||
|       reward: ['', [Validators.required, Validators.pattern("^[0-9]*$")]], | ||||
|       assigned: [0, Validators.required] | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   ngOnInit() { | ||||
|     console.log('Test?') | ||||
|     this.userService.getUserList().subscribe(users => { | ||||
|       this.users.push(...users); | ||||
|     }); | ||||
|  | ||||
|     if (!this.isAddMode) { | ||||
|       this.taskService.getTaskById(this.id).subscribe(task => { | ||||
|         this.form.setValue({ | ||||
| @@ -43,4 +51,23 @@ export class EditTaskPage implements OnInit { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   submit() { | ||||
|     const formValue = this.form.value; | ||||
|     let assigned: number | null = Number(formValue.assigned); | ||||
|     if (assigned === 0) { | ||||
|       assigned = null; | ||||
|     } | ||||
|  | ||||
|     const task = { | ||||
|       name: formValue.name, | ||||
|       reward: formValue.reward, | ||||
|       assigned | ||||
|     } | ||||
|  | ||||
|     if (this.isAddMode) { | ||||
|       this.taskService.createTask(task); | ||||
|     } else {} | ||||
|  | ||||
|     this.router.navigate(['/tabs/tasks']); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -6,11 +6,9 @@ const routes: Routes = [ | ||||
|   { | ||||
|     path: '', | ||||
|     component: TasksPage, | ||||
|     children: [ | ||||
|       { path: 'add', loadChildren: () => import('../edit-task/edit-task.module').then(m => m.EditTaskPageModule) }, | ||||
|       { path: 'edit/:id', loadChildren: () => import('../edit-task/edit-task.module').then(m => m.EditTaskPageModule) } | ||||
|     ] | ||||
|   } | ||||
|   }, | ||||
|   { path: 'add', loadChildren: () => import('../edit-task/edit-task.module').then(m => m.EditTaskPageModule) }, | ||||
|   { path: 'edit/:id', loadChildren: () => import('../edit-task/edit-task.module').then(m => m.EditTaskPageModule) } | ||||
| ]; | ||||
|  | ||||
| @NgModule({ | ||||
|   | ||||
| @@ -1,24 +1,28 @@ | ||||
| <ion-header [translucent]="true" class="ion-no-border"> | ||||
|   <ion-toolbar> | ||||
|     <ion-title> | ||||
|       Tasks | ||||
|     </ion-title> | ||||
|     <div class="toolbar"> | ||||
|       <ion-title> | ||||
|         Tasks | ||||
|       </ion-title> | ||||
|       <button class="add-button" (click)="createTask()">Add task</button> | ||||
|     </div> | ||||
|   </ion-toolbar> | ||||
| </ion-header> | ||||
|  | ||||
| <ion-content> | ||||
|   <div class="icon"> | ||||
|     <mat-icon>filter_alt</mat-icon> | ||||
|   </div> | ||||
|   <div class="list"> | ||||
|     <div class="task" *ngFor="let task of tasks"> | ||||
|       <button>Done</button> | ||||
|       <div class="name">{{ task.name }}</div> | ||||
|       <div | ||||
|         class="reward" | ||||
|         [ngClass]="{ 'negative': task.reward < 0 }" | ||||
|       >{{ task.reward.toFixed(2) }} SP</div> | ||||
|   <div class="content"> | ||||
|     <div class="icon"> | ||||
|       <mat-icon>filter_alt</mat-icon> | ||||
|     </div> | ||||
|     <div class="list"> | ||||
|       <div class="task" *ngFor="let task of tasks$ | async"> | ||||
|         <button>Done</button> | ||||
|         <div class="name">{{ task.name }}</div> | ||||
|         <div | ||||
|           class="reward" | ||||
|           [ngClass]="{ 'negative': task.reward < 0 }" | ||||
|         >{{ task.reward.toFixed(2) }} SP</div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <button (click)="createTask()">ADD</button> | ||||
| </ion-content> | ||||
|   | ||||
| @@ -1,3 +1,13 @@ | ||||
| .toolbar { | ||||
|     display: flex; | ||||
| } | ||||
|  | ||||
| .content { | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     height: 100%; | ||||
| } | ||||
|  | ||||
| .icon { | ||||
|     padding: 5px; | ||||
|     display: flex; | ||||
| @@ -44,4 +54,10 @@ button { | ||||
|     border-radius: 10px; | ||||
|     color: white; | ||||
|     background: var(--confirm-button-color); | ||||
| } | ||||
|  | ||||
| .add-button { | ||||
|     background-color: var(--ion-color-primary); | ||||
|     margin-right: 15px; | ||||
|     width: 75px; | ||||
| } | ||||
| @@ -1,34 +1,39 @@ | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { ChangeDetectionStrategy, Component } from '@angular/core'; | ||||
| import { TaskService } from 'src/app/services/task.service'; | ||||
| import { Task } from 'src/app/models/task'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { BehaviorSubject } from 'rxjs'; | ||||
| import { ViewWillEnter } from '@ionic/angular'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-tasks', | ||||
|   templateUrl: 'tasks.page.html', | ||||
|   styleUrls: ['tasks.page.scss'], | ||||
|   changeDetection: ChangeDetectionStrategy.OnPush, | ||||
|   standalone: false, | ||||
| }) | ||||
| export class TasksPage implements OnInit { | ||||
|   public tasks: Array<Task> = []; | ||||
| export class TasksPage implements ViewWillEnter { | ||||
|   public tasks$: BehaviorSubject<Array<Task>> = new BehaviorSubject<Array<Task>>([]); | ||||
|  | ||||
|   constructor( | ||||
|     private taskService: TaskService, | ||||
|     private router: Router, | ||||
|     private route: ActivatedRoute | ||||
|   ) {} | ||||
|   ) { | ||||
|     this.getTasks(); | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|   ionViewWillEnter(): void { | ||||
|     this.getTasks(); | ||||
|   } | ||||
|  | ||||
|   getTasks() { | ||||
|     this.taskService.getTaskList().subscribe(tasks => { | ||||
|       this.tasks = tasks; | ||||
|       this.tasks$.next(tasks); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   createTask() { | ||||
|     this.router.navigate(['edit', 1], { relativeTo: this.route }); | ||||
|     this.router.navigate(['add'], { relativeTo: this.route }); | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user