diff --git a/backend/allowance_planner.db3.backup.2 b/backend/allowance_planner.db3.backup.2 new file mode 100644 index 0000000..ab889f0 Binary files /dev/null and b/backend/allowance_planner.db3.backup.2 differ diff --git a/frontend/allowance-planner-v2/src/app/app-routing.module.ts b/frontend/allowance-planner-v2/src/app/app-routing.module.ts index 2750f02..ffe16e8 100644 --- a/frontend/allowance-planner-v2/src/app/app-routing.module.ts +++ b/frontend/allowance-planner-v2/src/app/app-routing.module.ts @@ -11,7 +11,6 @@ const routes: Routes = [ path: '', loadChildren: () => import('./pages/tabs/tabs.module').then(m => m.TabsPageModule) }, - ]; @NgModule({ imports: [ diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts index 607bbf1..5616c78 100644 --- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts +++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts @@ -6,6 +6,14 @@ const routes: Routes = [ { path: ':id', component: AllowancePage, + }, + { + path: ':id/add', + loadChildren: () => import('../edit-allowance/edit-allowance.module').then(m => m.EditAllowancePageModule) + }, + { + path: ':id/edit/:goalId', + loadChildren: () => import('../edit-allowance/edit-allowance.module').then(m => m.EditAllowancePageModule) } ]; diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html index 0641aa1..eed3155 100644 --- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html +++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html @@ -1,8 +1,11 @@ - - Allowance - +
+ + Allowance + + +
diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.scss b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.scss index 696cb46..45530b8 100644 --- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.scss +++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.scss @@ -58,11 +58,10 @@ button { padding-inline: 30px; border-radius: 10px; color: white; - font-size: 16px; } button:disabled, -button[disabled]{ +button[disabled] { opacity: 0.5; } @@ -127,4 +126,14 @@ button[disabled]{ background-color: var(--legend-color); border-radius: 20px; margin-right: 2px; +} + +.toolbar { + display: flex; +} + +.top-add-button { + background-color: var(--ion-color-primary); + margin-right: 15px; + padding-inline: 15px; } \ No newline at end of file diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts index afe1e89..fdd460d 100644 --- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts +++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { Allowance } from 'src/app/models/allowance'; import { AllowanceService } from 'src/app/services/allowance.service'; @@ -14,23 +14,11 @@ import { ViewWillEnter } from '@ionic/angular'; }) export class AllowancePage implements ViewWillEnter { private id: number; - // Move to add/edit page later - private possibleColors: Array = [ - '#6199D9', - '#D98B61', - '#DBC307', - '#13DEB5', - '#7DCB7D', - '#CF1DBD', - '#F53311', - '#2F00FF', - '#098B0D', - '#1BC2E8' - ]; public allowance$: BehaviorSubject> = new BehaviorSubject>([]); constructor( private route: ActivatedRoute, + private router: Router, private allowanceService: AllowanceService ) { this.id = this.route.snapshot.params['id']; @@ -46,7 +34,6 @@ export class AllowancePage implements ViewWillEnter { this.allowanceService.getAllowanceList(this.id).subscribe(allowance => { allowance[0].colour = '#9C4BE4'; allowance[0].name = 'Main Allowance'; - console.log('Allowance list: ', allowance); this.allowance$.next(allowance); }) }, 10); @@ -72,4 +59,12 @@ export class AllowancePage implements ViewWillEnter { } return goal.progress / allowanceTotal * 100; } + + createAllowance() { + this.router.navigate(['add'], { relativeTo: this.route }); + } + + updateAllowance(id: number) { + this.router.navigate(['edit', id], { relativeTo: this.route }); + } } diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance-routing.module.ts b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance-routing.module.ts new file mode 100644 index 0000000..728b259 --- /dev/null +++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { EditAllowancePage } from './edit-allowance.page'; + +const routes: Routes = [ + { + path: '', + component: EditAllowancePage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class EditAllowancePageRoutingModule {} diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts new file mode 100644 index 0000000..babc77f --- /dev/null +++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { EditAllowancePageRoutingModule } from './edit-allowance-routing.module'; + +import { EditAllowancePage } from './edit-allowance.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + EditAllowancePageRoutingModule, + ReactiveFormsModule + ], + declarations: [EditAllowancePage] +}) +export class EditAllowancePageModule {} diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html new file mode 100644 index 0000000..43ff437 --- /dev/null +++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html @@ -0,0 +1,31 @@ + + +
+ Create Goal + Edit Goal +
+
+
+ + +
+ + + + + + + + + + + + + +
+
diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss new file mode 100644 index 0000000..3fee56e --- /dev/null +++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss @@ -0,0 +1,45 @@ +.toolbar { + display: flex; +} + +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; +} + +option { + --background: white; + background-color: var(--background); + color: var(--background); + font-family: var(--ion-font-family); +} + +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; +} \ No newline at end of file diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.spec.ts b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.spec.ts new file mode 100644 index 0000000..07d6d12 --- /dev/null +++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.spec.ts @@ -0,0 +1,17 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { EditAllowancePage } from './edit-allowance.page'; + +describe('EditAllowancePage', () => { + let component: EditAllowancePage; + let fixture: ComponentFixture; + + beforeEach(() => { + fixture = TestBed.createComponent(EditAllowancePage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts new file mode 100644 index 0000000..81f7c55 --- /dev/null +++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts @@ -0,0 +1,75 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AllowanceService } from 'src/app/services/allowance.service'; + +@Component({ + selector: 'app-edit-allowance', + templateUrl: './edit-allowance.page.html', + styleUrls: ['./edit-allowance.page.scss'], + standalone: false +}) +export class EditAllowancePage implements OnInit { + public form: FormGroup; + public goalId: number; + public userId: number; + public isAddMode: boolean; + public possibleColors: Array = [ + '#6199D9', + '#D98B61', + '#DBC307', + '#13DEB5', + '#7DCB7D', + '#CF1DBD', + '#F53311', + '#2F00FF', + '#098B0D', + '#1BC2E8' + ]; + + constructor( + private route: ActivatedRoute, + private formBuilder: FormBuilder, + private allowanceService: AllowanceService, + private router: Router + ) { + this.userId = this.route.snapshot.params['id']; + this.goalId = this.route.snapshot.params['goalId']; + this.isAddMode = !this.goalId; + + this.allowanceService.getAllowanceList(this.userId).subscribe((list) => { + for (let allowance of list) { + this.possibleColors = this.possibleColors.filter(color => color !== allowance.colour); + if (!this.isAddMode && this.goalId === allowance.id) { + this.possibleColors.unshift(allowance.colour); + } + } + }); + + this.form = this.formBuilder.group({ + name: ['', Validators.required], + target: ['', Validators.required], + weight: ['', Validators.required], + color: ['', Validators.required] + }); + } + + ngOnInit() { + } + + submit() { + const formValue = this.form.value; + const allowance = { + name: formValue.name, + target: formValue.target, + weight: formValue.weight, + colour: formValue.color, + }; + + if (this.isAddMode) { + this.allowanceService.createAllowance(allowance, this.userId); + } + + this.router.navigate(['/tabs/allowance', this.userId]); + } +} diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html b/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html index 52eb693..3d9ee5c 100644 --- a/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html +++ b/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html @@ -18,7 +18,7 @@ - +