Add list of tasks

This commit is contained in:
Huffle 2025-05-15 14:55:47 +02:00
parent b48d082edd
commit 0007f10ae3
10 changed files with 122 additions and 8 deletions

View File

@ -0,0 +1,6 @@
export interface Task {
id: number;
name: string;
reward: number;
assigned: number;
}

View File

@ -1,4 +1,4 @@
<ion-header [translucent]="true">
<ion-header [translucent]="true" class="ion-no-border">
<ion-toolbar>
<ion-title>
Allowance

View File

@ -1,4 +1,4 @@
<ion-header [translucent]="true">
<ion-header [translucent]="true" class="ion-no-border">
<ion-toolbar>
<ion-title>
History

View File

@ -5,14 +5,22 @@ import { FormsModule } from '@angular/forms';
import { TasksPage } from './tasks.page';
import { TasksPageRoutingModule } from './tasks-routing.module';
import { provideHttpClient } from '@angular/common/http';
import { TaskService } from 'src/app/services/task.service';
import { MatIconModule } from '@angular/material/icon';
@NgModule({
imports: [
IonicModule,
CommonModule,
FormsModule,
TasksPageRoutingModule
TasksPageRoutingModule,
MatIconModule,
],
declarations: [TasksPage]
declarations: [TasksPage],
providers: [
provideHttpClient(),
TaskService
]
})
export class TasksPageModule {}

View File

@ -1,4 +1,4 @@
<ion-header [translucent]="true">
<ion-header [translucent]="true" class="ion-no-border">
<ion-toolbar>
<ion-title>
Tasks
@ -7,4 +7,17 @@
</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>
</div>
</ion-content>

View File

@ -0,0 +1,47 @@
.icon {
padding: 5px;
display: flex;
justify-content: flex-end;
color: var(--ion-color-primary);
}
mat-icon {
font-size: 35px;
width: 35px;
height: 35px;
}
.list {
border-top: 1px solid var(--line-color);
}
.task {
display: flex;
flex-direction: row;
align-items: center;
border-bottom: 1px solid var(--line-color);
padding: 5px;
}
.name {
margin-left: 10px;
color: var(--font-color);
}
.reward {
margin-left: auto;
margin-right: 15px;
color: var(--positive-amount-color);
}
.negative {
color: var(--negative-amount-color);
}
button {
width: 57px;
height: 30px;
border-radius: 10px;
color: white;
background: var(--confirm-button-color);
}

View File

@ -1,4 +1,6 @@
import { Component } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import { TaskService } from 'src/app/services/task.service';
import { Task } from 'src/app/models/task';
@Component({
selector: 'app-tasks',
@ -6,8 +8,17 @@ import { Component } from '@angular/core';
styleUrls: ['tasks.page.scss'],
standalone: false,
})
export class TasksPage {
export class TasksPage implements OnInit {
public tasks: Array<Task> = [];
constructor() {}
constructor(
private taskService: TaskService
) {}
ngOnInit(): void {
this.taskService.getTaskList().subscribe(tasks => {
this.tasks = tasks;
});
}
}

View File

@ -0,0 +1,16 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Task } from '../models/task';
@Injectable({
providedIn: 'root'
})
export class TaskService {
private url = 'http://localhost:8080/api'
constructor(private http: HttpClient) {}
getTaskList(): Observable<Array<Task>> {
return this.http.get<Task[]>(`${this.url}/tasks`);
}
}

View File

@ -35,3 +35,11 @@
/* @import "@ionic/angular/css/palettes/dark.always.css"; */
/* @import "@ionic/angular/css/palettes/dark.class.css"; */
@import "@ionic/angular/css/palettes/dark.system.css";
ion-title {
color: var(--ion-color-primary);
}
ion-header {
border-bottom: 1px solid var(--line-color);
}

View File

@ -4,6 +4,11 @@
--ion-color-primary: #9C4BE4;
--ion-color-secondary: #F5E9FF;
--ion-background-color: #F3F3F3;
--font-color: #7B7B7B;
--confirm-button-color: #58A66F;
--positive-amount-color: #7DCB7D;
--negative-amount-color: #C55454;
--line-color: #CACACA;
--ion-font-family: 'Myfont';
}