diff --git a/PhantomDave.BankTracking.Api/Services/FinanceRecordService.cs b/PhantomDave.BankTracking.Api/Services/FinanceRecordService.cs index b7a6c4a..848b82d 100644 --- a/PhantomDave.BankTracking.Api/Services/FinanceRecordService.cs +++ b/PhantomDave.BankTracking.Api/Services/FinanceRecordService.cs @@ -182,7 +182,7 @@ private static string NormalizeDescription(string? description) } var trimmed = description.Trim(); - return trimmed.Length <= 500 ? trimmed : trimmed.Substring(0, 500); + return trimmed.Length <= 500 ? trimmed : trimmed[..500]; } private static DateTime EnsureUtc(DateTime value) diff --git a/frontend/codegen.ts b/frontend/codegen.ts index a7bc1c5..a026506 100644 --- a/frontend/codegen.ts +++ b/frontend/codegen.ts @@ -127,7 +127,7 @@ if (!token) { } const config: CodegenConfig = { - schema: buildSchemaConfig(token), + schema: process.env.USE_LOCAL_SCHEMA === 'true' ? './schema.graphql' : buildSchemaConfig(token), documents: ['src/**/*.graphql'], generates: { './src/generated/graphql.ts': { diff --git a/frontend/src/app/components/configurator/add-entry/add-entry.ts b/frontend/src/app/components/configurator/add-entry/add-entry.ts index 778bec5..da1b5b2 100644 --- a/frontend/src/app/components/configurator/add-entry/add-entry.ts +++ b/frontend/src/app/components/configurator/add-entry/add-entry.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { toSignal } from '@angular/core/rxjs-interop'; import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; @@ -67,13 +67,11 @@ export class AddEntry { recurrenceEndDate: [this.initialValue.recurrenceEndDate], }); - private readonly formInvalidSignal = toSignal( + readonly isSubmitDisabled = toSignal( this.financeRecordForm.statusChanges.pipe(map(() => this.financeRecordForm.invalid)), { initialValue: this.financeRecordForm.invalid }, ); - readonly isSubmitDisabled = computed(() => this.formInvalidSignal()); - readonly isRecurringSignal = toSignal(this.financeRecordForm.controls.recurring.valueChanges, { initialValue: this.initialValue.recurring, }); diff --git a/frontend/src/app/components/configurator/configurator-component/configurator-component.ts b/frontend/src/app/components/configurator/configurator-component/configurator-component.ts index de4e511..3cb2ac1 100644 --- a/frontend/src/app/components/configurator/configurator-component/configurator-component.ts +++ b/frontend/src/app/components/configurator/configurator-component/configurator-component.ts @@ -44,9 +44,9 @@ class ConfiguratorComponent implements OnInit { panelClass: 'add-entry-dialog', }); - dialogRef.afterClosed().subscribe((result: FinanceRecord | undefined) => { + dialogRef.afterClosed().subscribe(async (result: FinanceRecord | undefined) => { if (result) { - this.financeRecordService.createFinanceRecord(result); + await this.financeRecordService.createFinanceRecord(result); } }); } diff --git a/frontend/src/app/models/finance-record/finance-record-service.ts b/frontend/src/app/models/finance-record/finance-record-service.ts index cea2a8e..b1ba0d8 100644 --- a/frontend/src/app/models/finance-record/finance-record-service.ts +++ b/frontend/src/app/models/finance-record/finance-record-service.ts @@ -38,7 +38,7 @@ export class FinanceRecordService { amount: record.amount, currency: record.currency, date: record.date.toISOString(), - recurrenceFrequency: record.recurrenceFrequency ?? RecurrenceFrequency.NONE, + recurrenceFrequency: record.recurrenceFrequency, recurrenceEndDate: record.recurrenceEndDate ? record.recurrenceEndDate.toISOString() : undefined, @@ -47,34 +47,36 @@ export class FinanceRecordService { }), ); - if (result) { - this._selectedFinanceRecord.set({ - id: result.data?.createFinanceRecord.id ?? 0, - name: result.data?.createFinanceRecord.name ?? '', - description: result.data?.createFinanceRecord.description ?? '', - amount: result.data?.createFinanceRecord.amount ?? 0, - currency: result.data?.createFinanceRecord.currency ?? '', - date: new Date(result.data?.createFinanceRecord.date ?? ''), - recurring: result.data?.createFinanceRecord.isRecurring ?? false, - }); - this._financeRecords.update((prev) => [ - ...prev, - { - id: result.data?.createFinanceRecord.id ?? 0, - name: result.data?.createFinanceRecord.name ?? '', - description: result.data?.createFinanceRecord.description ?? '', - amount: result.data?.createFinanceRecord.amount ?? 0, - currency: result.data?.createFinanceRecord.currency ?? '', - date: new Date(result.data?.createFinanceRecord.date ?? ''), - recurring: result.data?.createFinanceRecord.isRecurring ?? false, - }, - ]); + if (result?.data?.createFinanceRecord) { + const newRecord = this.mapToFinanceRecord(result.data.createFinanceRecord); + this._selectedFinanceRecord.set(newRecord); + this._financeRecords.update((prev) => [...prev, newRecord]); } else { this._error.set('Failed to create finance record'); } this._loading.set(false); } + private mapToFinanceRecord(data: { + id: number; + name: string; + description: string; + amount: number; + currency: string; + date: any; + isRecurring: boolean; + }): FinanceRecord { + return { + id: data.id, + name: data.name, + description: data.description, + amount: data.amount, + currency: data.currency, + date: new Date(data.date), + recurring: data.isRecurring, + }; + } + async getFinanceRecords(): Promise { this._loading.set(true); this._error.set(null);