Browse Source

Reuse toggle component

pull/7586/head
Thomas Kaul 3 weeks ago
parent
commit
af3599dd91
  1. 55
      apps/client/src/app/components/home-holdings/home-holdings.component.ts
  2. 27
      apps/client/src/app/components/home-holdings/home-holdings.html
  3. 6
      apps/client/src/app/components/home-holdings/home-holdings.scss

55
apps/client/src/app/components/home-holdings/home-holdings.component.ts

@ -27,11 +27,8 @@ import {
OnInit
} from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons';
import { gridOutline, reorderFourOutline } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector';
@ -39,14 +36,10 @@ import { DeviceDetectorService } from 'ngx-device-detector';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
FormsModule,
GfHoldingsTableComponent,
GfToggleComponent,
GfTreemapChartComponent,
IonIcon,
MatButtonModule,
MatButtonToggleModule,
ReactiveFormsModule,
RouterModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
@ -62,17 +55,29 @@ export class GfHomeHoldingsComponent implements OnInit {
protected hasPermissionToAccessHoldingsChart: boolean;
protected hasPermissionToCreateActivity: boolean;
protected holdings: PortfolioPosition[] | undefined;
protected holdingsViewMode: HoldingsViewMode =
GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE;
protected readonly holdingsViewModeOptions: ToggleOption[] = [
{
iconName: 'reorder-four-outline',
title: $localize`Table`,
value: 'TABLE'
},
{
iconName: 'grid-outline',
title: $localize`Chart`,
value: 'CHART'
}
];
protected holdingType: HoldingType = 'ACTIVE';
protected readonly holdingTypeOptions: ToggleOption[] = [
{ label: $localize`Active`, value: 'ACTIVE' },
{ label: $localize`Closed`, value: 'CLOSED' }
];
protected isHoldingsViewModeToggleDisabled = true;
protected readonly routerLinkPortfolioActivities =
internalRoutes.portfolio.subRoutes.activities.routerLink;
protected user: User;
protected readonly viewModeFormControl = new FormControl<HoldingsViewMode>(
GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE
);
private readonly changeDetectorRef = inject(ChangeDetectorRef);
private readonly dataService = inject(DataService);
@ -121,16 +126,13 @@ export class GfHomeHoldingsComponent implements OnInit {
this.changeDetectorRef.markForCheck();
});
this.viewModeFormControl.valueChanges
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((holdingsViewMode) => {
if (!holdingsViewMode) {
return;
}
protected onChangeHoldingsViewMode(aHoldingsViewMode: HoldingsViewMode) {
this.holdingsViewMode = aHoldingsViewMode;
this.dataService
.putUserSetting({ holdingsViewMode })
.putUserSetting({ holdingsViewMode: aHoldingsViewMode })
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
this.userService
@ -142,7 +144,6 @@ export class GfHomeHoldingsComponent implements OnInit {
this.changeDetectorRef.markForCheck();
});
});
});
}
protected onChangeHoldingType(aHoldingType: HoldingType) {
@ -173,26 +174,22 @@ export class GfHomeHoldingsComponent implements OnInit {
}
private initialize() {
this.viewModeFormControl.disable({ emitEvent: false });
this.isHoldingsViewModeToggleDisabled = true;
if (
this.hasPermissionToAccessHoldingsChart &&
this.holdingType === 'ACTIVE'
) {
this.viewModeFormControl.enable({ emitEvent: false });
this.isHoldingsViewModeToggleDisabled = false;
this.viewModeFormControl.setValue(
this.holdingsViewMode =
this.deviceType === 'mobile'
? GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE
: (this.user?.settings?.holdingsViewMode ??
GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE),
{ emitEvent: false }
);
} else if (this.holdingType === 'CLOSED') {
this.viewModeFormControl.setValue(
GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE,
{ emitEvent: false }
);
GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE);
} else {
this.holdingsViewMode =
GfHomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE;
}
this.holdings = undefined;

27
apps/client/src/app/components/home-holdings/home-holdings.html

@ -7,21 +7,14 @@
<div class="row">
<div class="col-lg">
<div class="d-flex">
<div class="d-flex">
<div class="d-none d-lg-block">
<mat-button-toggle-group
[formControl]="viewModeFormControl"
[hideSingleSelectionIndicator]="true"
>
<mat-button-toggle i18n-title title="Table" value="TABLE">
<ion-icon name="reorder-four-outline" />
</mat-button-toggle>
<mat-button-toggle i18n-title title="Chart" value="CHART">
<ion-icon name="grid-outline" />
</mat-button-toggle>
</mat-button-toggle-group>
</div>
</div>
<gf-toggle
class="d-none d-lg-block"
[defaultValue]="holdingsViewMode"
[isDisabled]="isHoldingsViewModeToggleDisabled"
[isLoading]="false"
[options]="holdingsViewModeOptions"
(valueChange)="onChangeHoldingsViewMode($event.value)"
/>
<div class="align-items-center d-flex flex-grow-1 justify-content-end">
<gf-toggle
class="d-none d-lg-block"
@ -32,7 +25,7 @@
/>
</div>
</div>
@if (viewModeFormControl.value === 'CHART') {
@if (holdingsViewMode === 'CHART') {
<gf-treemap-chart
class="mt-3"
cursor="pointer"
@ -44,7 +37,7 @@
(treemapChartClicked)="onHoldingClicked($event)"
/>
}
<div [class.d-none]="viewModeFormControl.value !== 'TABLE'">
<div [class.d-none]="holdingsViewMode !== 'TABLE'">
<gf-holdings-table
[holdings]="holdings"
[locale]="user?.settings?.locale"

6
apps/client/src/app/components/home-holdings/home-holdings.scss

@ -1,9 +1,3 @@
:host {
display: block;
.mat-button-toggle-group {
.mat-button-toggle-appearance-standard {
--mat-button-toggle-height: 1.5rem;
}
}
}

Loading…
Cancel
Save