From 6e6cced0c6398d5fac0ab70cee62367936cffc3f Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Fri, 13 Feb 2026 15:00:51 -0600 Subject: [PATCH] refactored services and expense list --- .../add-expense/add-expense.component.html | 19 +++++++++ .../add-expense/add-expense.component.scss | 5 +++ .../add-expense/add-expense.component.ts | 14 +++++++ src/app/components/card/card.component.html | 15 +++++++ src/app/components/card/card.component.scss | 8 ++++ src/app/components/card/card.component.ts | 12 ++++++ .../expense-list/expense-list.component.ts | 39 +++---------------- .../components/expense/expense.component.html | 17 ++------ src/app/pages/expenses/expenses.html | 1 + src/app/pages/expenses/expenses.ts | 4 +- src/app/services/category.service.ts | 16 +++++--- src/app/services/expense.service.ts | 18 +++++---- src/app/services/merchant.service.ts | 14 ++++--- src/app/services/sub-category.service.ts | 20 ---------- src/app/services/tag.service.ts | 14 ++++--- 15 files changed, 125 insertions(+), 91 deletions(-) create mode 100644 src/app/components/add-expense/add-expense.component.html create mode 100644 src/app/components/add-expense/add-expense.component.scss create mode 100644 src/app/components/add-expense/add-expense.component.ts create mode 100644 src/app/components/card/card.component.html create mode 100644 src/app/components/card/card.component.scss create mode 100644 src/app/components/card/card.component.ts delete mode 100644 src/app/services/sub-category.service.ts diff --git a/src/app/components/add-expense/add-expense.component.html b/src/app/components/add-expense/add-expense.component.html new file mode 100644 index 0000000..6da878b --- /dev/null +++ b/src/app/components/add-expense/add-expense.component.html @@ -0,0 +1,19 @@ +
+ +
+
Date
+
Amount
+
Category
+
Merchant
+
Tags
+
+ +
+ Note +
+ + +
+
diff --git a/src/app/components/add-expense/add-expense.component.scss b/src/app/components/add-expense/add-expense.component.scss new file mode 100644 index 0000000..92fce1a --- /dev/null +++ b/src/app/components/add-expense/add-expense.component.scss @@ -0,0 +1,5 @@ +.add-expense-body { + display: flex; + justify-content: space-between; + gap: 0.5rem; +} diff --git a/src/app/components/add-expense/add-expense.component.ts b/src/app/components/add-expense/add-expense.component.ts new file mode 100644 index 0000000..86c8279 --- /dev/null +++ b/src/app/components/add-expense/add-expense.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import {CardComponent} from '../card/card.component'; + +@Component({ + selector: 'app-add-expense', + imports: [ + CardComponent + ], + templateUrl: './add-expense.component.html', + styleUrl: './add-expense.component.scss', +}) +export class AddExpenseComponent { + +} diff --git a/src/app/components/card/card.component.html b/src/app/components/card/card.component.html new file mode 100644 index 0000000..7826017 --- /dev/null +++ b/src/app/components/card/card.component.html @@ -0,0 +1,15 @@ +
+ @if (header()) { +
{{ header() }}
+ } @else { + + } + + + + @if (footer()) { + + } @else { + + } +
diff --git a/src/app/components/card/card.component.scss b/src/app/components/card/card.component.scss new file mode 100644 index 0000000..888e043 --- /dev/null +++ b/src/app/components/card/card.component.scss @@ -0,0 +1,8 @@ +.card-container { + border-radius: 5px; + padding: 1rem; + box-shadow: rgba(99, 99, 99, 0.2) 0 2px 8px 0; + display: flex; + flex-direction: column; + gap: 0.5rem; +} diff --git a/src/app/components/card/card.component.ts b/src/app/components/card/card.component.ts new file mode 100644 index 0000000..3e45981 --- /dev/null +++ b/src/app/components/card/card.component.ts @@ -0,0 +1,12 @@ +import { Component, input } from '@angular/core'; + +@Component({ + selector: 'app-card', + imports: [], + templateUrl: './card.component.html', + styleUrl: './card.component.scss', +}) +export class CardComponent { + public header = input(''); + public footer = input(''); +} diff --git a/src/app/components/expense-list/expense-list.component.ts b/src/app/components/expense-list/expense-list.component.ts index d13b24c..15cc613 100644 --- a/src/app/components/expense-list/expense-list.component.ts +++ b/src/app/components/expense-list/expense-list.component.ts @@ -1,10 +1,6 @@ -import { Component, OnInit, signal } from '@angular/core'; -import { Expense, ExpenseService } from '../../services/expense.service'; +import { Component, computed } from '@angular/core'; +import { ExpenseService } from '../../services/expense.service'; import { ExpenseComponent } from '../expense/expense.component'; -import { Category, CategoryService } from '../../services/category.service'; -import { SubCategory, SubCategoryService } from '../../services/sub-category.service'; -import { Merchant, MerchantService } from '../../services/merchant.service'; -import { Tag, TagService } from '../../services/tag.service'; @Component({ selector: 'app-expense-list', @@ -14,33 +10,8 @@ import { Tag, TagService } from '../../services/tag.service'; templateUrl: './expense-list.component.html', styleUrl: './expense-list.component.scss', }) -export class ExpenseListComponent implements OnInit { - protected expenses = signal([]); - protected categories = signal([]); - protected subCategories = signal([]); - protected merchants = signal([]); - protected tags = signal([]); +export class ExpenseListComponent { + protected expenses = computed(() => this.expensesService.expenses()) - public constructor(private readonly expensesService: ExpenseService, - private readonly categoryService: CategoryService, - private readonly subCategoryService: SubCategoryService, - private readonly merchantService: MerchantService, - private readonly tagService: TagService) { } - - public ngOnInit() { - Promise.all([ - this.expensesService.getExpenses(), - this.categoryService.getCategories(), - this.subCategoryService.getSubCategories(), - this.merchantService.getMerchants(), - this.tagService.getTags() - ]).then(([expenses, categories, subCategories, merchants, tags]) => { - console.log({ expenses, categories, subCategories, merchants, tags }); // TODO: Remove me - this.expenses.set(expenses); - this.categories.set(categories); - this.subCategories.set(subCategories); - this.merchants.set(merchants); - this.tags.set(tags); - }) - } + public constructor(private readonly expensesService: ExpenseService) { } } diff --git a/src/app/components/expense/expense.component.html b/src/app/components/expense/expense.component.html index fee8c5b..93f5357 100644 --- a/src/app/components/expense/expense.component.html +++ b/src/app/components/expense/expense.component.html @@ -1,34 +1,25 @@
-
- {{ `${expense().year}/${expense().month}/${expense().day}` | date }} -
- -
- {{ (expense().cents / 100) | currency: 'USD' }} -
+ {{ `${expense().year}/${expense().month}/${expense().day}` | date }}: {{ (expense().cents / 100) | currency: 'USD' }} @if (expense().merchant) { -
@ {{ expense().merchant?.name }}
+ at {{ expense().merchant?.name }} }
Category: {{ expense().category.name }} - @if (expense().subCategory) { - / {{ expense().subCategory?.name }} - }
- Description: {{ expense().description }} + Note: {{ expense().note ?? 'N/A' }}