mirror of https://github.com/ghostfolio/ghostfolio
Thomas Kaul
2 years ago
committed by
GitHub
12 changed files with 231 additions and 230 deletions
@ -1,173 +0,0 @@ |
|||||
<table |
|
||||
class="gf-table w-100" |
|
||||
mat-table |
|
||||
matSort |
|
||||
matSortActive="allocationCurrent" |
|
||||
matSortDirection="desc" |
|
||||
[dataSource]="dataSource" |
|
||||
> |
|
||||
<ng-container matColumnDef="icon"> |
|
||||
<th *matHeaderCellDef class="px-1" mat-header-cell></th> |
|
||||
<td *matCellDef="let element" class="px-1 text-center" mat-cell> |
|
||||
<gf-symbol-icon |
|
||||
[dataSource]="element.dataSource" |
|
||||
[symbol]="element.symbol" |
|
||||
[tooltip]="element.name" |
|
||||
></gf-symbol-icon> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<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> |
|
||||
<span [title]="element.name">{{ element.symbol | gfSymbol }}</span> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<ng-container matColumnDef="name"> |
|
||||
<th |
|
||||
*matHeaderCellDef |
|
||||
class="d-none d-lg-table-cell px-1" |
|
||||
mat-header-cell |
|
||||
mat-sort-header |
|
||||
> |
|
||||
<ng-container i18n>Name</ng-container> |
|
||||
</th> |
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell> |
|
||||
<ng-container *ngIf="element.name !== element.symbol">{{ |
|
||||
element.name |
|
||||
}}</ng-container> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<ng-container matColumnDef="dateOfFirstActivity"> |
|
||||
<th |
|
||||
*matHeaderCellDef |
|
||||
class="d-none d-lg-table-cell justify-content-end px-1" |
|
||||
mat-header-cell |
|
||||
mat-sort-header |
|
||||
> |
|
||||
<ng-container i18n>First Activity</ng-container> |
|
||||
</th> |
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell> |
|
||||
<div class="d-flex justify-content-end"> |
|
||||
<gf-value |
|
||||
[isDate]="element.dateOfFirstActivity ? true : false" |
|
||||
[locale]="locale" |
|
||||
[value]="element.dateOfFirstActivity ?? ''" |
|
||||
></gf-value> |
|
||||
</div> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<ng-container matColumnDef="value"> |
|
||||
<th |
|
||||
*matHeaderCellDef |
|
||||
class="d-none d-lg-table-cell justify-content-end px-1" |
|
||||
mat-header-cell |
|
||||
mat-sort-header |
|
||||
> |
|
||||
<ng-container i18n>Value</ng-container> |
|
||||
</th> |
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell> |
|
||||
<div class="d-flex justify-content-end"> |
|
||||
<gf-value |
|
||||
[isCurrency]="true" |
|
||||
[locale]="locale" |
|
||||
[value]="isLoading ? undefined : element.value" |
|
||||
></gf-value> |
|
||||
</div> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<ng-container matColumnDef="allocationCurrent"> |
|
||||
<th |
|
||||
*matHeaderCellDef |
|
||||
class="justify-content-end px-1" |
|
||||
mat-header-cell |
|
||||
mat-sort-header |
|
||||
> |
|
||||
<ng-container i18n>Allocation</ng-container> |
|
||||
</th> |
|
||||
<td *matCellDef="let element" class="px-1" mat-cell> |
|
||||
<div class="d-flex justify-content-end"> |
|
||||
<gf-value |
|
||||
[isPercent]="true" |
|
||||
[locale]="locale" |
|
||||
[value]="isLoading ? undefined : element.allocationCurrent" |
|
||||
></gf-value> |
|
||||
</div> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<ng-container matColumnDef="performance"> |
|
||||
<th |
|
||||
*matHeaderCellDef |
|
||||
class="d-none d-lg-table-cell px-1 text-right" |
|
||||
mat-header-cell |
|
||||
mat-sort-header="netPerformancePercent" |
|
||||
> |
|
||||
<ng-container i18n>Performance</ng-container> |
|
||||
</th> |
|
||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell> |
|
||||
<div class="d-flex justify-content-end"> |
|
||||
<gf-value |
|
||||
[colorizeSign]="true" |
|
||||
[isPercent]="true" |
|
||||
[locale]="locale" |
|
||||
[value]="isLoading ? undefined : element.netPerformancePercent" |
|
||||
></gf-value> |
|
||||
</div> |
|
||||
</td> |
|
||||
</ng-container> |
|
||||
|
|
||||
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr> |
|
||||
<tr |
|
||||
*matRowDef="let row; columns: displayedColumns" |
|
||||
mat-row |
|
||||
[ngClass]="{ |
|
||||
'cursor-pointer': |
|
||||
hasPermissionToShowValues && |
|
||||
!ignoreAssetSubClasses.includes(row.assetSubClass) |
|
||||
}" |
|
||||
(click)=" |
|
||||
hasPermissionToShowValues && |
|
||||
!ignoreAssetSubClasses.includes(row.assetSubClass) && |
|
||||
onOpenPositionDialog({ dataSource: row.dataSource, symbol: row.symbol }) |
|
||||
" |
|
||||
></tr> |
|
||||
</table> |
|
||||
|
|
||||
<ngx-skeleton-loader |
|
||||
*ngIf="isLoading" |
|
||||
animation="pulse" |
|
||||
class="px-4 py-3" |
|
||||
[theme]="{ |
|
||||
height: '1.5rem', |
|
||||
width: '100%' |
|
||||
}" |
|
||||
></ngx-skeleton-loader> |
|
||||
|
|
||||
<div |
|
||||
*ngIf="dataSource.data.length > pageSize && !isLoading" |
|
||||
class="my-3 text-center" |
|
||||
> |
|
||||
<button mat-stroked-button (click)="onShowAllPositions()"> |
|
||||
<ng-container i18n>Show all</ng-container> |
|
||||
</button> |
|
||||
</div> |
|
||||
|
|
||||
<div |
|
||||
*ngIf=" |
|
||||
dataSource.data.length === 0 && hasPermissionToCreateActivity && !isLoading |
|
||||
" |
|
||||
class="p-3 text-center" |
|
||||
> |
|
||||
<gf-no-transactions-info-indicator |
|
||||
[hasBorder]="false" |
|
||||
></gf-no-transactions-info-indicator> |
|
||||
</div> |
|
||||
|
|
||||
<mat-paginator class="d-none" [pageSize]="pageSize"></mat-paginator> |
|
@ -1,33 +0,0 @@ |
|||||
@import '~apps/client/src/styles/ghostfolio-style'; |
|
||||
|
|
||||
:host { |
|
||||
display: block; |
|
||||
|
|
||||
::ng-deep { |
|
||||
.mat-form-field-infix { |
|
||||
border-top: 0 solid transparent !important; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.mat-table { |
|
||||
th { |
|
||||
::ng-deep { |
|
||||
.mat-sort-header-container { |
|
||||
justify-content: inherit; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.mat-row { |
|
||||
&.cursor-pointer { |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
:host-context(.is-dark-theme) { |
|
||||
.mat-form-field { |
|
||||
color: rgba(var(--light-primary-text)); |
|
||||
} |
|
||||
} |
|
@ -0,0 +1,184 @@ |
|||||
|
<div class="holdings"> |
||||
|
<table |
||||
|
class="gf-table w-100" |
||||
|
mat-table |
||||
|
matSort |
||||
|
matSortActive="allocationCurrent" |
||||
|
matSortDirection="desc" |
||||
|
[dataSource]="dataSource" |
||||
|
> |
||||
|
<ng-container matColumnDef="icon"> |
||||
|
<th *matHeaderCellDef class="px-1" mat-header-cell></th> |
||||
|
<td *matCellDef="let element" class="px-1 text-center" mat-cell> |
||||
|
<gf-symbol-icon |
||||
|
[dataSource]="element.dataSource" |
||||
|
[symbol]="element.symbol" |
||||
|
[tooltip]="element.name" |
||||
|
></gf-symbol-icon> |
||||
|
</td> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container matColumnDef="nameWithSymbol"> |
||||
|
<th |
||||
|
*matHeaderCellDef |
||||
|
class="px-1" |
||||
|
mat-header-cell |
||||
|
mat-sort-header="symbol" |
||||
|
> |
||||
|
<ng-container i18n>Name</ng-container> |
||||
|
</th> |
||||
|
<td *matCellDef="let element" class="px-1" mat-cell> |
||||
|
<div *ngIf="element.name !== element.symbol" class="text-truncate"> |
||||
|
{{ element.name }} |
||||
|
</div> |
||||
|
<div> |
||||
|
<small class="text-muted">{{ element.symbol }}</small> |
||||
|
</div> |
||||
|
</td> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container matColumnDef="dateOfFirstActivity"> |
||||
|
<th |
||||
|
*matHeaderCellDef |
||||
|
class="d-none d-lg-table-cell justify-content-end px-1" |
||||
|
mat-header-cell |
||||
|
mat-sort-header |
||||
|
> |
||||
|
<ng-container i18n>First Activity</ng-container> |
||||
|
</th> |
||||
|
<td |
||||
|
*matCellDef="let element" |
||||
|
class="d-none d-lg-table-cell px-1" |
||||
|
mat-cell |
||||
|
> |
||||
|
<div class="d-flex justify-content-end"> |
||||
|
<gf-value |
||||
|
[isDate]="element.dateOfFirstActivity ? true : false" |
||||
|
[locale]="locale" |
||||
|
[value]="element.dateOfFirstActivity ?? ''" |
||||
|
></gf-value> |
||||
|
</div> |
||||
|
</td> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container matColumnDef="value"> |
||||
|
<th |
||||
|
*matHeaderCellDef |
||||
|
class="d-none d-lg-table-cell justify-content-end px-1" |
||||
|
mat-header-cell |
||||
|
mat-sort-header |
||||
|
> |
||||
|
<ng-container i18n>Value</ng-container> |
||||
|
</th> |
||||
|
<td |
||||
|
*matCellDef="let element" |
||||
|
class="d-none d-lg-table-cell px-1" |
||||
|
mat-cell |
||||
|
> |
||||
|
<div class="d-flex justify-content-end"> |
||||
|
<gf-value |
||||
|
[isCurrency]="true" |
||||
|
[locale]="locale" |
||||
|
[value]="isLoading ? undefined : element.value" |
||||
|
></gf-value> |
||||
|
</div> |
||||
|
</td> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container matColumnDef="allocationCurrent"> |
||||
|
<th |
||||
|
*matHeaderCellDef |
||||
|
class="justify-content-end px-1" |
||||
|
mat-header-cell |
||||
|
mat-sort-header |
||||
|
> |
||||
|
<ng-container i18n>Allocation</ng-container> |
||||
|
</th> |
||||
|
<td *matCellDef="let element" class="px-1" mat-cell> |
||||
|
<div class="d-flex justify-content-end"> |
||||
|
<gf-value |
||||
|
[isPercent]="true" |
||||
|
[locale]="locale" |
||||
|
[value]="isLoading ? undefined : element.allocationCurrent" |
||||
|
></gf-value> |
||||
|
</div> |
||||
|
</td> |
||||
|
</ng-container> |
||||
|
|
||||
|
<ng-container matColumnDef="performance"> |
||||
|
<th |
||||
|
*matHeaderCellDef |
||||
|
class="d-none d-lg-table-cell px-1 text-right" |
||||
|
mat-header-cell |
||||
|
mat-sort-header="netPerformancePercent" |
||||
|
> |
||||
|
<ng-container i18n>Performance</ng-container> |
||||
|
</th> |
||||
|
<td |
||||
|
*matCellDef="let element" |
||||
|
class="d-none d-lg-table-cell px-1" |
||||
|
mat-cell |
||||
|
> |
||||
|
<div class="d-flex justify-content-end"> |
||||
|
<gf-value |
||||
|
[colorizeSign]="true" |
||||
|
[isPercent]="true" |
||||
|
[locale]="locale" |
||||
|
[value]="isLoading ? undefined : element.netPerformancePercent" |
||||
|
></gf-value> |
||||
|
</div> |
||||
|
</td> |
||||
|
</ng-container> |
||||
|
|
||||
|
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr> |
||||
|
<tr |
||||
|
*matRowDef="let row; columns: displayedColumns" |
||||
|
mat-row |
||||
|
[ngClass]="{ |
||||
|
'cursor-pointer': |
||||
|
hasPermissionToShowValues && |
||||
|
!ignoreAssetSubClasses.includes(row.assetSubClass) |
||||
|
}" |
||||
|
(click)=" |
||||
|
hasPermissionToShowValues && |
||||
|
!ignoreAssetSubClasses.includes(row.assetSubClass) && |
||||
|
onOpenPositionDialog({ |
||||
|
dataSource: row.dataSource, |
||||
|
symbol: row.symbol |
||||
|
}) |
||||
|
" |
||||
|
></tr> |
||||
|
</table> |
||||
|
</div> |
||||
|
|
||||
|
<mat-paginator class="d-none" [pageSize]="pageSize"></mat-paginator> |
||||
|
|
||||
|
<ngx-skeleton-loader |
||||
|
*ngIf="isLoading" |
||||
|
animation="pulse" |
||||
|
class="px-4 py-3" |
||||
|
[theme]="{ |
||||
|
height: '1.5rem', |
||||
|
width: '100%' |
||||
|
}" |
||||
|
></ngx-skeleton-loader> |
||||
|
|
||||
|
<div |
||||
|
*ngIf="dataSource.data.length > pageSize && !isLoading" |
||||
|
class="my-3 text-center" |
||||
|
> |
||||
|
<button mat-stroked-button (click)="onShowAllPositions()"> |
||||
|
<ng-container i18n>Show all</ng-container> |
||||
|
</button> |
||||
|
</div> |
||||
|
|
||||
|
<div |
||||
|
*ngIf=" |
||||
|
dataSource.data.length === 0 && hasPermissionToCreateActivity && !isLoading |
||||
|
" |
||||
|
class="p-3 text-center" |
||||
|
> |
||||
|
<gf-no-transactions-info-indicator |
||||
|
[hasBorder]="false" |
||||
|
></gf-no-transactions-info-indicator> |
||||
|
</div> |
@ -0,0 +1,25 @@ |
|||||
|
@import '~apps/client/src/styles/ghostfolio-style'; |
||||
|
|
||||
|
:host { |
||||
|
display: block; |
||||
|
|
||||
|
.holdings { |
||||
|
overflow-x: auto; |
||||
|
|
||||
|
.mat-table { |
||||
|
th { |
||||
|
::ng-deep { |
||||
|
.mat-sort-header-container { |
||||
|
justify-content: inherit; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.mat-row { |
||||
|
&.cursor-pointer { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue