mirror of https://github.com/ghostfolio/ghostfolio
Browse Source
* Added ability to add asset profile in admin control panel * Update changelogpull/2085/head
committed by
GitHub
13 changed files with 258 additions and 5 deletions
@ -0,0 +1,53 @@ |
|||||
|
import { |
||||
|
ChangeDetectionStrategy, |
||||
|
ChangeDetectorRef, |
||||
|
Component, |
||||
|
Inject, |
||||
|
OnDestroy, |
||||
|
OnInit |
||||
|
} from '@angular/core'; |
||||
|
import { |
||||
|
FormBuilder, |
||||
|
FormControl, |
||||
|
FormGroup, |
||||
|
Validators |
||||
|
} from '@angular/forms'; |
||||
|
import { MatDialogRef } from '@angular/material/dialog'; |
||||
|
import { AdminService } from '@ghostfolio/client/services/admin.service'; |
||||
|
|
||||
|
@Component({ |
||||
|
changeDetection: ChangeDetectionStrategy.OnPush, |
||||
|
host: { class: 'h-100' }, |
||||
|
selector: 'gf-create-asset-profile-dialog', |
||||
|
templateUrl: 'create-asset-profile-dialog.html' |
||||
|
}) |
||||
|
export class CreateAssetProfileDialog implements OnInit, OnDestroy { |
||||
|
public createAssetProfileForm: FormGroup; |
||||
|
|
||||
|
public constructor( |
||||
|
public readonly adminService: AdminService, |
||||
|
public readonly changeDetectorRef: ChangeDetectorRef, |
||||
|
public readonly dialogRef: MatDialogRef<CreateAssetProfileDialog>, |
||||
|
public readonly formBuilder: FormBuilder |
||||
|
) {} |
||||
|
|
||||
|
public ngOnInit() { |
||||
|
this.createAssetProfileForm = this.formBuilder.group({ |
||||
|
searchSymbol: new FormControl(null, [Validators.required]) |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public onCancel() { |
||||
|
this.dialogRef.close(); |
||||
|
} |
||||
|
|
||||
|
public onSubmit() { |
||||
|
this.dialogRef.close({ |
||||
|
dataSource: |
||||
|
this.createAssetProfileForm.controls['searchSymbol'].value.dataSource, |
||||
|
symbol: this.createAssetProfileForm.controls['searchSymbol'].value.symbol |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public ngOnDestroy() {} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
<form |
||||
|
class="d-flex flex-column h-100" |
||||
|
[formGroup]="createAssetProfileForm" |
||||
|
(keyup.enter)="createAssetProfileForm.valid && onSubmit()" |
||||
|
(ngSubmit)="onSubmit()" |
||||
|
> |
||||
|
<h1 i18n mat-dialog-title>Create Asset Profile</h1> |
||||
|
<div class="flex-grow-1 py-3" mat-dialog-content> |
||||
|
<mat-form-field appearance="outline" class="w-100"> |
||||
|
<mat-label i18n>Name, symbol or ISIN</mat-label> |
||||
|
<gf-symbol-autocomplete formControlName="searchSymbol" /> |
||||
|
</mat-form-field> |
||||
|
</div> |
||||
|
<div class="d-flex justify-content-end" mat-dialog-actions> |
||||
|
<button i18n mat-button type="button" (click)="onCancel()">Cancel</button> |
||||
|
<button |
||||
|
color="primary" |
||||
|
mat-flat-button |
||||
|
type="submit" |
||||
|
[disabled]="!createAssetProfileForm.valid" |
||||
|
> |
||||
|
<ng-container i18n>Create</ng-container> |
||||
|
</button> |
||||
|
</div> |
||||
|
</form> |
@ -0,0 +1,24 @@ |
|||||
|
import { CommonModule } from '@angular/common'; |
||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; |
||||
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; |
||||
|
import { MatButtonModule } from '@angular/material/button'; |
||||
|
import { MatDialogModule } from '@angular/material/dialog'; |
||||
|
import { MatFormFieldModule } from '@angular/material/form-field'; |
||||
|
import { GfSymbolAutocompleteModule } from '@ghostfolio/ui/symbol-autocomplete'; |
||||
|
|
||||
|
import { CreateAssetProfileDialog } from './create-asset-profile-dialog.component'; |
||||
|
|
||||
|
@NgModule({ |
||||
|
declarations: [CreateAssetProfileDialog], |
||||
|
imports: [ |
||||
|
CommonModule, |
||||
|
FormsModule, |
||||
|
GfSymbolAutocompleteModule, |
||||
|
MatDialogModule, |
||||
|
MatButtonModule, |
||||
|
MatFormFieldModule, |
||||
|
ReactiveFormsModule |
||||
|
], |
||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
||||
|
}) |
||||
|
export class GfCreateAssetProfileDialogModule {} |
@ -0,0 +1,4 @@ |
|||||
|
export interface CreateAssetProfileDialogParams { |
||||
|
deviceType: string; |
||||
|
locale: string; |
||||
|
} |
Loading…
Reference in new issue