208 lines
5.3 KiB
HTML
208 lines
5.3 KiB
HTML
<mat-form-field appearance="outline" class="w-100">
|
|
<input
|
|
#input
|
|
autocomplete="off"
|
|
matInput
|
|
placeholder="Search for transactions..."
|
|
(keyup)="applyFilter($event)"
|
|
/>
|
|
<ion-icon class="mr-1" matPrefix name="search-outline"></ion-icon>
|
|
</mat-form-field>
|
|
|
|
<table
|
|
class="w-100"
|
|
matSort
|
|
matSortActive="date"
|
|
matSortDirection="desc"
|
|
mat-table
|
|
[dataSource]="dataSource"
|
|
>
|
|
<ng-container matColumnDef="platform">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="d-none d-lg-table-cell text-center px-0"
|
|
i18n
|
|
mat-header-cell
|
|
>
|
|
Platform
|
|
</th>
|
|
<td *matCellDef="let element" class="d-none d-lg-table-cell px-0" mat-cell>
|
|
<div class="d-flex justify-content-center">
|
|
<gf-symbol-icon
|
|
*ngIf="element.Platform?.url"
|
|
[tooltip]="element.Platform?.name"
|
|
[url]="element.Platform?.url"
|
|
></gf-symbol-icon>
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="date">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="justify-content-center"
|
|
i18n
|
|
mat-header-cell
|
|
mat-sort-header
|
|
>
|
|
Date
|
|
</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
<div class="d-flex justify-content-center">
|
|
{{ element.date | date: defaultDateFormat }}
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="type">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="justify-content-center"
|
|
i18n
|
|
mat-header-cell
|
|
mat-sort-header
|
|
>
|
|
Type
|
|
</th>
|
|
<td mat-cell *matCellDef="let element" class="text-center">
|
|
<div
|
|
class="d-inline-flex justify-content-center pl-1 pr-2 py-1 type-badge"
|
|
[ngClass]="element.type == 'BUY' ? 'buy' : 'sell'"
|
|
>
|
|
<ion-icon
|
|
class="mr-1"
|
|
[name]="
|
|
element.type === 'BUY'
|
|
? 'arrow-forward-circle-outline'
|
|
: 'arrow-back-circle-outline'
|
|
"
|
|
></ion-icon>
|
|
<span>{{ element.type }}</span>
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="symbol">
|
|
<th *matHeaderCellDef i18n mat-header-cell mat-sort-header>Symbol</th>
|
|
<td mat-cell *matCellDef="let element">{{ element.symbol }}</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="currency">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="d-none d-lg-table-cell justify-content-center"
|
|
mat-header-cell
|
|
i18n
|
|
mat-sort-header
|
|
>
|
|
Currency
|
|
</th>
|
|
<td class="d-none d-lg-table-cell" mat-cell *matCellDef="let element">
|
|
<div class="d-flex justify-content-center">
|
|
{{ element.currency }}
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="quantity">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="d-none d-lg-table-cell justify-content-end"
|
|
i18n
|
|
mat-header-cell
|
|
mat-sort-header
|
|
>
|
|
Quantity
|
|
</th>
|
|
<td *matCellDef="let element" class="d-none d-lg-table-cell" mat-cell>
|
|
<div class="d-flex justify-content-end">
|
|
<gf-value
|
|
isCurrency="true"
|
|
[locale]="locale"
|
|
[value]="isLoading ? undefined : element.quantity"
|
|
></gf-value>
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="unitPrice">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="d-none d-lg-table-cell justify-content-end"
|
|
i18n
|
|
mat-header-cell
|
|
mat-sort-header
|
|
>
|
|
Unit Price
|
|
</th>
|
|
<td *matCellDef="let element" class="d-none d-lg-table-cell" mat-cell>
|
|
<div class="d-flex justify-content-end">
|
|
<gf-value
|
|
isCurrency="true"
|
|
[locale]="locale"
|
|
[value]="isLoading ? undefined : element.unitPrice"
|
|
></gf-value>
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="fee">
|
|
<th
|
|
*matHeaderCellDef
|
|
class="d-none d-lg-table-cell justify-content-end"
|
|
i18n
|
|
mat-header-cell
|
|
mat-sort-header
|
|
>
|
|
Fee
|
|
</th>
|
|
<td class="d-none d-lg-table-cell" mat-cell *matCellDef="let element">
|
|
<div class="d-flex justify-content-end">
|
|
<gf-value
|
|
isCurrency="true"
|
|
[locale]="locale"
|
|
[value]="isLoading ? undefined : element.fee"
|
|
></gf-value>
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="actions">
|
|
<th *matHeaderCellDef class="px-0 text-center" i18n mat-header-cell></th>
|
|
<td *matCellDef="let element" class="px-0 text-center" mat-cell>
|
|
<button
|
|
class="mx-1 no-min-width px-2"
|
|
mat-button
|
|
[matMenuTriggerFor]="accountMenu"
|
|
(click)="$event.stopPropagation()"
|
|
>
|
|
<ion-icon name="ellipsis-vertical"></ion-icon>
|
|
</button>
|
|
<mat-menu #accountMenu="matMenu" xPosition="before">
|
|
<button i18n mat-menu-item (click)="onUpdateTransaction(element)">
|
|
Edit
|
|
</button>
|
|
<button i18n mat-menu-item (click)="onDeleteTransaction(element.id)">
|
|
Delete
|
|
</button>
|
|
</mat-menu>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr>
|
|
<tr
|
|
*matRowDef="let row; columns: displayedColumns"
|
|
mat-row
|
|
(click)="onOpenPositionDialog({ symbol: row.symbol, title: 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>
|