Browse Source

Limit type filter in activities table component to used types

pull/7602/head
Thomas Kaul 1 week ago
parent
commit
c06f42ac52
  1. 14
      apps/api/src/app/user/user.service.ts
  2. 25
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  3. 2
      libs/ui/src/lib/activities-table/activities-table.component.html
  4. 2
      prisma/migrations/20260822000000_updated_indexes_of_order/migration.sql
  5. 2
      prisma/schema.prisma

14
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, min, subDays } from 'date-fns';
import { differenceInDays, subDays } from 'date-fns';
import { isNil, without } from 'lodash';
import { createHmac } from 'node:crypto';
@ -169,16 +169,10 @@ export class UserService {
return type;
});
const datesOfFirstActivityByType = activitiesGroupedByType.map(
({ _min }) => {
return _min.date;
}
);
// The groupBy is ordered by the minimum date, thus the first group
// carries the date of the first activity
const dateOfFirstActivity =
datesOfFirstActivityByType.length > 0
? min(datesOfFirstActivityByType)
: new Date();
activitiesGroupedByType[0]?._min.date ?? new Date();
const resolvedUserSettings = resolveUserSettings({
impersonationUserSettings: impersonationUser?.settings

25
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts

@ -648,17 +648,18 @@ export class GfHoldingDetailDialogComponent implements OnInit {
this.dataService
.postActivity(activity)
.pipe(
takeUntilDestroyed(this.destroyRef),
switchMap(() => {
return this.userService.get(true);
}),
takeUntilDestroyed(this.destroyRef)
})
)
.subscribe(() => {
this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink
);
this.dialogRef.close();
.subscribe({
error: () => {
this.navigateToActivities();
},
next: () => {
this.navigateToActivities();
}
});
}
@ -734,4 +735,12 @@ export class GfHoldingDetailDialogComponent implements OnInit {
{ id: this.data.symbol, type: 'SYMBOL' }
];
}
private navigateToActivities() {
this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink
);
this.dialogRef.close();
}
}

2
libs/ui/src/lib/activities-table/activities-table.component.html

@ -2,7 +2,7 @@
class="align-items-center d-flex justify-content-end justify-content-lg-between"
>
<div class="d-none d-lg-flex">
@if (hasPermissionToFilterByType && activityTypeOptions().length > 0) {
@if (hasPermissionToFilterByType && activityTypeOptions().length > 1) {
<mat-form-field appearance="outline" class="without-hint">
<mat-label i18n>Type</mat-label>
<mat-select multiple [formControl]="typesFilter">

2
prisma/migrations/20260822000000_updated_indexes_of_order/migration.sql

@ -14,4 +14,4 @@ CREATE INDEX "Order_symbolProfileId_date_idx" ON "Order"("symbolProfileId", "dat
CREATE INDEX "Order_userId_date_type_idx" ON "Order"("userId", "date", "type");
-- CreateIndex
CREATE INDEX "Order_userId_type_idx" ON "Order"("userId", "type");
CREATE INDEX "Order_userId_type_date_idx" ON "Order"("userId", "type", "date");

2
prisma/schema.prisma

@ -197,7 +197,7 @@ model Order {
@@index([date])
@@index([symbolProfileId, date])
@@index([userId, date, type])
@@index([userId, type])
@@index([userId, type, date])
}
model Platform {

Loading…
Cancel
Save