From 65f750f794ef59114e27ba6c8ae3b9bb6b9a6e13 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 12 Aug 2026 10:41:18 +0200 Subject: [PATCH] Limit type filter in activities table component to used types --- apps/api/src/app/user/user.service.ts | 19 +++++++++++++++++-- .../portfolio/activities/activities-page.html | 1 + .../src/lib/interfaces/user.interface.ts | 3 ++- .../activities-table.component.html | 3 ++- .../activities-table.component.stories.ts | 1 + .../activities-table.component.ts | 19 +++++++++++-------- .../migration.sql | 11 +++++++++++ prisma/schema.prisma | 3 +-- 8 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 0a4f21190..ef186288d 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -129,7 +129,7 @@ export class UserService { const [ access, accounts, - activitiesCount, + activitiesGroupedByType, firstActivity, impersonationUser, tagsForUser @@ -150,7 +150,10 @@ export class UserService { userId: impersonationUserId || user.id } }), - this.prismaService.order.count({ + this.prismaService.order.groupBy({ + _count: { _all: true }, + by: ['type'], + orderBy: { type: 'asc' }, where: { userId: impersonationUserId || user.id } }), this.prismaService.order.findFirst({ @@ -165,6 +168,17 @@ export class UserService { this.tagService.getTagsForUser(impersonationUserId || user.id) ]); + const activitiesCount = activitiesGroupedByType.reduce( + (count, { _count }) => { + return count + _count._all; + }, + 0 + ); + + const activityTypes = activitiesGroupedByType.map(({ type }) => { + return type; + }); + const resolvedUserSettings = resolveUserSettings({ impersonationUserSettings: impersonationUser?.settings ?.settings as UserSettings, @@ -209,6 +223,7 @@ export class UserService { return { activitiesCount, + activityTypes, id, permissions, referralPartners, diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.html b/apps/client/src/app/pages/portfolio/activities/activities-page.html index c69437742..3e7e00710 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.html +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3,6 +3,7 @@

Activities

[]; accounts: AccountWithPlatform[]; activitiesCount: number; + activityTypes: ActivityType[]; dateOfFirstActivity: Date; id: string; permissions: string[]; 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 9c10b5cb7..67fcef244 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -7,7 +7,8 @@ Type @for ( - activityType of activityTypesTranslationMap | keyvalue: sortByValue; + activityType of activityTypesTranslationMap() + | keyvalue: sortByValue; track activityType.key ) { diff --git a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts index c5a0e58c2..b83555be1 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts @@ -483,6 +483,7 @@ export const Actions: Story = { export const Toolbar: Story = { args: { dataSource, + activityTypes: ['BUY', 'DIVIDEND', 'SELL'], baseCurrency: 'USD', deviceType: 'desktop', hasActivities: true, 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 3b354b5aa..4794acc3e 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -139,7 +139,6 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; - public activityTypesTranslationMap = new Map(); public hasDrafts = false; public hasErrors = false; public isDraftActivity = isDraftActivity; @@ -147,6 +146,7 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { public selectedRows = new SelectionModel(true, []); public typesFilter = new FormControl([]); + public readonly activityTypes = input([]); public readonly dataSource = input.required< MatTableDataSource | undefined >(); @@ -173,6 +173,16 @@ 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 displayedColumns = computed(() => { let columns = [ 'select', @@ -220,13 +230,6 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { private readonly notificationService = inject(NotificationService); public constructor(private destroyRef: DestroyRef) { - for (const type of Object.keys(ActivityType) as ActivityType[]) { - this.activityTypesTranslationMap.set( - ActivityType[type], - translate(ActivityType[type]) - ); - } - addIcons({ alertCircleOutline, calendarClearOutline, diff --git a/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql b/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql new file mode 100644 index 000000000..137bc6185 --- /dev/null +++ b/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql @@ -0,0 +1,11 @@ +-- DropIndex +DROP INDEX "Order_symbolProfileId_idx"; + +-- DropIndex +DROP INDEX "Order_type_idx"; + +-- DropIndex +DROP INDEX "Order_userId_idx"; + +-- CreateIndex +CREATE INDEX "Order_userId_type_idx" ON "Order"("userId", "type"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ca394887f..bcff21e62 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -198,8 +198,7 @@ model Order { @@index([accountId]) @@index([date]) @@index([symbolProfileId]) - @@index([type]) - @@index([userId]) + @@index([userId, type]) } model Platform {