mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
6.3 KiB
168 lines
6.3 KiB
<div class="container">
|
|
<div class="row">
|
|
<div class="col">
|
|
<gf-activities-filter
|
|
[allFilters]="allFilters"
|
|
[isLoading]="isLoading"
|
|
[placeholder]="placeholder"
|
|
(valueChanged)="filters$.next($event)"
|
|
></gf-activities-filter>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col">
|
|
<table
|
|
class="gf-table w-100"
|
|
mat-table
|
|
matSort
|
|
matSortActive="symbol"
|
|
matSortDirection="asc"
|
|
[dataSource]="dataSource"
|
|
>
|
|
<ng-container matColumnDef="symbol">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Symbol</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
|
{{ element.symbol }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="dataSource">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Data Source</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
|
{{ element.dataSource }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="assetClass">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Asset Class</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
|
{{ element.assetClass }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="assetSubClass">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Asset Sub Class</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
|
{{ element.assetSubClass }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="date">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>First Activity</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
|
{{ (element.date | date: defaultDateFormat) ?? '' }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="activityCount">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Activity Count</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1 text-right" mat-cell>
|
|
{{ element.activityCount }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="marketDataItemCount">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Historical Data</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1 text-right" mat-cell>
|
|
{{ element.marketDataItemCount }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="countriesCount">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Countries Count</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1 text-right" mat-cell>
|
|
{{ element.countriesCount }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="sectorsCount">
|
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
|
<ng-container i18n>Sectors Count</ng-container>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1 text-right" mat-cell>
|
|
{{ element.sectorsCount }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="actions">
|
|
<th *matHeaderCellDef class="px-1 text-center" mat-header-cell>
|
|
<button
|
|
class="mx-1 no-min-width px-2"
|
|
mat-button
|
|
[matMenuTriggerFor]="assetProfilesActionsMenu"
|
|
(click)="$event.stopPropagation()"
|
|
>
|
|
<ion-icon name="ellipsis-vertical"></ion-icon>
|
|
</button>
|
|
<mat-menu #assetProfilesActionsMenu="matMenu" xPosition="before">
|
|
<button mat-menu-item (click)="onGather7Days()">
|
|
<ng-container i18n>Gather Recent Data</ng-container>
|
|
</button>
|
|
<button mat-menu-item (click)="onGatherMax()">
|
|
<ng-container i18n>Gather All Data</ng-container>
|
|
</button>
|
|
<button mat-menu-item (click)="onGatherProfileData()">
|
|
<ng-container i18n>Gather Profile Data</ng-container>
|
|
</button>
|
|
</mat-menu>
|
|
</th>
|
|
<td *matCellDef="let element" class="px-1 text-center" mat-cell>
|
|
<button
|
|
class="mx-1 no-min-width px-2"
|
|
mat-button
|
|
[matMenuTriggerFor]="assetProfileActionsMenu"
|
|
(click)="$event.stopPropagation()"
|
|
>
|
|
<ion-icon name="ellipsis-vertical"></ion-icon>
|
|
</button>
|
|
<mat-menu #assetProfileActionsMenu="matMenu" xPosition="before">
|
|
<button
|
|
mat-menu-item
|
|
(click)="onGatherSymbol({dataSource: element.dataSource, symbol: element.symbol})"
|
|
>
|
|
<ng-container i18n>Gather Data</ng-container>
|
|
</button>
|
|
<button
|
|
mat-menu-item
|
|
(click)="onGatherProfileDataBySymbol({dataSource: element.dataSource, symbol: element.symbol})"
|
|
>
|
|
<ng-container i18n>Gather Profile Data</ng-container>
|
|
</button>
|
|
<button
|
|
mat-menu-item
|
|
[disabled]="element.activityCount !== 0"
|
|
(click)="onDeleteProfileData({dataSource: element.dataSource, symbol: element.symbol})"
|
|
>
|
|
<ng-container i18n>Delete</ng-container>
|
|
</button>
|
|
</mat-menu>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
|
|
<tr
|
|
*matRowDef="let row; columns: displayedColumns"
|
|
class="cursor-pointer"
|
|
mat-row
|
|
(click)="onOpenAssetProfileDialog({ dateOfFirstActivity: row.date, dataSource: row.dataSource, symbol: row.symbol })"
|
|
></tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|