Browse Source

Improvements

pull/150/head
Thomas 4 years ago
parent
commit
afc2ce0100
  1. 6
      apps/client/src/app/components/world-map-chart/world-map-chart.component.html
  2. 9
      apps/client/src/app/components/world-map-chart/world-map-chart.component.scss
  3. 33
      apps/client/src/app/components/world-map-chart/world-map-chart.component.ts
  4. 7
      apps/client/src/app/pages/tools/analysis/analysis-page.html
  5. 8
      apps/client/src/app/pages/tools/analysis/analysis-page.scss

6
apps/client/src/app/components/world-map-chart/world-map-chart.component.html

@ -1,15 +1,13 @@
<ngx-skeleton-loader <ngx-skeleton-loader
*ngIf="isLoading" *ngIf="isLoading"
animation="pulse" animation="pulse"
class="h-100"
[theme]="{ [theme]="{
width: '100%' width: '100%'
}" }"
></ngx-skeleton-loader> ></ngx-skeleton-loader>
<div <div class="align-items-center d-flex w-100" id="svgMap"></div>
class="align-items-center d-flex svg-map-container w-100"
id="svgMap"
></div>
<link <link
href="https://cdn.jsdelivr.net/gh/StephanWagner/svgMap@v2.0.3/dist/svgMap.min.css" href="https://cdn.jsdelivr.net/gh/StephanWagner/svgMap@v2.0.3/dist/svgMap.min.css"

9
apps/client/src/app/components/world-map-chart/world-map-chart.component.scss

@ -1,13 +1,14 @@
:host { :host {
display: block; display: block;
height: 100%;
.svg-map-container {
aspect-ratio: 16 / 9;
}
// @import '~svgmap/dist/svgMap.min.css'; // @import '~svgmap/dist/svgMap.min.css';
::ng-deep { ::ng-deep {
.loader {
height: 100% !important;
}
.svgMap-map-wrapper { .svgMap-map-wrapper {
background: transparent; background: transparent;

33
apps/client/src/app/components/world-map-chart/world-map-chart.component.ts

@ -1,5 +1,6 @@
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
ChangeDetectorRef,
Component, Component,
Input, Input,
OnChanges, OnChanges,
@ -7,6 +8,8 @@ import {
OnInit OnInit
} from '@angular/core'; } from '@angular/core';
import { primaryColorHex } from '@ghostfolio/common/config'; import { primaryColorHex } from '@ghostfolio/common/config';
import { getCssVariable, getTextColor } from '@ghostfolio/common/helper';
import { Currency } from '@prisma/client';
import svgMap from 'svgmap'; import svgMap from 'svgmap';
@Component({ @Component({
@ -16,33 +19,40 @@ import svgMap from 'svgmap';
styleUrls: ['./world-map-chart.component.scss'] styleUrls: ['./world-map-chart.component.scss']
}) })
export class WorldMapChartComponent implements OnChanges, OnDestroy, OnInit { export class WorldMapChartComponent implements OnChanges, OnDestroy, OnInit {
@Input() baseCurrency: Currency;
@Input() countries: { [code: string]: { name: string; value: number } }; @Input() countries: { [code: string]: { name: string; value: number } };
public isLoading = true; public isLoading = true;
public svgMapElement;
public constructor() {} public constructor(private changeDetectorRef: ChangeDetectorRef) {}
public ngOnInit() {} public ngOnInit() {}
public ngOnChanges() { public ngOnChanges() {
if (this.countries) { if (this.countries) {
this.destroySvgMap();
this.initialize(); this.initialize();
} }
} }
public ngOnDestroy() {} public ngOnDestroy() {
this.destroySvgMap();
}
private initialize() { private initialize() {
new svgMap({ this.svgMapElement = new svgMap({
colorMax: primaryColorHex, colorMax: primaryColorHex,
colorMin: '#d3f4f3', colorMin: '#d3f4f3',
colorNoData: '#eeeeee', colorNoData: `rgba(${getTextColor()}, ${getCssVariable(
'--palette-foreground-divider-alpha'
)})`,
data: { data: {
applyData: 'value', applyData: 'value',
data: { data: {
value: { value: {
format: '{0}', format: `{0} ${this.baseCurrency}`
name: 'Value'
} }
}, },
values: this.countries values: this.countries
@ -53,6 +63,17 @@ export class WorldMapChartComponent implements OnChanges, OnDestroy, OnInit {
targetElementID: 'svgMap' targetElementID: 'svgMap'
}); });
setTimeout(() => {
this.isLoading = false; this.isLoading = false;
this.changeDetectorRef.markForCheck();
}, 500);
}
private destroySvgMap() {
this.svgMapElement?.mapWrapper?.remove();
this.svgMapElement?.tooltip?.remove();
this.svgMapElement = null;
} }
} }

7
apps/client/src/app/pages/tools/analysis/analysis-page.html

@ -211,11 +211,14 @@
</mat-card> </mat-card>
</div> </div>
</div> </div>
<div class="row"> <div class="row world-map-chart">
<div class="col-lg"> <div class="col-lg">
<mat-card class="mb-3"> <mat-card class="mb-3">
<mat-card-content> <mat-card-content>
<gf-world-map-chart [countries]="countries"></gf-world-map-chart> <gf-world-map-chart
[baseCurrency]="user?.settings?.baseCurrency"
[countries]="countries"
></gf-world-map-chart>
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
</div> </div>

8
apps/client/src/app/pages/tools/analysis/analysis-page.scss

@ -7,6 +7,14 @@
} }
} }
.world-map-chart {
.mat-card {
.mat-card-content {
aspect-ratio: 16 / 9;
}
}
}
.mat-card { .mat-card {
.mat-card-header { .mat-card-header {
::ng-deep { ::ng-deep {

Loading…
Cancel
Save