Browse Source

feat(client): implement CreateWatchlistItemForm

pull/6724/head
KenTandrian 1 month ago
parent
commit
f438124df2
  1. 23
      apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.ts
  2. 7
      apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/interfaces/interfaces.ts

23
apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.ts

@ -2,10 +2,8 @@ import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplet
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
import { import {
AbstractControl,
FormBuilder, FormBuilder,
FormControl, FormControl,
FormGroup,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
ValidationErrors, ValidationErrors,
@ -14,6 +12,9 @@ import {
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field'; import { MatFormFieldModule } from '@angular/material/form-field';
import { SymbolProfile } from '@prisma/client';
import { CreateWatchlistItemForm } from './interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@ -31,7 +32,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
templateUrl: 'create-watchlist-item-dialog.html' templateUrl: 'create-watchlist-item-dialog.html'
}) })
export class GfCreateWatchlistItemDialogComponent implements OnInit { export class GfCreateWatchlistItemDialogComponent implements OnInit {
public createWatchlistItemForm: FormGroup; public createWatchlistItemForm: CreateWatchlistItemForm;
public constructor( public constructor(
public readonly dialogRef: MatDialogRef<GfCreateWatchlistItemDialogComponent>, public readonly dialogRef: MatDialogRef<GfCreateWatchlistItemDialogComponent>,
@ -41,7 +42,9 @@ export class GfCreateWatchlistItemDialogComponent implements OnInit {
public ngOnInit() { public ngOnInit() {
this.createWatchlistItemForm = this.formBuilder.group( this.createWatchlistItemForm = this.formBuilder.group(
{ {
searchSymbol: new FormControl(null, [Validators.required]) searchSymbol: new FormControl<SymbolProfile | null>(null, [
Validators.required
])
}, },
{ {
validators: this.validator validators: this.validator
@ -56,18 +59,18 @@ export class GfCreateWatchlistItemDialogComponent implements OnInit {
public onSubmit() { public onSubmit() {
this.dialogRef.close({ this.dialogRef.close({
dataSource: dataSource:
this.createWatchlistItemForm.get('searchSymbol').value.dataSource, this.createWatchlistItemForm.controls.searchSymbol.value?.dataSource,
symbol: this.createWatchlistItemForm.get('searchSymbol').value.symbol symbol: this.createWatchlistItemForm.controls.searchSymbol.value?.symbol
}); });
} }
private validator(control: AbstractControl): ValidationErrors { private validator(control: CreateWatchlistItemForm): ValidationErrors {
const searchSymbolControl = control.get('searchSymbol'); const searchSymbolControl = control.controls.searchSymbol;
if ( if (
searchSymbolControl.valid && searchSymbolControl.valid &&
searchSymbolControl.value.dataSource && searchSymbolControl.value?.dataSource &&
searchSymbolControl.value.symbol searchSymbolControl.value?.symbol
) { ) {
return { incomplete: false }; return { incomplete: false };
} }

7
apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/interfaces/interfaces.ts

@ -1,4 +1,11 @@
import type { FormControl, FormGroup } from '@angular/forms';
import type { SymbolProfile } from '@prisma/client';
export interface CreateWatchlistItemDialogParams { export interface CreateWatchlistItemDialogParams {
deviceType: string; deviceType: string;
locale: string; locale: string;
} }
export type CreateWatchlistItemForm = FormGroup<{
searchSymbol: FormControl<SymbolProfile | null>;
}>;

Loading…
Cancel
Save