diff --git a/src/app/components/expense/expense-form/expense-form.component.ts b/src/app/components/expense/expense-form/expense-form.component.ts
index ceca49c..677275c 100644
--- a/src/app/components/expense/expense-form/expense-form.component.ts
+++ b/src/app/components/expense/expense-form/expense-form.component.ts
@@ -48,13 +48,18 @@ export class ExpenseFormComponent implements OnInit {
private readonly merchantService: MerchantService,
private readonly tagService: TagService) {
effect(() => {
+ const form = this.form().value();
const valid = this.formValid();
const dirty = this.formDirty();
- const value = this.form().value();
+ const value = {
+ ...form,
+ merchant: Boolean(form.merchant) ? form.merchant : null,
+ note: Boolean(form.note) ? form.note : null
+ };
this.valid.emit(valid);
this.dirty.emit(dirty);
- this.value.emit(value);
+ this.value.emit(value as ExpenseForm);
this.lastDate.set(value.date);
});
}
@@ -98,8 +103,8 @@ export class ExpenseFormComponent implements OnInit {
date: new Date(year, month, day),
cents: expense.cents,
category: expense.category,
- merchant: expense.merchant ?? {},
- note: expense.note ?? '',
+ merchant: expense.merchant ?? null,
+ note: expense.note,
tags: expense.tags ?? []
} as ExpenseForm;
}
diff --git a/src/app/components/expense/expense.component.ts b/src/app/components/expense/expense.component.ts
index 51cbdda..228b0db 100644
--- a/src/app/components/expense/expense.component.ts
+++ b/src/app/components/expense/expense.component.ts
@@ -38,10 +38,10 @@ export class ExpenseComponent {
const postExpense: CreateExpense = {
date: this.dateToPlainDate(form.date),
cents: form.cents,
- categoryId: form.category.id,
- note: !!form.note ? form.note : undefined,
- merchantId: !!form.merchant ? form.merchant.id : undefined,
- tagIds: form.tags.map(tag => tag.id)
+ category: form.category,
+ merchant: form.merchant,
+ note: form.note,
+ tags: form.tags
};
this.savingExpense.set(true);
const snackId = this.snackBar.staticBar('Tracking new expense...');
@@ -70,10 +70,10 @@ export class ExpenseComponent {
id: this.expense()!.id,
date: this.dateToPlainDate(form.date),
cents: form.cents,
- categoryId: form.category.id,
- note: !!form.note ? form.note : undefined,
- merchantId: !!form.merchant ? form.merchant.id : undefined,
- tagIds: form.tags.map(tag => tag.id)
+ category: form.category,
+ merchant: form.merchant,
+ note: form.note,
+ tags: form.tags
};
this.savingExpense.set(true);
const snackId = this.snackBar.staticBar('Updating expense...');
diff --git a/src/app/components/metadata/categories/categories.component.html b/src/app/components/metadata/categories/categories.component.html
index 9534c08..366e582 100644
--- a/src/app/components/metadata/categories/categories.component.html
+++ b/src/app/components/metadata/categories/categories.component.html
@@ -1,17 +1,44 @@
- @for (category of categories(); track category.id) {
-
{{ category.name }}
- }
- @if (!categories().length) {
-
- No categories to display
-
- }
+
+
+
+
+
+
+
+
+
+
+
+
+ @for (category of categories(); track category.id) {
+
+ {{ category.name }}
+
+ }
+ @if (!categories().length) {
+
+
+
+
+ }
+
diff --git a/src/app/components/metadata/categories/categories.component.scss b/src/app/components/metadata/categories/categories.component.scss
index 85a72d5..2e129f2 100644
--- a/src/app/components/metadata/categories/categories.component.scss
+++ b/src/app/components/metadata/categories/categories.component.scss
@@ -21,8 +21,20 @@
}
}
-.category-list {
- display: grid;
- gap: 1rem;
- justify-content: center;
+//.add-category {
+// display: flex;
+// align-items: baseline;
+// gap: 0.5rem;
+//}
+
+//.category-list {
+// display: grid;
+// gap: 1rem;
+// justify-content: center;
+//}
+.category-item {
+ padding: 1rem;
+}
+mat-form-field {
+ width: 400px;
}
diff --git a/src/app/components/metadata/categories/categories.component.ts b/src/app/components/metadata/categories/categories.component.ts
index bb052b5..c3eb6e1 100644
--- a/src/app/components/metadata/categories/categories.component.ts
+++ b/src/app/components/metadata/categories/categories.component.ts
@@ -1,11 +1,24 @@
-import { Component, computed } from '@angular/core';
+import {Component, computed, effect, model} from '@angular/core';
import { CategoryService } from '../../../services/category.service';
import { DividerComponent } from '../../divider/divider.component';
+import {MatFormField, MatInput, MatLabel} from '@angular/material/input';
+import {FormsModule} from '@angular/forms';
+import {MatList, MatListItem} from '@angular/material/list';
+import {MatIconButton} from '@angular/material/button';
+import {MatIcon} from '@angular/material/icon';
@Component({
selector: 'app-categories',
imports: [
- DividerComponent
+ DividerComponent,
+ MatInput,
+ MatFormField,
+ MatLabel,
+ FormsModule,
+ // MatList,
+ // MatListItem,
+ MatIconButton,
+ MatIcon
],
templateUrl: './categories.component.html',
styleUrl: './categories.component.scss'
@@ -13,5 +26,15 @@ import { DividerComponent } from '../../divider/divider.component';
export class CategoriesComponent {
protected categories = computed(() => this.categoryService.categories());
- public constructor(private readonly categoryService: CategoryService) { }
+ public newCategory = model('');
+
+ public constructor(private readonly categoryService: CategoryService) {
+ effect(() => {
+ console.log(this.newCategory());
+ });
+ }
+
+ public addClick(): void {
+ console.log('add clicked');
+ }
}
diff --git a/src/app/services/expense.service.ts b/src/app/services/expense.service.ts
index 243c53b..5c20794 100644
--- a/src/app/services/expense.service.ts
+++ b/src/app/services/expense.service.ts
@@ -38,18 +38,18 @@ export interface Expense {
date: Date;
cents: number;
category: Category;
- note?: string;
merchant?: Merchant;
+ note?: string;
tags: Tag[];
}
export interface CreateExpense {
date: Temporal.PlainDate;
cents: number;
- categoryId: string;
+ category: Category;
+ merchant?: Merchant;
note?: string;
- merchantId?: string;
- tagIds?: string[];
+ tags: Tag[];
}
export interface UpdateExpense extends CreateExpense {