Thomas
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with
53 additions and
43 deletions
-
apps/api/src/app/admin/admin.controller.ts
-
apps/api/src/app/experimental/experimental.controller.ts
-
apps/api/src/app/order/order.controller.ts
-
apps/api/src/app/portfolio/portfolio.controller.ts
-
apps/api/src/app/user/user.controller.ts
-
apps/api/src/app/user/user.service.ts
-
apps/api/src/models/portfolio.spec.ts
-
apps/api/src/models/portfolio.ts
-
apps/api/src/models/rule.ts
-
apps/api/src/services/data-gathering.service.ts
-
apps/api/src/services/data-provider/rakuten-rapid-api/rakuten-rapid-api.service.ts
-
apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts
-
apps/client/src/app/adapter/date-formats.ts
-
apps/client/src/app/app.component.ts
-
apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.ts
-
apps/client/src/app/components/header/header.component.ts
-
apps/client/src/app/components/investment-chart/investment-chart.component.ts
-
apps/client/src/app/components/line-chart/line-chart.component.ts
-
apps/client/src/app/components/portfolio-positions-chart/portfolio-positions-chart.component.ts
-
apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.component.ts
-
apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.module.ts
-
apps/client/src/app/components/position/position.module.ts
-
apps/client/src/app/components/positions-table/positions-table.module.ts
-
apps/client/src/app/components/transactions-table/transactions-table.component.ts
-
apps/client/src/app/components/transactions-table/transactions-table.module.ts
-
apps/client/src/app/components/value/value.component.ts
-
apps/client/src/app/pages/about/about-page.component.ts
-
apps/client/src/app/pages/account/account-page.component.ts
-
apps/client/src/app/pages/admin/admin-page.component.ts
-
apps/client/src/app/pages/home/home-page.component.ts
-
apps/client/src/app/pages/transactions/transactions-page.component.ts
|
|
@ -1,3 +1,4 @@ |
|
|
|
import { getPermissions, hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
Controller, |
|
|
|
Get, |
|
|
@ -10,7 +11,6 @@ import { REQUEST } from '@nestjs/core'; |
|
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
|
import { RequestWithUser } from 'apps/api/src/app/interfaces/request-with-user.type'; |
|
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
|
import { getPermissions, hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { DataGatheringService } from '../../services/data-gathering.service'; |
|
|
|
import { AdminService } from './admin.service'; |
|
|
|
|
|
@ -1,3 +1,8 @@ |
|
|
|
import { |
|
|
|
baseCurrency, |
|
|
|
benchmarks, |
|
|
|
isApiTokenAuthorized |
|
|
|
} from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
Body, |
|
|
|
Controller, |
|
|
@ -12,8 +17,6 @@ import { REQUEST } from '@nestjs/core'; |
|
|
|
import { RequestWithUser } from 'apps/api/src/app/interfaces/request-with-user.type'; |
|
|
|
import { parse } from 'date-fns'; |
|
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
|
import { baseCurrency, benchmarks } from 'libs/helper/src'; |
|
|
|
import { isApiTokenAuthorized } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { CreateOrderDto } from './create-order.dto'; |
|
|
|
import { ExperimentalService } from './experimental.service'; |
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
import { getPermissions, hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
Body, |
|
|
|
Controller, |
|
|
@ -17,7 +18,6 @@ import { Order as OrderModel } from '@prisma/client'; |
|
|
|
import { RequestWithUser } from 'apps/api/src/app/interfaces/request-with-user.type'; |
|
|
|
import { parseISO } from 'date-fns'; |
|
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
|
import { getPermissions, hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { nullifyValuesInObjects } from '../../helper/object.helper'; |
|
|
|
import { ImpersonationService } from '../../services/impersonation.service'; |
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
import { getPermissions, hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
Controller, |
|
|
|
Get, |
|
|
@ -13,7 +14,6 @@ import { REQUEST } from '@nestjs/core'; |
|
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
|
import { Response } from 'express'; |
|
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
|
import { getPermissions, hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { |
|
|
|
hasNotDefinedValuesInObject, |
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
import { getPermissions, hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
Body, |
|
|
|
Controller, |
|
|
@ -15,7 +16,6 @@ import { AuthGuard } from '@nestjs/passport'; |
|
|
|
import { Provider } from '@prisma/client'; |
|
|
|
import { RequestWithUser } from 'apps/api/src/app/interfaces/request-with-user.type'; |
|
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
|
import { getPermissions, hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { UserItem } from './interfaces/user-item.interface'; |
|
|
|
import { User } from './interfaces/user.interface'; |
|
|
|
|
|
@ -1,8 +1,12 @@ |
|
|
|
import { |
|
|
|
getPermissions, |
|
|
|
locale, |
|
|
|
permissions, |
|
|
|
resetHours |
|
|
|
} from '@ghostfolio/helper'; |
|
|
|
import { Injectable } from '@nestjs/common'; |
|
|
|
import { Currency, Prisma, Provider, User } from '@prisma/client'; |
|
|
|
import { add } from 'date-fns'; |
|
|
|
import { locale, permissions, resetHours } from 'libs/helper/src'; |
|
|
|
import { getPermissions } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { ConfigurationService } from '../../services/configuration.service'; |
|
|
|
import { PrismaService } from '../../services/prisma.service'; |
|
|
|
|
|
@ -1,8 +1,6 @@ |
|
|
|
import { baseCurrency, getUtc, getYesterday } from '@ghostfolio/helper'; |
|
|
|
import { Test } from '@nestjs/testing'; |
|
|
|
import { Currency, Role, Type } from '@prisma/client'; |
|
|
|
import { baseCurrency } from 'libs/helper/src'; |
|
|
|
import { getYesterday } from 'libs/helper/src'; |
|
|
|
import { getUtc } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { ConfigurationService } from '../services/configuration.service'; |
|
|
|
import { DataProviderService } from '../services/data-provider.service'; |
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
import { getToday, getYesterday, resetHours } from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
PortfolioItem, |
|
|
|
Position |
|
|
@ -18,7 +19,6 @@ import { |
|
|
|
setMonth, |
|
|
|
sub |
|
|
|
} from 'date-fns'; |
|
|
|
import { getToday, getYesterday, resetHours } from 'libs/helper/src'; |
|
|
|
import { cloneDeep, isEmpty } from 'lodash'; |
|
|
|
import * as roundTo from 'round-to'; |
|
|
|
|
|
|
|
|
|
@ -1,5 +1,5 @@ |
|
|
|
import { groupBy } from '@ghostfolio/helper'; |
|
|
|
import { Currency } from '@prisma/client'; |
|
|
|
import { groupBy } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { PortfolioPosition } from '../app/portfolio/interfaces/portfolio-position.interface'; |
|
|
|
import { ExchangeRateDataService } from '../services/exchange-rate-data.service'; |
|
|
|
|
|
@ -1,3 +1,9 @@ |
|
|
|
import { |
|
|
|
benchmarks, |
|
|
|
currencyPairs, |
|
|
|
getUtc, |
|
|
|
resetHours |
|
|
|
} from '@ghostfolio/helper'; |
|
|
|
import { Injectable } from '@nestjs/common'; |
|
|
|
import { |
|
|
|
differenceInHours, |
|
|
@ -8,8 +14,6 @@ import { |
|
|
|
isBefore, |
|
|
|
subDays |
|
|
|
} from 'date-fns'; |
|
|
|
import { benchmarks, currencyPairs } from 'libs/helper/src'; |
|
|
|
import { getUtc, resetHours } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { ConfigurationService } from './configuration.service'; |
|
|
|
import { DataProviderService } from './data-provider.service'; |
|
|
|
|
|
@ -1,7 +1,7 @@ |
|
|
|
import { getToday, getYesterday } from '@ghostfolio/helper'; |
|
|
|
import { Injectable } from '@nestjs/common'; |
|
|
|
import * as bent from 'bent'; |
|
|
|
import { format, subMonths, subWeeks, subYears } from 'date-fns'; |
|
|
|
import { getToday, getYesterday } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { ConfigurationService } from '../../configuration.service'; |
|
|
|
import { DataProviderInterface } from '../../interfaces/data-provider.interface'; |
|
|
|
|
|
@ -1,6 +1,6 @@ |
|
|
|
import { isCrypto, isCurrency, parseCurrency } from '@ghostfolio/helper'; |
|
|
|
import { Injectable } from '@nestjs/common'; |
|
|
|
import { format } from 'date-fns'; |
|
|
|
import { isCrypto, isCurrency, parseCurrency } from 'libs/helper/src'; |
|
|
|
import * as yahooFinance from 'yahoo-finance'; |
|
|
|
|
|
|
|
import { DataProviderInterface } from '../../interfaces/data-provider.interface'; |
|
|
|
|
|
@ -1,7 +1,7 @@ |
|
|
|
import { |
|
|
|
DEFAULT_DATE_FORMAT, |
|
|
|
DEFAULT_DATE_FORMAT_MONTH_YEAR |
|
|
|
} from 'libs/helper/src'; |
|
|
|
} from '@ghostfolio/helper'; |
|
|
|
|
|
|
|
export const DateFormats = { |
|
|
|
display: { |
|
|
|
|
|
@ -6,11 +6,15 @@ import { |
|
|
|
OnInit |
|
|
|
} from '@angular/core'; |
|
|
|
import { NavigationEnd, Router } from '@angular/router'; |
|
|
|
import { |
|
|
|
hasPermission, |
|
|
|
permissions, |
|
|
|
primaryColorHex, |
|
|
|
secondaryColorHex |
|
|
|
} from '@ghostfolio/helper'; |
|
|
|
import { MaterialCssVarsService } from 'angular-material-css-vars'; |
|
|
|
import { InfoItem } from 'apps/api/src/app/info/interfaces/info-item.interface'; |
|
|
|
import { User } from 'apps/api/src/app/user/interfaces/user.interface'; |
|
|
|
import { primaryColorHex, secondaryColorHex } from 'libs/helper/src'; |
|
|
|
import { hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
import { Subject } from 'rxjs'; |
|
|
|
import { filter, takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
|
@ -5,7 +5,7 @@ import { |
|
|
|
OnChanges, |
|
|
|
OnInit |
|
|
|
} from '@angular/core'; |
|
|
|
import { resolveFearAndGreedIndex } from 'libs/helper/src'; |
|
|
|
import { resolveFearAndGreedIndex } from '@ghostfolio/helper'; |
|
|
|
|
|
|
|
@Component({ |
|
|
|
selector: 'gf-fear-and-greed-index', |
|
|
|
|
|
@ -6,9 +6,9 @@ import { |
|
|
|
} from '@angular/core'; |
|
|
|
import { MatDialog } from '@angular/material/dialog'; |
|
|
|
import { Router } from '@angular/router'; |
|
|
|
import { hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { InfoItem } from 'apps/api/src/app/info/interfaces/info-item.interface'; |
|
|
|
import { User } from 'apps/api/src/app/user/interfaces/user.interface'; |
|
|
|
import { hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
import { EMPTY, Subject } from 'rxjs'; |
|
|
|
import { catchError, takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
|
@ -9,6 +9,7 @@ import { |
|
|
|
OnInit, |
|
|
|
ViewChild |
|
|
|
} from '@angular/core'; |
|
|
|
import { primaryColorRgb } from '@ghostfolio/helper'; |
|
|
|
import { PortfolioItem } from 'apps/api/src/app/portfolio/interfaces/portfolio-item.interface'; |
|
|
|
import { |
|
|
|
LineController, |
|
|
@ -18,7 +19,6 @@ import { |
|
|
|
TimeScale |
|
|
|
} from 'chart.js'; |
|
|
|
import { Chart } from 'chart.js'; |
|
|
|
import { primaryColorRgb } from 'libs/helper/src'; |
|
|
|
|
|
|
|
@Component({ |
|
|
|
selector: 'gf-investment-chart', |
|
|
|
|
|
@ -9,6 +9,7 @@ import { |
|
|
|
OnInit, |
|
|
|
ViewChild |
|
|
|
} from '@angular/core'; |
|
|
|
import { primaryColorRgb, secondaryColorRgb } from '@ghostfolio/helper'; |
|
|
|
import { |
|
|
|
Chart, |
|
|
|
Filler, |
|
|
@ -18,7 +19,6 @@ import { |
|
|
|
PointElement, |
|
|
|
TimeScale |
|
|
|
} from 'chart.js'; |
|
|
|
import { primaryColorRgb, secondaryColorRgb } from 'libs/helper/src'; |
|
|
|
|
|
|
|
import { LineChartItem } from './interfaces/line-chart.interface'; |
|
|
|
|
|
|
|
|
|
@ -5,13 +5,10 @@ import { |
|
|
|
Component, |
|
|
|
Input, |
|
|
|
OnChanges, |
|
|
|
OnInit, |
|
|
|
ViewChild |
|
|
|
OnInit |
|
|
|
} from '@angular/core'; |
|
|
|
import { PortfolioItem } from 'apps/api/src/app/portfolio/interfaces/portfolio-item.interface'; |
|
|
|
import { Chart } from 'chart.js'; |
|
|
|
import { endOfDay, parseISO, startOfDay } from 'date-fns'; |
|
|
|
import { primaryColorRgb } from 'libs/helper/src'; |
|
|
|
|
|
|
|
@Component({ |
|
|
|
selector: 'gf-portfolio-positions-chart', |
|
|
|
|
|
@ -13,7 +13,7 @@ import { PositionDetailDialogParams } from './interfaces/interfaces'; |
|
|
|
|
|
|
|
@Component({ |
|
|
|
host: { class: 'd-flex flex-column h-100' }, |
|
|
|
selector: 'position-detail-dialog', |
|
|
|
selector: 'gf-position-detail-dialog', |
|
|
|
changeDetection: ChangeDetectionStrategy.OnPush, |
|
|
|
templateUrl: 'position-detail-dialog.html', |
|
|
|
styleUrls: ['./position-detail-dialog.component.scss'] |
|
|
|
|
|
@ -26,4 +26,4 @@ import { PositionDetailDialog } from './position-detail-dialog.component'; |
|
|
|
providers: [], |
|
|
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
|
|
|
}) |
|
|
|
export class PositionDetailDialogModule {} |
|
|
|
export class GfPositionDetailDialogModule {} |
|
|
|
|
|
@ -7,7 +7,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|
|
|
import { GfSymbolIconModule } from '../symbol-icon/symbol-icon.module'; |
|
|
|
import { GfTrendIndicatorModule } from '../trend-indicator/trend-indicator.module'; |
|
|
|
import { GfValueModule } from '../value/value.module'; |
|
|
|
import { PositionDetailDialogModule } from './position-detail-dialog/position-detail-dialog.module'; |
|
|
|
import { GfPositionDetailDialogModule } from './position-detail-dialog/position-detail-dialog.module'; |
|
|
|
import { PositionComponent } from './position.component'; |
|
|
|
|
|
|
|
@NgModule({ |
|
|
@ -15,12 +15,12 @@ import { PositionComponent } from './position.component'; |
|
|
|
exports: [PositionComponent], |
|
|
|
imports: [ |
|
|
|
CommonModule, |
|
|
|
GfPositionDetailDialogModule, |
|
|
|
GfSymbolIconModule, |
|
|
|
GfTrendIndicatorModule, |
|
|
|
GfValueModule, |
|
|
|
MatDialogModule, |
|
|
|
NgxSkeletonLoaderModule, |
|
|
|
PositionDetailDialogModule, |
|
|
|
RouterModule |
|
|
|
], |
|
|
|
providers: [], |
|
|
|
|
|
@ -10,7 +10,7 @@ import { RouterModule } from '@angular/router'; |
|
|
|
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|
|
|
|
|
|
|
import { GfNoTransactionsInfoModule } from '../no-transactions-info/no-transactions-info.module'; |
|
|
|
import { PositionDetailDialogModule } from '../position/position-detail-dialog/position-detail-dialog.module'; |
|
|
|
import { GfPositionDetailDialogModule } from '../position/position-detail-dialog/position-detail-dialog.module'; |
|
|
|
import { GfSymbolIconModule } from '../symbol-icon/symbol-icon.module'; |
|
|
|
import { GfValueModule } from '../value/value.module'; |
|
|
|
import { PositionsTableComponent } from './positions-table.component'; |
|
|
@ -21,6 +21,7 @@ import { PositionsTableComponent } from './positions-table.component'; |
|
|
|
imports: [ |
|
|
|
CommonModule, |
|
|
|
GfNoTransactionsInfoModule, |
|
|
|
GfPositionDetailDialogModule, |
|
|
|
GfSymbolIconModule, |
|
|
|
GfValueModule, |
|
|
|
MatButtonModule, |
|
|
@ -30,7 +31,6 @@ import { PositionsTableComponent } from './positions-table.component'; |
|
|
|
MatSortModule, |
|
|
|
MatTableModule, |
|
|
|
NgxSkeletonLoaderModule, |
|
|
|
PositionDetailDialogModule, |
|
|
|
RouterModule |
|
|
|
], |
|
|
|
providers: [], |
|
|
|
|
|
@ -13,8 +13,8 @@ import { MatDialog } from '@angular/material/dialog'; |
|
|
|
import { MatSort } from '@angular/material/sort'; |
|
|
|
import { MatTableDataSource } from '@angular/material/table'; |
|
|
|
import { ActivatedRoute, Router } from '@angular/router'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper'; |
|
|
|
import { Order as OrderModel } from '@prisma/client'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from 'libs/helper/src'; |
|
|
|
import { Subject, Subscription } from 'rxjs'; |
|
|
|
import { takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
|
@ -8,7 +8,7 @@ import { MatTableModule } from '@angular/material/table'; |
|
|
|
import { RouterModule } from '@angular/router'; |
|
|
|
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|
|
|
|
|
|
|
import { PositionDetailDialogModule } from '../position/position-detail-dialog/position-detail-dialog.module'; |
|
|
|
import { GfPositionDetailDialogModule } from '../position/position-detail-dialog/position-detail-dialog.module'; |
|
|
|
import { GfSymbolIconModule } from '../symbol-icon/symbol-icon.module'; |
|
|
|
import { GfValueModule } from '../value/value.module'; |
|
|
|
import { TransactionsTableComponent } from './transactions-table.component'; |
|
|
@ -18,6 +18,7 @@ import { TransactionsTableComponent } from './transactions-table.component'; |
|
|
|
exports: [TransactionsTableComponent], |
|
|
|
imports: [ |
|
|
|
CommonModule, |
|
|
|
GfPositionDetailDialogModule, |
|
|
|
GfSymbolIconModule, |
|
|
|
GfValueModule, |
|
|
|
MatButtonModule, |
|
|
@ -26,7 +27,6 @@ import { TransactionsTableComponent } from './transactions-table.component'; |
|
|
|
MatSortModule, |
|
|
|
MatTableModule, |
|
|
|
NgxSkeletonLoaderModule, |
|
|
|
PositionDetailDialogModule, |
|
|
|
RouterModule |
|
|
|
], |
|
|
|
providers: [], |
|
|
|
|
|
@ -5,8 +5,8 @@ import { |
|
|
|
OnChanges, |
|
|
|
OnInit |
|
|
|
} from '@angular/core'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper'; |
|
|
|
import { format, isDate } from 'date-fns'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from 'libs/helper/src'; |
|
|
|
import { isNumber } from 'lodash'; |
|
|
|
|
|
|
|
@Component({ |
|
|
|
|
|
@ -1,7 +1,7 @@ |
|
|
|
import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; |
|
|
|
import { baseCurrency } from '@ghostfolio/helper'; |
|
|
|
import { User } from 'apps/api/src/app/user/interfaces/user.interface'; |
|
|
|
import { environment } from 'apps/client/src/environments/environment'; |
|
|
|
import { baseCurrency } from 'libs/helper/src'; |
|
|
|
import { Subject } from 'rxjs'; |
|
|
|
import { takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
|
@ -1,7 +1,7 @@ |
|
|
|
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper'; |
|
|
|
import { Access } from 'apps/api/src/app/access/interfaces/access.interface'; |
|
|
|
import { User } from 'apps/api/src/app/user/interfaces/user.interface'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from 'libs/helper/src'; |
|
|
|
import { Subject } from 'rxjs'; |
|
|
|
import { takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
|
@ -1,7 +1,7 @@ |
|
|
|
import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper'; |
|
|
|
import { AdminData } from 'apps/api/src/app/admin/interfaces/admin-data.interface'; |
|
|
|
import { formatDistanceToNow, isValid, parseISO, sub } from 'date-fns'; |
|
|
|
import { DEFAULT_DATE_FORMAT } from 'libs/helper/src'; |
|
|
|
import { Subject } from 'rxjs'; |
|
|
|
import { takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
|
@ -1,6 +1,7 @@ |
|
|
|
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; |
|
|
|
import { MatDialog } from '@angular/material/dialog'; |
|
|
|
import { ActivatedRoute, Router } from '@angular/router'; |
|
|
|
import { hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { DateRange } from 'apps/api/src/app/portfolio/interfaces/date-range.type'; |
|
|
|
import { PortfolioOverview } from 'apps/api/src/app/portfolio/interfaces/portfolio-overview.interface'; |
|
|
|
import { PortfolioPerformance } from 'apps/api/src/app/portfolio/interfaces/portfolio-performance.interface'; |
|
|
@ -10,7 +11,6 @@ import { |
|
|
|
RANGE, |
|
|
|
SettingsStorageService |
|
|
|
} from 'apps/client/src/app/services/settings-storage.service'; |
|
|
|
import { hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
import { DeviceDetectorService } from 'ngx-device-detector'; |
|
|
|
import { Subject, Subscription } from 'rxjs'; |
|
|
|
import { takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
@ -1,10 +1,10 @@ |
|
|
|
import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; |
|
|
|
import { MatDialog } from '@angular/material/dialog'; |
|
|
|
import { ActivatedRoute, Router } from '@angular/router'; |
|
|
|
import { hasPermission, permissions } from '@ghostfolio/helper'; |
|
|
|
import { Order as OrderModel } from '@prisma/client'; |
|
|
|
import { UpdateOrderDto } from 'apps/api/src/app/order/update-order.dto'; |
|
|
|
import { User } from 'apps/api/src/app/user/interfaces/user.interface'; |
|
|
|
import { hasPermission, permissions } from 'libs/helper/src'; |
|
|
|
import { DeviceDetectorService } from 'ngx-device-detector'; |
|
|
|
import { Subject, Subscription } from 'rxjs'; |
|
|
|
import { takeUntil } from 'rxjs/operators'; |
|
|
|