Browse Source

Refactor attributes and routes

pull/600/head
Thomas 4 years ago
parent
commit
82f645750c
  1. 14
      apps/client/src/app/app-routing.module.ts
  2. 4
      apps/client/src/app/components/home-holdings/home-holdings.html
  3. 6
      apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html
  4. 22
      apps/client/src/app/pages/portfolio/portfolio-page.html
  5. 4
      apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html
  6. 14
      apps/client/src/app/pages/portfolio/transactions/transactions-page.html
  7. 18
      libs/ui/src/lib/activities-table/activities-table.component.html
  8. 58
      libs/ui/src/lib/activities-table/activities-table.component.ts
  9. 4
      libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html

14
apps/client/src/app/app-routing.module.ts

@ -66,6 +66,13 @@ const routes: Routes = [
(m) => m.PortfolioPageModule
)
},
{
path: 'portfolio/activities',
loadChildren: () =>
import('./pages/portfolio/transactions/transactions-page.module').then(
(m) => m.TransactionsPageModule
)
},
{
path: 'portfolio/allocations',
loadChildren: () =>
@ -87,13 +94,6 @@ const routes: Routes = [
(m) => m.ReportPageModule
)
},
{
path: 'portfolio/transactions',
loadChildren: () =>
import('./pages/portfolio/transactions/transactions-page.module').then(
(m) => m.TransactionsPageModule
)
},
{
path: 'pricing',
loadChildren: () =>

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

@ -25,8 +25,8 @@
class="mt-3"
i18n
mat-button
[routerLink]="['/portfolio', 'transactions']"
>Manage Transactions...</a
[routerLink]="['/portfolio', 'activities']"
>Manage Activities...</a
>
</div>
</div>

6
apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html

@ -127,16 +127,16 @@
<gf-activities-table
*ngIf="orders?.length > 0"
[activities]="orders"
[baseCurrency]="data.baseCurrency"
[deviceType]="data.deviceType"
[hasPermissionToCreateOrder]="false"
[hasPermissionToCreateActivity]="false"
[hasPermissionToFilter]="false"
[hasPermissionToImportOrders]="false"
[hasPermissionToImportActivities]="false"
[hasPermissionToOpenDetails]="false"
[locale]="data.locale"
[showActions]="false"
[showSymbolColumn]="false"
[transactions]="orders"
></gf-activities-table>
</div>

22
apps/client/src/app/pages/portfolio/portfolio-page.html

@ -3,16 +3,16 @@
<div class="row">
<div class="col-xs-12 col-md-6">
<mat-card class="mb-3">
<h4 i18n>Transactions</h4>
<p class="mb-0">Manage your transactions.</p>
<h4 i18n>Activities</h4>
<p class="mb-0">Manage your activities.</p>
<p class="text-right">
<a
color="primary"
i18n
mat-button
[routerLink]="['/portfolio', 'transactions']"
[routerLink]="['/portfolio', 'activities']"
>
Open Transactions →
<span i18n>Open Activities</span>
<ion-icon class="ml-1" name="arrow-forward-outline"></ion-icon>
</a>
</p>
</mat-card>
@ -31,12 +31,12 @@
<p class="text-right">
<a
color="primary"
i18n
mat-button
[disabled]="hasPermissionForSubscription && user?.settings?.viewMode !== 'DEFAULT'"
[routerLink]="['/portfolio', 'allocations']"
>
Open Allocations →
<span i18n>Open Allocations</span>
<ion-icon class="ml-1" name="arrow-forward-outline"></ion-icon>
</a>
</p>
</mat-card>
@ -57,12 +57,12 @@
<p class="text-right">
<a
color="primary"
i18n
mat-button
[disabled]="hasPermissionForSubscription && user?.settings?.viewMode !== 'DEFAULT'"
[routerLink]="['/portfolio', 'analysis']"
>
Open Analysis →
<span i18n>Open Analysis</span>
<ion-icon class="ml-1" name="arrow-forward-outline"></ion-icon>
</a>
</p>
</mat-card>
@ -84,12 +84,12 @@
<p class="text-right">
<a
color="primary"
i18n
mat-button
[disabled]="hasPermissionForSubscription && user?.settings?.viewMode !== 'DEFAULT'"
[routerLink]="['/portfolio', 'report']"
>
Open X-ray →
<span i18n>Open X-ray</span>
<ion-icon class="ml-1" name="arrow-forward-outline"></ion-icon>
</a>
</p>
</mat-card>

4
apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.html

@ -1,6 +1,6 @@
<form #addTransactionForm="ngForm" class="d-flex flex-column h-100">
<h1 *ngIf="data.transaction.id" mat-dialog-title i18n>Update transaction</h1>
<h1 *ngIf="!data.transaction.id" mat-dialog-title i18n>Add transaction</h1>
<h1 *ngIf="data.transaction.id" mat-dialog-title i18n>Update activity</h1>
<h1 *ngIf="!data.transaction.id" mat-dialog-title i18n>Add activity</h1>
<div class="flex-grow-1" mat-dialog-content>
<div>
<mat-form-field appearance="outline" class="w-100">

14
apps/client/src/app/pages/portfolio/transactions/transactions-page.html

@ -1,20 +1,20 @@
<div class="container">
<div class="row mb-3">
<div class="col">
<h3 class="d-flex justify-content-center mb-3" i18n>Transactions</h3>
<h3 class="d-flex justify-content-center mb-3" i18n>Activities</h3>
<gf-activities-table
[activities]="transactions"
[baseCurrency]="user?.settings?.baseCurrency"
[deviceType]="deviceType"
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
[hasPermissionToImportOrders]="hasPermissionToImportOrders"
[hasPermissionToCreateActivity]="hasPermissionToCreateOrder"
[hasPermissionToImportActivities]="hasPermissionToImportOrders"
[locale]="user?.settings?.locale"
[showActions]="!hasImpersonationId && hasPermissionToDeleteOrder && !user.settings.isRestrictedView"
[transactions]="transactions"
(activityDeleted)="onDeleteTransaction($event)"
(activityToClone)="onCloneTransaction($event)"
(activityToUpdate)="onUpdateTransaction($event)"
(export)="onExport()"
(import)="onImport()"
(transactionDeleted)="onDeleteTransaction($event)"
(transactionToClone)="onCloneTransaction($event)"
(transactionToUpdate)="onUpdateTransaction($event)"
></gf-activities-table>
</div>
</div>

18
libs/ui/src/lib/activities-table/activities-table.component.html

@ -230,14 +230,14 @@
<button
class="mx-1 no-min-width px-2"
mat-button
[matMenuTriggerFor]="transactionsMenu"
[matMenuTriggerFor]="activitiesMenu"
(click)="$event.stopPropagation()"
>
<ion-icon name="ellipsis-vertical"></ion-icon>
</button>
<mat-menu #transactionsMenu="matMenu" xPosition="before">
<mat-menu #activitiesMenu="matMenu" xPosition="before">
<button
*ngIf="hasPermissionToImportOrders"
*ngIf="hasPermissionToImportActivities"
class="align-items-center d-flex"
mat-menu-item
(click)="onImport()"
@ -259,19 +259,19 @@
<button
class="mx-1 no-min-width px-2"
mat-button
[matMenuTriggerFor]="transactionMenu"
[matMenuTriggerFor]="activityMenu"
(click)="$event.stopPropagation()"
>
<ion-icon name="ellipsis-vertical"></ion-icon>
</button>
<mat-menu #transactionMenu="matMenu" xPosition="before">
<button i18n mat-menu-item (click)="onUpdateTransaction(element)">
<mat-menu #activityMenu="matMenu" xPosition="before">
<button i18n mat-menu-item (click)="onUpdateActivity(element)">
Edit
</button>
<button i18n mat-menu-item (click)="onCloneTransaction(element)">
<button i18n mat-menu-item (click)="onCloneActivity(element)">
Clone
</button>
<button i18n mat-menu-item (click)="onDeleteTransaction(element.id)">
<button i18n mat-menu-item (click)="onDeleteActivity(element.id)">
Delete
</button>
</mat-menu>
@ -305,7 +305,7 @@
<div
*ngIf="
dataSource.data.length === 0 && hasPermissionToCreateOrder && !isLoading
dataSource.data.length === 0 && hasPermissionToCreateActivity && !isLoading
"
class="p-3 text-center"
>

58
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -36,22 +36,22 @@ const SEARCH_STRING_SEPARATOR = ',';
templateUrl: './activities-table.component.html'
})
export class ActivitiesTableComponent implements OnChanges, OnDestroy {
@Input() activities: OrderWithAccount[];
@Input() baseCurrency: string;
@Input() deviceType: string;
@Input() hasPermissionToCreateOrder: boolean;
@Input() hasPermissionToCreateActivity: boolean;
@Input() hasPermissionToFilter = true;
@Input() hasPermissionToImportOrders: boolean;
@Input() hasPermissionToImportActivities: boolean;
@Input() hasPermissionToOpenDetails = true;
@Input() locale: string;
@Input() showActions: boolean;
@Input() showSymbolColumn = true;
@Input() transactions: OrderWithAccount[];
@Output() activityDeleted = new EventEmitter<string>();
@Output() activityToClone = new EventEmitter<OrderWithAccount>();
@Output() activityToUpdate = new EventEmitter<OrderWithAccount>();
@Output() export = new EventEmitter<void>();
@Output() import = new EventEmitter<void>();
@Output() transactionDeleted = new EventEmitter<string>();
@Output() transactionToClone = new EventEmitter<OrderWithAccount>();
@Output() transactionToUpdate = new EventEmitter<OrderWithAccount>();
@ViewChild('autocomplete') matAutocomplete: MatAutocomplete;
@ViewChild('searchInput') searchInput: ElementRef<HTMLInputElement>;
@ -148,8 +148,8 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy {
this.isLoading = true;
if (this.transactions) {
this.dataSource = new MatTableDataSource(this.transactions);
if (this.activities) {
this.dataSource = new MatTableDataSource(this.activities);
this.dataSource.filterPredicate = (data, filter) => {
const dataString = this.getFilterableValues(data)
.join(' ')
@ -167,13 +167,15 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy {
}
}
public onDeleteTransaction(aId: string) {
const confirmation = confirm(
'Do you really want to delete this transaction?'
);
public onCloneActivity(aActivity: OrderWithAccount) {
this.activityToClone.emit(aActivity);
}
public onDeleteActivity(aId: string) {
const confirmation = confirm('Do you really want to delete this activity?');
if (confirmation) {
this.transactionDeleted.emit(aId);
this.activityDeleted.emit(aId);
}
}
@ -191,12 +193,8 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy {
});
}
public onUpdateTransaction(aTransaction: OrderWithAccount) {
this.transactionToUpdate.emit(aTransaction);
}
public onCloneTransaction(aTransaction: OrderWithAccount) {
this.transactionToClone.emit(aTransaction);
public onUpdateActivity(aActivity: OrderWithAccount) {
this.activityToUpdate.emit(aActivity);
}
public ngOnDestroy() {
@ -213,7 +211,7 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy {
this.placeholder =
lowercaseSearchKeywords.length <= 0 ? SEARCH_PLACEHOLDER : '';
this.allFilters = this.getSearchableFieldValues(this.transactions).filter(
this.allFilters = this.getSearchableFieldValues(this.activities).filter(
(item) => {
return !lowercaseSearchKeywords.includes(item.trim().toLowerCase());
}
@ -222,11 +220,11 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy {
this.filters$.next(this.allFilters);
}
private getSearchableFieldValues(transactions: OrderWithAccount[]): string[] {
private getSearchableFieldValues(activities: OrderWithAccount[]): string[] {
const fieldValues = new Set<string>();
for (const transaction of transactions) {
this.getFilterableValues(transaction, fieldValues);
for (const activity of activities) {
this.getFilterableValues(activity, fieldValues);
}
return [...fieldValues]
@ -251,15 +249,15 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy {
}
private getFilterableValues(
transaction: OrderWithAccount,
activity: OrderWithAccount,
fieldValues: Set<string> = new Set<string>()
): string[] {
fieldValues.add(transaction.currency);
fieldValues.add(transaction.symbol);
fieldValues.add(transaction.type);
fieldValues.add(transaction.Account?.name);
fieldValues.add(transaction.Account?.Platform?.name);
fieldValues.add(format(transaction.date, 'yyyy'));
fieldValues.add(activity.currency);
fieldValues.add(activity.symbol);
fieldValues.add(activity.type);
fieldValues.add(activity.Account?.name);
fieldValues.add(activity.Account?.Platform?.name);
fieldValues.add(format(activity.date, 'yyyy'));
return [...fieldValues].filter((item) => {
return item !== undefined;

4
libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html

@ -5,10 +5,10 @@
<a
class="align-items-center justify-content-center"
color="primary"
[routerLink]="['/portfolio', 'transactions']"
[routerLink]="['/portfolio', 'activities']"
[queryParams]="{ createDialog: true }"
mat-button
>
<span i18n>Time to add your first transaction.</span>
<span i18n>Time to add your first activity.</span>
</a>
</div>

Loading…
Cancel
Save