Feature/Switch consistent-type-assertions eslint rule from warn to error (#3982)
* Switch consistent-type-assertions eslint rule from warn to error * Update changelog --------- Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
parent
906e526cb9
commit
6a10b932b0
@ -143,7 +143,6 @@
|
||||
// The following rules are part of @typescript-eslint/stylistic-type-checked
|
||||
// and can be remove once solved
|
||||
"@typescript-eslint/prefer-nullish-coalescing": "warn", // TODO: Requires strictNullChecks: true
|
||||
"@typescript-eslint/consistent-type-assertions": "warn",
|
||||
"@typescript-eslint/prefer-optional-chain": "warn",
|
||||
"@typescript-eslint/consistent-indexed-object-style": "warn",
|
||||
"@typescript-eslint/consistent-generic-constructors": "warn"
|
||||
|
@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## Unreleased
|
||||
|
||||
### Changed
|
||||
|
||||
- Switched the `consistent-type-assertions` rule from `warn` to `error` in the `eslint` configuration
|
||||
|
||||
## 2.119.0 - 2024-10-26
|
||||
|
||||
### Changed
|
||||
|
@ -88,7 +88,7 @@ export class AccountBalanceService {
|
||||
this.eventEmitter.emit(
|
||||
PortfolioChangedEvent.getName(),
|
||||
new PortfolioChangedEvent({
|
||||
userId: <string>where.userId
|
||||
userId: where.userId as string
|
||||
})
|
||||
);
|
||||
|
||||
|
@ -209,8 +209,8 @@ export class AccountService {
|
||||
const { data, where } = params;
|
||||
|
||||
await this.accountBalanceService.createOrUpdateAccountBalance({
|
||||
accountId: <string>data.id,
|
||||
balance: <number>data.balance,
|
||||
accountId: data.id as string,
|
||||
balance: data.balance as number,
|
||||
date: format(new Date(), DATE_FORMAT),
|
||||
userId: aUserId
|
||||
});
|
||||
|
@ -26,7 +26,7 @@ export class QueueController {
|
||||
public async deleteJobs(
|
||||
@Query('status') filterByStatus?: string
|
||||
): Promise<void> {
|
||||
const status = <JobStatus[]>filterByStatus?.split(',') ?? undefined;
|
||||
const status = (filterByStatus?.split(',') as JobStatus[]) ?? undefined;
|
||||
return this.queueService.deleteJobs({ status });
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ export class QueueController {
|
||||
public async getJobs(
|
||||
@Query('status') filterByStatus?: string
|
||||
): Promise<AdminJobs> {
|
||||
const status = <JobStatus[]>filterByStatus?.split(',') ?? undefined;
|
||||
const status = (filterByStatus?.split(',') as JobStatus[]) ?? undefined;
|
||||
return this.queueService.getJobs({ status });
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ export class AuthController {
|
||||
@Res() response: Response
|
||||
) {
|
||||
// Handles the Google OAuth2 callback
|
||||
const jwt: string = (<any>request.user).jwt;
|
||||
const jwt: string = (request.user as any).jwt;
|
||||
|
||||
if (jwt) {
|
||||
response.redirect(
|
||||
|
@ -442,10 +442,10 @@ export class BenchmarkService {
|
||||
|
||||
await this.redisCacheService.set(
|
||||
this.CACHE_KEY_BENCHMARKS,
|
||||
JSON.stringify(<BenchmarkValue>{
|
||||
JSON.stringify({
|
||||
benchmarks,
|
||||
expiration: expiration.getTime()
|
||||
}),
|
||||
} as BenchmarkValue),
|
||||
CACHE_TTL_INFINITE
|
||||
);
|
||||
}
|
||||
|
@ -410,7 +410,7 @@ export class OrderService {
|
||||
where.SymbolProfile,
|
||||
{
|
||||
AND: [
|
||||
{ dataSource: <DataSource>filterByDataSource },
|
||||
{ dataSource: filterByDataSource as DataSource },
|
||||
{ symbol: filterBySymbol }
|
||||
]
|
||||
}
|
||||
@ -419,7 +419,7 @@ export class OrderService {
|
||||
} else {
|
||||
where.SymbolProfile = {
|
||||
AND: [
|
||||
{ dataSource: <DataSource>filterByDataSource },
|
||||
{ dataSource: filterByDataSource as DataSource },
|
||||
{ symbol: filterBySymbol }
|
||||
]
|
||||
};
|
||||
@ -638,7 +638,7 @@ export class OrderService {
|
||||
{
|
||||
dataSource:
|
||||
data.SymbolProfile.connect.dataSource_symbol.dataSource,
|
||||
date: <Date>data.date,
|
||||
date: data.date as Date,
|
||||
symbol: data.SymbolProfile.connect.dataSource_symbol.symbol
|
||||
}
|
||||
],
|
||||
|
@ -796,7 +796,7 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
|
||||
[key: DateRange]: Big;
|
||||
} = {};
|
||||
|
||||
for (const dateRange of <DateRange[]>[
|
||||
for (const dateRange of [
|
||||
'1d',
|
||||
'1y',
|
||||
'5y',
|
||||
@ -812,7 +812,7 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
|
||||
// .map((date) => {
|
||||
// return format(date, 'yyyy');
|
||||
// })
|
||||
]) {
|
||||
] as DateRange[]) {
|
||||
const dateInterval = getIntervalFromDateRange(dateRange);
|
||||
const endDate = dateInterval.endDate;
|
||||
let startDate = dateInterval.startDate;
|
||||
|
@ -138,7 +138,7 @@ export class PortfolioService {
|
||||
some: {
|
||||
SymbolProfile: {
|
||||
AND: [
|
||||
{ dataSource: <DataSource>filterByDataSource },
|
||||
{ dataSource: filterByDataSource as DataSource },
|
||||
{ symbol: filterBySymbol }
|
||||
]
|
||||
}
|
||||
@ -1160,7 +1160,7 @@ export class PortfolioService {
|
||||
|
||||
public async getReport(impersonationId: string): Promise<PortfolioReport> {
|
||||
const userId = await this.getUserId(impersonationId, this.request.user.id);
|
||||
const userSettings = <UserSettings>this.request.user.Settings.settings;
|
||||
const userSettings = this.request.user.Settings.settings as UserSettings;
|
||||
|
||||
const { accounts, holdings, markets, summary } = await this.getDetails({
|
||||
impersonationId,
|
||||
|
@ -19,11 +19,11 @@ import { RedisCacheService } from './redis-cache.service';
|
||||
configurationService.get('REDIS_PASSWORD')
|
||||
);
|
||||
|
||||
return <RedisClientOptions>{
|
||||
return {
|
||||
store: redisStore,
|
||||
ttl: configurationService.get('CACHE_TTL'),
|
||||
url: `redis://${redisPassword ? `:${redisPassword}` : ''}@${configurationService.get('REDIS_HOST')}:${configurationService.get('REDIS_PORT')}/${configurationService.get('REDIS_DB')}`
|
||||
};
|
||||
} as RedisClientOptions;
|
||||
}
|
||||
}),
|
||||
ConfigurationModule
|
||||
|
@ -95,7 +95,7 @@ export class SubscriptionController {
|
||||
@Res() response: Response
|
||||
) {
|
||||
const userId = await this.subscriptionService.createSubscriptionViaStripe(
|
||||
<string>request.query.checkoutSessionId
|
||||
request.query.checkoutSessionId as string
|
||||
);
|
||||
|
||||
Logger.log(
|
||||
|
@ -31,11 +31,11 @@ export class UpdateUserSettingDto {
|
||||
@IsOptional()
|
||||
benchmark?: string;
|
||||
|
||||
@IsIn(<ColorScheme[]>['DARK', 'LIGHT'])
|
||||
@IsIn(['DARK', 'LIGHT'] as ColorScheme[])
|
||||
@IsOptional()
|
||||
colorScheme?: ColorScheme;
|
||||
|
||||
@IsIn(<DateRange[]>[
|
||||
@IsIn([
|
||||
'1d',
|
||||
'1y',
|
||||
'5y',
|
||||
@ -48,7 +48,7 @@ export class UpdateUserSettingDto {
|
||||
return format(date, 'yyyy');
|
||||
}
|
||||
)
|
||||
])
|
||||
] as DateRange[])
|
||||
@IsOptional()
|
||||
dateRange?: DateRange;
|
||||
|
||||
@ -68,7 +68,7 @@ export class UpdateUserSettingDto {
|
||||
@IsOptional()
|
||||
'filters.tags'?: string[];
|
||||
|
||||
@IsIn(<HoldingsViewMode[]>['CHART', 'TABLE'])
|
||||
@IsIn(['CHART', 'TABLE'] as HoldingsViewMode[])
|
||||
@IsOptional()
|
||||
holdingsViewMode?: HoldingsViewMode;
|
||||
|
||||
@ -100,7 +100,7 @@ export class UpdateUserSettingDto {
|
||||
@IsOptional()
|
||||
savingsRate?: number;
|
||||
|
||||
@IsIn(<ViewMode[]>['DEFAULT', 'ZEN'])
|
||||
@IsIn(['DEFAULT', 'ZEN'] as ViewMode[])
|
||||
@IsOptional()
|
||||
viewMode?: ViewMode;
|
||||
|
||||
|
@ -148,7 +148,7 @@ export class UserController {
|
||||
|
||||
const userSettings: UserSettings = merge(
|
||||
{},
|
||||
<UserSettings>this.request.user.Settings.settings,
|
||||
this.request.user.Settings.settings as UserSettings,
|
||||
data
|
||||
);
|
||||
|
||||
|
@ -116,8 +116,8 @@ export class UserService {
|
||||
accounts: Account,
|
||||
dateOfFirstActivity: firstActivity?.date ?? new Date(),
|
||||
settings: {
|
||||
...(<UserSettings>Settings.settings),
|
||||
locale: (<UserSettings>Settings.settings)?.locale ?? aLocale
|
||||
...(Settings.settings as UserSettings),
|
||||
locale: (Settings.settings as UserSettings)?.locale ?? aLocale
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -34,28 +34,28 @@ export class ApiService {
|
||||
|
||||
const filters = [
|
||||
...accountIds.map((accountId) => {
|
||||
return <Filter>{
|
||||
return {
|
||||
id: accountId,
|
||||
type: 'ACCOUNT'
|
||||
};
|
||||
} as Filter;
|
||||
}),
|
||||
...assetClasses.map((assetClass) => {
|
||||
return <Filter>{
|
||||
return {
|
||||
id: assetClass,
|
||||
type: 'ASSET_CLASS'
|
||||
};
|
||||
} as Filter;
|
||||
}),
|
||||
...assetSubClasses.map((assetClass) => {
|
||||
return <Filter>{
|
||||
return {
|
||||
id: assetClass,
|
||||
type: 'ASSET_SUB_CLASS'
|
||||
};
|
||||
} as Filter;
|
||||
}),
|
||||
...tagIds.map((tagId) => {
|
||||
return <Filter>{
|
||||
return {
|
||||
id: tagId,
|
||||
type: 'TAG'
|
||||
};
|
||||
} as Filter;
|
||||
})
|
||||
];
|
||||
|
||||
|
@ -144,21 +144,21 @@ export class MarketDataService {
|
||||
({ dataSource, date, marketPrice, symbol, state }) => {
|
||||
return this.prismaService.marketData.upsert({
|
||||
create: {
|
||||
dataSource: <DataSource>dataSource,
|
||||
date: <Date>date,
|
||||
marketPrice: <number>marketPrice,
|
||||
state: <MarketDataState>state,
|
||||
symbol: <string>symbol
|
||||
dataSource: dataSource as DataSource,
|
||||
date: date as Date,
|
||||
marketPrice: marketPrice as number,
|
||||
state: state as MarketDataState,
|
||||
symbol: symbol as string
|
||||
},
|
||||
update: {
|
||||
marketPrice: <number>marketPrice,
|
||||
state: <MarketDataState>state
|
||||
marketPrice: marketPrice as number,
|
||||
state: state as MarketDataState
|
||||
},
|
||||
where: {
|
||||
dataSource_date_symbol: {
|
||||
dataSource: <DataSource>dataSource,
|
||||
date: <Date>date,
|
||||
symbol: <string>symbol
|
||||
dataSource: dataSource as DataSource,
|
||||
date: date as Date,
|
||||
symbol: symbol as string
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -78,7 +78,7 @@ export class DataGatheringProcessor {
|
||||
public async gatherHistoricalMarketData(job: Job<IDataGatheringItem>) {
|
||||
try {
|
||||
const { dataSource, date, symbol } = job.data;
|
||||
let currentDate = parseISO(<string>(<unknown>date));
|
||||
let currentDate = parseISO(date as unknown as string);
|
||||
|
||||
Logger.log(
|
||||
`Historical market data gathering has been started for ${symbol} (${dataSource}) at ${format(
|
||||
|
@ -94,10 +94,10 @@ export class PortfolioSnapshotProcessor {
|
||||
filters: job.data.filters,
|
||||
userId: job.data.userId
|
||||
}),
|
||||
JSON.stringify(<PortfolioSnapshotValue>(<unknown>{
|
||||
JSON.stringify({
|
||||
expiration: expiration.getTime(),
|
||||
portfolioSnapshot: snapshot
|
||||
})),
|
||||
} as unknown as PortfolioSnapshotValue),
|
||||
CACHE_TTL_INFINITE
|
||||
);
|
||||
|
||||
|
@ -176,7 +176,7 @@ export class SymbolProfileService {
|
||||
countries: this.getCountries(
|
||||
symbolProfile?.countries as unknown as Prisma.JsonArray
|
||||
),
|
||||
dateOfFirstActivity: <Date>undefined,
|
||||
dateOfFirstActivity: undefined as Date,
|
||||
holdings: this.getHoldings(symbolProfile),
|
||||
scraperConfiguration: this.getScraperConfiguration(symbolProfile),
|
||||
sectors: this.getSectors(symbolProfile),
|
||||
|
@ -292,7 +292,7 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||
|
||||
const dialogRef = this.dialog.open(GfHoldingDetailDialogComponent, {
|
||||
autoFocus: false,
|
||||
data: <HoldingDetailDialogParams>{
|
||||
data: {
|
||||
dataSource,
|
||||
symbol,
|
||||
baseCurrency: this.user?.settings?.baseCurrency,
|
||||
@ -312,7 +312,7 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||
hasPermission(this.user?.permissions, permissions.updateOrder) &&
|
||||
!this.user?.settings?.isRestrictedView,
|
||||
locale: this.user?.settings?.locale
|
||||
},
|
||||
} as HoldingDetailDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
@ -178,14 +178,14 @@ export class AdminMarketDataDetailComponent implements OnChanges {
|
||||
const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice;
|
||||
|
||||
const dialogRef = this.dialog.open(MarketDataDetailDialog, {
|
||||
data: <MarketDataDetailDialogParams>{
|
||||
data: {
|
||||
marketPrice,
|
||||
currency: this.currency,
|
||||
dataSource: this.dataSource,
|
||||
dateString: `${yearMonth}-${day}`,
|
||||
symbol: this.symbol,
|
||||
user: this.user
|
||||
},
|
||||
} as MarketDataDetailDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
@ -71,36 +71,35 @@ export class AdminMarketDataComponent
|
||||
return {
|
||||
id: assetSubClass.toString(),
|
||||
label: translate(assetSubClass),
|
||||
type: <Filter['type']>'ASSET_SUB_CLASS'
|
||||
type: 'ASSET_SUB_CLASS' as Filter['type']
|
||||
};
|
||||
})
|
||||
.concat([
|
||||
{
|
||||
id: 'BENCHMARKS',
|
||||
label: $localize`Benchmarks`,
|
||||
type: <Filter['type']>'PRESET_ID'
|
||||
type: 'PRESET_ID' as Filter['type']
|
||||
},
|
||||
{
|
||||
id: 'CURRENCIES',
|
||||
label: $localize`Currencies`,
|
||||
type: <Filter['type']>'PRESET_ID'
|
||||
type: 'PRESET_ID' as Filter['type']
|
||||
},
|
||||
{
|
||||
id: 'ETF_WITHOUT_COUNTRIES',
|
||||
label: $localize`ETFs without Countries`,
|
||||
type: <Filter['type']>'PRESET_ID'
|
||||
type: 'PRESET_ID' as Filter['type']
|
||||
},
|
||||
{
|
||||
id: 'ETF_WITHOUT_SECTORS',
|
||||
label: $localize`ETFs without Sectors`,
|
||||
type: <Filter['type']>'PRESET_ID'
|
||||
type: 'PRESET_ID' as Filter['type']
|
||||
}
|
||||
]);
|
||||
public benchmarks: Partial<SymbolProfile>[];
|
||||
public currentDataSource: DataSource;
|
||||
public currentSymbol: string;
|
||||
public dataSource: MatTableDataSource<AdminMarketDataItem> =
|
||||
new MatTableDataSource();
|
||||
public dataSource = new MatTableDataSource<AdminMarketDataItem>();
|
||||
public defaultDateFormat: string;
|
||||
public deviceType: string;
|
||||
public displayedColumns: string[] = [];
|
||||
@ -375,13 +374,13 @@ export class AdminMarketDataComponent
|
||||
|
||||
const dialogRef = this.dialog.open(AssetProfileDialog, {
|
||||
autoFocus: false,
|
||||
data: <AssetProfileDialogParams>{
|
||||
data: {
|
||||
dataSource,
|
||||
symbol,
|
||||
colorScheme: this.user?.settings.colorScheme,
|
||||
deviceType: this.deviceType,
|
||||
locale: this.user?.settings?.locale
|
||||
},
|
||||
} as AssetProfileDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
@ -404,10 +403,10 @@ export class AdminMarketDataComponent
|
||||
|
||||
const dialogRef = this.dialog.open(CreateAssetProfileDialog, {
|
||||
autoFocus: false,
|
||||
data: <CreateAssetProfileDialogParams>{
|
||||
data: {
|
||||
deviceType: this.deviceType,
|
||||
locale: this.user?.settings?.locale
|
||||
},
|
||||
} as CreateAssetProfileDialogParams,
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
||||
|
@ -225,10 +225,10 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
|
||||
$localize`Please set your system message:`,
|
||||
JSON.stringify(
|
||||
this.systemMessage ??
|
||||
<SystemMessage>{
|
||||
({
|
||||
message: '⚒️ Scheduled maintenance in progress...',
|
||||
targetGroups: ['Basic', 'Premium']
|
||||
}
|
||||
} as SystemMessage)
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -98,7 +98,7 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
}
|
||||
|
||||
private initialize() {
|
||||
const benchmarkDataValues: { [date: string]: number } = {};
|
||||
const benchmarkDataValues: Record<string, number> = {};
|
||||
|
||||
for (const { date, value } of this.benchmarkDataItems) {
|
||||
benchmarkDataValues[date] = value;
|
||||
@ -133,9 +133,8 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
if (this.chartCanvas) {
|
||||
if (this.chart) {
|
||||
this.chart.data = data;
|
||||
this.chart.options.plugins.tooltip = <unknown>(
|
||||
this.getTooltipPluginConfiguration()
|
||||
);
|
||||
this.chart.options.plugins.tooltip =
|
||||
this.getTooltipPluginConfiguration() as unknown;
|
||||
this.chart.update();
|
||||
} else {
|
||||
this.chart = new Chart(this.chartCanvas.nativeElement, {
|
||||
@ -154,7 +153,7 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
interaction: { intersect: false, mode: 'index' },
|
||||
maintainAspectRatio: true,
|
||||
plugins: <unknown>{
|
||||
plugins: {
|
||||
annotation: {
|
||||
annotations: {
|
||||
yAxis: {
|
||||
@ -173,7 +172,7 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
verticalHoverLine: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`
|
||||
}
|
||||
},
|
||||
} as unknown,
|
||||
responsive: true,
|
||||
scales: {
|
||||
x: {
|
||||
@ -238,7 +237,7 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
unit: '%'
|
||||
}),
|
||||
mode: 'index',
|
||||
position: <unknown>'top',
|
||||
position: 'top' as unknown,
|
||||
xAlign: 'center',
|
||||
yAlign: 'bottom'
|
||||
};
|
||||
|
@ -148,7 +148,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
|
||||
|
||||
public ngOnInit() {
|
||||
this.activityForm = this.formBuilder.group({
|
||||
tags: <string[]>[]
|
||||
tags: [] as string[]
|
||||
});
|
||||
|
||||
const filters: Filter[] = [
|
||||
|
@ -154,9 +154,8 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
if (this.chartCanvas) {
|
||||
if (this.chart) {
|
||||
this.chart.data = chartData;
|
||||
this.chart.options.plugins.tooltip = <unknown>(
|
||||
this.getTooltipPluginConfiguration()
|
||||
);
|
||||
this.chart.options.plugins.tooltip =
|
||||
this.getTooltipPluginConfiguration() as unknown;
|
||||
|
||||
if (
|
||||
this.savingsRate &&
|
||||
@ -186,7 +185,7 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
interaction: { intersect: false, mode: 'index' },
|
||||
maintainAspectRatio: true,
|
||||
plugins: <unknown>{
|
||||
plugins: {
|
||||
annotation: {
|
||||
annotations: {
|
||||
savingsRate: this.savingsRate
|
||||
@ -227,7 +226,7 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
verticalHoverLine: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`
|
||||
}
|
||||
},
|
||||
} as unknown,
|
||||
responsive: true,
|
||||
scales: {
|
||||
x: {
|
||||
@ -294,7 +293,7 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
unit: this.isInPercent ? '%' : undefined
|
||||
}),
|
||||
mode: 'index',
|
||||
position: <unknown>'top',
|
||||
position: 'top' as unknown,
|
||||
xAlign: 'center',
|
||||
yAlign: 'bottom'
|
||||
};
|
||||
|
@ -222,7 +222,7 @@ export class AccountsPageComponent implements OnDestroy, OnInit {
|
||||
private openAccountDetailDialog(aAccountId: string) {
|
||||
const dialogRef = this.dialog.open(AccountDetailDialog, {
|
||||
autoFocus: false,
|
||||
data: <AccountDetailDialogParams>{
|
||||
data: {
|
||||
accountId: aAccountId,
|
||||
deviceType: this.deviceType,
|
||||
hasImpersonationId: this.hasImpersonationId,
|
||||
@ -230,7 +230,7 @@ export class AccountsPageComponent implements OnDestroy, OnInit {
|
||||
!this.hasImpersonationId &&
|
||||
hasPermission(this.user?.permissions, permissions.createOrder) &&
|
||||
!this.user?.settings?.isRestrictedView
|
||||
},
|
||||
} as AccountDetailDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
@ -218,10 +218,10 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
|
||||
|
||||
public onImport() {
|
||||
const dialogRef = this.dialog.open(ImportActivitiesDialog, {
|
||||
data: <ImportActivitiesDialogParams>{
|
||||
data: {
|
||||
deviceType: this.deviceType,
|
||||
user: this.user
|
||||
},
|
||||
} as ImportActivitiesDialogParams,
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
||||
@ -235,11 +235,11 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
|
||||
|
||||
public onImportDividends() {
|
||||
const dialogRef = this.dialog.open(ImportActivitiesDialog, {
|
||||
data: <ImportActivitiesDialogParams>{
|
||||
data: {
|
||||
activityTypes: ['DIVIDEND'],
|
||||
deviceType: this.deviceType,
|
||||
user: this.user
|
||||
},
|
||||
} as ImportActivitiesDialogParams,
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
||||
|
@ -505,7 +505,7 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
private openAccountDetailDialog(aAccountId: string) {
|
||||
const dialogRef = this.dialog.open(AccountDetailDialog, {
|
||||
autoFocus: false,
|
||||
data: <AccountDetailDialogParams>{
|
||||
data: {
|
||||
accountId: aAccountId,
|
||||
deviceType: this.deviceType,
|
||||
hasImpersonationId: this.hasImpersonationId,
|
||||
@ -513,7 +513,7 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
!this.hasImpersonationId &&
|
||||
hasPermission(this.user?.permissions, permissions.createOrder) &&
|
||||
!this.user?.settings?.isRestrictedView
|
||||
},
|
||||
} as AccountDetailDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
@ -230,8 +230,8 @@ export class DataService {
|
||||
public fetchActivity(aActivityId: string) {
|
||||
return this.http.get<Activity>(`/api/v1/order/${aActivityId}`).pipe(
|
||||
map((activity) => {
|
||||
activity.createdAt = parseISO(<string>(<unknown>activity.createdAt));
|
||||
activity.date = parseISO(<string>(<unknown>activity.date));
|
||||
activity.createdAt = parseISO(activity.createdAt as unknown as string);
|
||||
activity.date = parseISO(activity.date as unknown as string);
|
||||
|
||||
return activity;
|
||||
})
|
||||
@ -387,8 +387,8 @@ export class DataService {
|
||||
map((data) => {
|
||||
if (data.orders) {
|
||||
for (const order of data.orders) {
|
||||
order.createdAt = parseISO(<string>(<unknown>order.createdAt));
|
||||
order.date = parseISO(<string>(<unknown>order.date));
|
||||
order.createdAt = parseISO(order.createdAt as unknown as string);
|
||||
order.date = parseISO(order.date as unknown as string);
|
||||
}
|
||||
}
|
||||
|
||||
@ -399,9 +399,9 @@ export class DataService {
|
||||
|
||||
public fetchInfo(): InfoItem {
|
||||
const info = cloneDeep((window as any).info);
|
||||
const utmSource = <'ios' | 'trusted-web-activity'>(
|
||||
window.localStorage.getItem('utm_source')
|
||||
);
|
||||
const utmSource = window.localStorage.getItem('utm_source') as
|
||||
| 'ios'
|
||||
| 'trusted-web-activity';
|
||||
|
||||
info.globalPermissions = filterGlobalPermissions(
|
||||
info.globalPermissions,
|
||||
@ -715,9 +715,9 @@ export class DataService {
|
||||
|
||||
public updateInfo() {
|
||||
this.http.get<InfoItem>('/api/v1/info').subscribe((info) => {
|
||||
const utmSource = <'ios' | 'trusted-web-activity'>(
|
||||
window.localStorage.getItem('utm_source')
|
||||
);
|
||||
const utmSource = window.localStorage.getItem('utm_source') as
|
||||
| 'ios'
|
||||
| 'trusted-web-activity';
|
||||
|
||||
info.globalPermissions = filterGlobalPermissions(
|
||||
info.globalPermissions,
|
||||
|
@ -104,9 +104,9 @@ export class UserService extends ObservableStore<UserStoreState> {
|
||||
) {
|
||||
const dialogRef = this.dialog.open(SubscriptionInterstitialDialog, {
|
||||
autoFocus: false,
|
||||
data: <SubscriptionInterstitialDialogParams>{
|
||||
data: {
|
||||
user
|
||||
},
|
||||
} as SubscriptionInterstitialDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
@ -12,9 +12,9 @@ import { environment } from './environments/environment';
|
||||
(async () => {
|
||||
const response = await fetch('/api/v1/info');
|
||||
const info: InfoItem = await response.json();
|
||||
const utmSource = <'ios' | 'trusted-web-activity'>(
|
||||
window.localStorage.getItem('utm_source')
|
||||
);
|
||||
const utmSource = window.localStorage.getItem('utm_source') as
|
||||
| 'ios'
|
||||
| 'trusted-web-activity';
|
||||
|
||||
info.globalPermissions = filterGlobalPermissions(
|
||||
info.globalPermissions,
|
||||
|
@ -125,14 +125,14 @@ export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS';
|
||||
export const PROPERTY_STRIPE_CONFIG = 'STRIPE_CONFIG';
|
||||
export const PROPERTY_SYSTEM_MESSAGE = 'SYSTEM_MESSAGE';
|
||||
|
||||
export const QUEUE_JOB_STATUS_LIST = <JobStatus[]>[
|
||||
export const QUEUE_JOB_STATUS_LIST = [
|
||||
'active',
|
||||
'completed',
|
||||
'delayed',
|
||||
'failed',
|
||||
'paused',
|
||||
'waiting'
|
||||
];
|
||||
] as JobStatus[];
|
||||
|
||||
export const REPLACE_NAME_PARTS = [
|
||||
'Amundi Index Solutions -',
|
||||
|
@ -108,7 +108,7 @@ export function downloadAsFile({
|
||||
content = JSON.stringify(content, undefined, ' ');
|
||||
}
|
||||
|
||||
const file = new Blob([<string>content], {
|
||||
const file = new Blob([content as string], {
|
||||
type: contentType
|
||||
});
|
||||
a.href = URL.createObjectURL(file);
|
||||
|
@ -157,7 +157,7 @@ export class GfActivitiesFilterComponent implements OnChanges, OnDestroy {
|
||||
|
||||
for (const type of Object.keys(filterGroupsMap)) {
|
||||
filterGroups.push({
|
||||
name: <Filter['type']>translate(type),
|
||||
name: translate(type) as Filter['type'],
|
||||
filters: filterGroupsMap[type]
|
||||
});
|
||||
}
|
||||
|
@ -180,10 +180,10 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit {
|
||||
debounceTime(300),
|
||||
distinctUntilChanged(),
|
||||
mergeMap(async (searchTerm) => {
|
||||
const result = <ISearchResults>{
|
||||
const result = {
|
||||
assetProfiles: [],
|
||||
holdings: []
|
||||
};
|
||||
} as ISearchResults;
|
||||
|
||||
try {
|
||||
if (searchTerm) {
|
||||
|
@ -109,13 +109,13 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy {
|
||||
symbol
|
||||
}: AssetProfileIdentifier) {
|
||||
const dialogRef = this.dialog.open(GfBenchmarkDetailDialogComponent, {
|
||||
data: <BenchmarkDetailDialogParams>{
|
||||
data: {
|
||||
dataSource,
|
||||
symbol,
|
||||
colorScheme: this.user?.settings?.colorScheme,
|
||||
deviceType: this.deviceType,
|
||||
locale: this.locale
|
||||
},
|
||||
} as BenchmarkDetailDialogParams,
|
||||
height: this.deviceType === 'mobile' ? '98vh' : undefined,
|
||||
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
|
||||
});
|
||||
|
@ -172,15 +172,14 @@ export class GfLineChartComponent
|
||||
if (this.chartCanvas) {
|
||||
if (this.chart) {
|
||||
this.chart.data = data;
|
||||
this.chart.options.plugins.tooltip = <unknown>(
|
||||
this.getTooltipPluginConfiguration()
|
||||
);
|
||||
this.chart.options.plugins.tooltip =
|
||||
this.getTooltipPluginConfiguration() as unknown;
|
||||
this.chart.options.animation =
|
||||
this.isAnimated &&
|
||||
<unknown>{
|
||||
({
|
||||
x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }),
|
||||
y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' })
|
||||
};
|
||||
} as unknown);
|
||||
this.chart.update();
|
||||
} else {
|
||||
this.chart = new Chart(this.chartCanvas.nativeElement, {
|
||||
@ -188,10 +187,10 @@ export class GfLineChartComponent
|
||||
options: {
|
||||
animation:
|
||||
this.isAnimated &&
|
||||
<unknown>{
|
||||
({
|
||||
x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }),
|
||||
y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' })
|
||||
},
|
||||
} as unknown),
|
||||
aspectRatio: 16 / 9,
|
||||
elements: {
|
||||
point: {
|
||||
@ -200,7 +199,7 @@ export class GfLineChartComponent
|
||||
}
|
||||
},
|
||||
interaction: { intersect: false, mode: 'index' },
|
||||
plugins: <unknown>{
|
||||
plugins: {
|
||||
legend: {
|
||||
align: 'start',
|
||||
display: this.showLegend,
|
||||
@ -210,7 +209,7 @@ export class GfLineChartComponent
|
||||
verticalHoverLine: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`
|
||||
}
|
||||
},
|
||||
} as unknown,
|
||||
scales: {
|
||||
x: {
|
||||
border: {
|
||||
@ -325,7 +324,7 @@ export class GfLineChartComponent
|
||||
unit: this.unit
|
||||
}),
|
||||
mode: 'index',
|
||||
position: <unknown>'top',
|
||||
position: 'top' as unknown,
|
||||
xAlign: 'center',
|
||||
yAlign: 'bottom'
|
||||
};
|
||||
|
@ -304,14 +304,14 @@ export class GfPortfolioProportionChartComponent
|
||||
if (this.chartCanvas) {
|
||||
if (this.chart) {
|
||||
this.chart.data = data;
|
||||
this.chart.options.plugins.tooltip = <unknown>(
|
||||
this.getTooltipPluginConfiguration(data)
|
||||
);
|
||||
this.chart.options.plugins.tooltip = this.getTooltipPluginConfiguration(
|
||||
data
|
||||
) as unknown;
|
||||
this.chart.update();
|
||||
} else {
|
||||
this.chart = new Chart(this.chartCanvas.nativeElement, {
|
||||
data,
|
||||
options: <unknown>{
|
||||
options: {
|
||||
animation: false,
|
||||
cutout: '70%',
|
||||
layout: {
|
||||
@ -358,7 +358,7 @@ export class GfPortfolioProportionChartComponent
|
||||
legend: { display: false },
|
||||
tooltip: this.getTooltipPluginConfiguration(data)
|
||||
}
|
||||
},
|
||||
} as unknown,
|
||||
plugins: [ChartDataLabels],
|
||||
type: 'doughnut'
|
||||
});
|
||||
@ -405,7 +405,7 @@ export class GfPortfolioProportionChartComponent
|
||||
symbol = $localize`No data available`;
|
||||
}
|
||||
|
||||
const name = translate(this.positions[<string>symbol]?.name);
|
||||
const name = translate(this.positions[symbol as string]?.name);
|
||||
|
||||
let sum = 0;
|
||||
for (const item of context.dataset.data) {
|
||||
@ -414,12 +414,12 @@ export class GfPortfolioProportionChartComponent
|
||||
|
||||
const percentage = (context.parsed * 100) / sum;
|
||||
|
||||
if (<number>context.raw === Number.MAX_SAFE_INTEGER) {
|
||||
if ((context.raw as number) === Number.MAX_SAFE_INTEGER) {
|
||||
return $localize`No data available`;
|
||||
} else if (this.isInPercent) {
|
||||
return [`${name ?? symbol}`, `${percentage.toFixed(2)}%`];
|
||||
} else {
|
||||
const value = <number>context.raw;
|
||||
const value = context.raw as number;
|
||||
return [
|
||||
`${name ?? symbol}`,
|
||||
`${value.toLocaleString(this.locale, {
|
||||
|
@ -48,7 +48,7 @@ export class GfValueComponent implements OnChanges {
|
||||
if (isNumber(this.value)) {
|
||||
this.isNumber = true;
|
||||
this.isString = false;
|
||||
this.absoluteValue = Math.abs(<number>this.value);
|
||||
this.absoluteValue = Math.abs(this.value as number);
|
||||
|
||||
if (this.colorizeSign) {
|
||||
if (this.isCurrency) {
|
||||
@ -113,7 +113,7 @@ export class GfValueComponent implements OnChanges {
|
||||
this.isString = true;
|
||||
|
||||
if (this.isDate) {
|
||||
this.formattedValue = new Date(<string>this.value).toLocaleDateString(
|
||||
this.formattedValue = new Date(this.value).toLocaleDateString(
|
||||
this.locale,
|
||||
{
|
||||
day: '2-digit',
|
||||
|
Loading…
x
Reference in New Issue
Block a user