diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 7f06dbcb4..dde9b9e71 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -61,7 +61,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { InjectThrottlerStorage, ThrottlerStorage } from '@nestjs/throttler'; import { Prisma, Role, User } from '@prisma/client'; -import { differenceInDays, subDays } from 'date-fns'; +import { differenceInDays, min, subDays } from 'date-fns'; import { isNil, without } from 'lodash'; import { createHmac } from 'node:crypto'; @@ -171,8 +171,16 @@ export class UserService { }) .sort(); + const datesOfFirstActivityByType = activitiesGroupedByType.map( + ({ _min }) => { + return _min.date; + } + ); + const dateOfFirstActivity = - activitiesGroupedByType[0]?._min.date ?? new Date(); + datesOfFirstActivityByType.length > 0 + ? min(datesOfFirstActivityByType) + : new Date(); const resolvedUserSettings = resolveUserSettings({ impersonationUserSettings: impersonationUser?.settings diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 22585efc6..e85c2bf6b 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -647,7 +647,12 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.dataService .postActivity(activity) - .pipe(takeUntilDestroyed(this.destroyRef)) + .pipe( + switchMap(() => { + return this.userService.get(true); + }), + takeUntilDestroyed(this.destroyRef) + ) .subscribe(() => { this.router.navigate( internalRoutes.portfolio.subRoutes.activities.routerLink diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 049324dc7..4035322c6 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -2,17 +2,11 @@ class="align-items-center d-flex justify-content-end justify-content-lg-between" >
- @if ( - hasPermissionToFilterByType && activityTypesTranslationMap().size > 0 - ) { + @if (hasPermissionToFilterByType && activityTypeOptions().length > 0) { Type - @for ( - activityType of activityTypesTranslationMap() - | keyvalue: sortByValue; - track activityType.key - ) { + @for (activityType of activityTypeOptions(); track activityType.key) { {{ activityType.value }} diff --git a/libs/ui/src/lib/activities-table/activities-table.component.ts b/libs/ui/src/lib/activities-table/activities-table.component.ts index a45eeffd9..066984839 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -173,14 +173,14 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { return routerLinks; }); - protected readonly activityTypesTranslationMap = computed(() => { - const translationMap = new Map(); - - for (const activityType of this.activityTypes() ?? []) { - translationMap.set(activityType, translate(activityType)); - } - - return translationMap; + protected readonly activityTypeOptions = computed(() => { + return (this.activityTypes() ?? []) + .map((activityType) => { + return { key: activityType, value: translate(activityType) }; + }) + .sort((a, b) => { + return a.value.localeCompare(b.value); + }); }); protected readonly displayedColumns = computed(() => { @@ -387,13 +387,6 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { }); } - public sortByValue( - a: { key: ActivityType; value: string }, - b: { key: ActivityType; value: string } - ) { - return a.value.localeCompare(b.value); - } - public toggleAllRows() { if (this.areAllRowsSelected()) { this.selectedRows.clear(); diff --git a/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql b/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql index b1796c864..5e5624dc0 100644 --- a/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql +++ b/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql @@ -8,7 +8,10 @@ DROP INDEX "Order_type_idx"; DROP INDEX "Order_userId_idx"; -- CreateIndex -CREATE INDEX "Order_symbolProfileId_idx" ON "Order"("symbolProfileId"); +CREATE INDEX "Order_symbolProfileId_date_idx" ON "Order"("symbolProfileId", "date"); -- CreateIndex CREATE INDEX "Order_userId_date_type_idx" ON "Order"("userId", "date", "type"); + +-- CreateIndex +CREATE INDEX "Order_userId_type_idx" ON "Order"("userId", "type"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 31e674717..cb19201c1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -197,8 +197,9 @@ model Order { @@index([accountId]) @@index([date]) - @@index([symbolProfileId]) + @@index([symbolProfileId, date]) @@index([userId, date, type]) + @@index([userId, type]) } model Platform {