Feature/set up rule settings dialog (#3771)
This commit is contained in:
parent
3de192c65e
commit
fbf377f67f
@ -0,0 +1,5 @@
|
|||||||
|
import { PortfolioReportRule } from '@ghostfolio/common/interfaces';
|
||||||
|
|
||||||
|
export interface IRuleSettingsDialogParams {
|
||||||
|
rule: PortfolioReportRule;
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
import { PortfolioReportRule } from '@ghostfolio/common/interfaces';
|
||||||
|
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { Component, Inject } from '@angular/core';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import {
|
||||||
|
MAT_DIALOG_DATA,
|
||||||
|
MatDialogModule,
|
||||||
|
MatDialogRef
|
||||||
|
} from '@angular/material/dialog';
|
||||||
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
|
||||||
|
import { IRuleSettingsDialogParams } from './interfaces/interfaces';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatDialogModule,
|
||||||
|
MatFormFieldModule,
|
||||||
|
MatInputModule
|
||||||
|
],
|
||||||
|
selector: 'gf-rule-settings-dialog',
|
||||||
|
standalone: true,
|
||||||
|
styleUrls: ['./rule-settings-dialog.scss'],
|
||||||
|
templateUrl: './rule-settings-dialog.html'
|
||||||
|
})
|
||||||
|
export class GfRuleSettingsDialogComponent {
|
||||||
|
public settings: PortfolioReportRule['settings'];
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
@Inject(MAT_DIALOG_DATA) public data: IRuleSettingsDialogParams,
|
||||||
|
public dialogRef: MatDialogRef<GfRuleSettingsDialogComponent>
|
||||||
|
) {
|
||||||
|
console.log(this.data.rule);
|
||||||
|
|
||||||
|
this.settings = this.data.rule.settings;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
<div mat-dialog-title>{{ data.rule.name }}</div>
|
||||||
|
|
||||||
|
<div class="py-3" mat-dialog-content>
|
||||||
|
<mat-form-field appearance="outline" class="w-100">
|
||||||
|
<mat-label i18n>Threshold Min</mat-label>
|
||||||
|
<input matInput name="thresholdMin" type="number" />
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field appearance="outline" class="w-100">
|
||||||
|
<mat-label i18n>Threshold Max</mat-label>
|
||||||
|
<input matInput name="thresholdMax" type="number" />
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div align="end" mat-dialog-actions>
|
||||||
|
<button i18n mat-button (click)="dialogRef.close()">Close</button>
|
||||||
|
<button
|
||||||
|
color="primary"
|
||||||
|
mat-flat-button
|
||||||
|
(click)="dialogRef.close({ settings })"
|
||||||
|
>
|
||||||
|
<ng-container i18n>Save</ng-container>
|
||||||
|
</button>
|
||||||
|
</div>
|
@ -0,0 +1,2 @@
|
|||||||
|
:host {
|
||||||
|
}
|
@ -62,6 +62,11 @@
|
|||||||
<ion-icon name="ellipsis-horizontal" />
|
<ion-icon name="ellipsis-horizontal" />
|
||||||
</button>
|
</button>
|
||||||
<mat-menu #rulesMenu="matMenu" xPosition="before">
|
<mat-menu #rulesMenu="matMenu" xPosition="before">
|
||||||
|
@if (rule?.isActive && !isEmpty(rule.settings) && false) {
|
||||||
|
<button mat-menu-item (click)="onCustomizeRule(rule)">
|
||||||
|
<ng-container i18n>Customize</ng-container>...
|
||||||
|
</button>
|
||||||
|
}
|
||||||
<button mat-menu-item (click)="onUpdateRule(rule)">
|
<button mat-menu-item (click)="onUpdateRule(rule)">
|
||||||
@if (rule?.isActive) {
|
@if (rule?.isActive) {
|
||||||
<ng-container i18n>Deactivate</ng-container>
|
<ng-container i18n>Deactivate</ng-container>
|
||||||
|
@ -9,6 +9,13 @@ import {
|
|||||||
OnInit,
|
OnInit,
|
||||||
Output
|
Output
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
|
import { isEmpty } from 'lodash';
|
||||||
|
import { DeviceDetectorService } from 'ngx-device-detector';
|
||||||
|
import { Subject, takeUntil } from 'rxjs';
|
||||||
|
|
||||||
|
import { IRuleSettingsDialogParams } from './rule-settings-dialog/interfaces/interfaces';
|
||||||
|
import { GfRuleSettingsDialogComponent } from './rule-settings-dialog/rule-settings-dialog.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'gf-rule',
|
selector: 'gf-rule',
|
||||||
@ -23,9 +30,42 @@ export class RuleComponent implements OnInit {
|
|||||||
|
|
||||||
@Output() ruleUpdated = new EventEmitter<UpdateUserSettingDto>();
|
@Output() ruleUpdated = new EventEmitter<UpdateUserSettingDto>();
|
||||||
|
|
||||||
public constructor() {}
|
public isEmpty = isEmpty;
|
||||||
|
|
||||||
public ngOnInit() {}
|
private deviceType: string;
|
||||||
|
private unsubscribeSubject = new Subject<void>();
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
private deviceService: DeviceDetectorService,
|
||||||
|
private dialog: MatDialog
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public ngOnInit() {
|
||||||
|
this.deviceType = this.deviceService.getDeviceInfo().deviceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public onCustomizeRule(rule: PortfolioReportRule) {
|
||||||
|
const dialogRef = this.dialog.open(GfRuleSettingsDialogComponent, {
|
||||||
|
data: <IRuleSettingsDialogParams>{
|
||||||
|
rule
|
||||||
|
},
|
||||||
|
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||||
|
});
|
||||||
|
|
||||||
|
dialogRef
|
||||||
|
.afterClosed()
|
||||||
|
.pipe(takeUntil(this.unsubscribeSubject))
|
||||||
|
.subscribe(
|
||||||
|
({ settings }: { settings: PortfolioReportRule['settings'] }) => {
|
||||||
|
if (settings) {
|
||||||
|
console.log(settings);
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
// this.ruleUpdated.emit(settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public onUpdateRule(rule: PortfolioReportRule) {
|
public onUpdateRule(rule: PortfolioReportRule) {
|
||||||
const settings: UpdateUserSettingDto = {
|
const settings: UpdateUserSettingDto = {
|
||||||
@ -36,4 +76,9 @@ export class RuleComponent implements OnInit {
|
|||||||
|
|
||||||
this.ruleUpdated.emit(settings);
|
this.ruleUpdated.emit(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ngOnDestroy() {
|
||||||
|
this.unsubscribeSubject.next();
|
||||||
|
this.unsubscribeSubject.complete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user