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 {