|
|
|
@ -10,6 +10,7 @@ import { |
|
|
|
} from '@ghostfolio/common/interfaces'; |
|
|
|
import { GfSymbolPipe } from '@ghostfolio/common/pipes'; |
|
|
|
import { OrderWithAccount } from '@ghostfolio/common/types'; |
|
|
|
import { translate } from '@ghostfolio/ui/i18n'; |
|
|
|
import { NotificationService } from '@ghostfolio/ui/notifications'; |
|
|
|
|
|
|
|
import { SelectionModel } from '@angular/cdk/collections'; |
|
|
|
@ -29,14 +30,17 @@ import { |
|
|
|
inject, |
|
|
|
input |
|
|
|
} from '@angular/core'; |
|
|
|
import { FormControl, ReactiveFormsModule } from '@angular/forms'; |
|
|
|
import { MatButtonModule } from '@angular/material/button'; |
|
|
|
import { MatCheckboxModule } from '@angular/material/checkbox'; |
|
|
|
import { MatFormFieldModule } from '@angular/material/form-field'; |
|
|
|
import { MatMenuModule } from '@angular/material/menu'; |
|
|
|
import { |
|
|
|
MatPaginator, |
|
|
|
MatPaginatorModule, |
|
|
|
PageEvent |
|
|
|
} from '@angular/material/paginator'; |
|
|
|
import { MatSelectModule } from '@angular/material/select'; |
|
|
|
import { |
|
|
|
MatSort, |
|
|
|
MatSortModule, |
|
|
|
@ -46,6 +50,7 @@ import { |
|
|
|
import { MatTableDataSource, MatTableModule } from '@angular/material/table'; |
|
|
|
import { MatTooltipModule } from '@angular/material/tooltip'; |
|
|
|
import { IonIcon } from '@ionic/angular/standalone'; |
|
|
|
import { Type as ActivityType } from '@prisma/client'; |
|
|
|
import { isUUID } from 'class-validator'; |
|
|
|
import { addIcons } from 'ionicons'; |
|
|
|
import { |
|
|
|
@ -82,12 +87,15 @@ import { GfValueComponent } from '../value/value.component'; |
|
|
|
IonIcon, |
|
|
|
MatButtonModule, |
|
|
|
MatCheckboxModule, |
|
|
|
MatFormFieldModule, |
|
|
|
MatMenuModule, |
|
|
|
MatPaginatorModule, |
|
|
|
MatSelectModule, |
|
|
|
MatSortModule, |
|
|
|
MatTableModule, |
|
|
|
MatTooltipModule, |
|
|
|
NgxSkeletonLoaderModule |
|
|
|
NgxSkeletonLoaderModule, |
|
|
|
ReactiveFormsModule |
|
|
|
], |
|
|
|
schemas: [CUSTOM_ELEMENTS_SCHEMA], |
|
|
|
selector: 'gf-activities-table', |
|
|
|
@ -103,6 +111,7 @@ export class GfActivitiesTableComponent |
|
|
|
@Input() hasPermissionToCreateActivity: boolean; |
|
|
|
@Input() hasPermissionToDeleteActivity: boolean; |
|
|
|
@Input() hasPermissionToExportActivities: boolean; |
|
|
|
@Input() hasPermissionToFilterByType: boolean; |
|
|
|
@Input() hasPermissionToOpenDetails = true; |
|
|
|
@Input() locale = getLocale(); |
|
|
|
@Input() pageIndex: number; |
|
|
|
@ -125,14 +134,17 @@ export class GfActivitiesTableComponent |
|
|
|
@Output() pageChanged = new EventEmitter<PageEvent>(); |
|
|
|
@Output() selectedActivities = new EventEmitter<Activity[]>(); |
|
|
|
@Output() sortChanged = new EventEmitter<Sort>(); |
|
|
|
@Output() typesFilterChanged = new EventEmitter<string[]>(); |
|
|
|
|
|
|
|
@ViewChild(MatPaginator) paginator: MatPaginator; |
|
|
|
@ViewChild(MatSort) sort: MatSort; |
|
|
|
|
|
|
|
public readonly activityTypes = new Map<ActivityType, string>(); |
|
|
|
public hasDrafts = false; |
|
|
|
public hasErrors = false; |
|
|
|
public isUUID = isUUID; |
|
|
|
public selectedRows = new SelectionModel<Activity>(true, []); |
|
|
|
public typesFilter = new FormControl<string[]>([]); |
|
|
|
|
|
|
|
public readonly dataSource = input.required< |
|
|
|
MatTableDataSource<Activity> | undefined |
|
|
|
@ -189,6 +201,10 @@ export class GfActivitiesTableComponent |
|
|
|
private readonly unsubscribeSubject = new Subject<void>(); |
|
|
|
|
|
|
|
public constructor() { |
|
|
|
for (const type of Object.keys(ActivityType) as ActivityType[]) { |
|
|
|
this.activityTypes.set(ActivityType[type], translate(ActivityType[type])); |
|
|
|
} |
|
|
|
|
|
|
|
addIcons({ |
|
|
|
alertCircleOutline, |
|
|
|
calendarClearOutline, |
|
|
|
@ -214,6 +230,12 @@ export class GfActivitiesTableComponent |
|
|
|
this.selectedActivities.emit(selectedRows.source.selected); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
this.typesFilter.valueChanges |
|
|
|
.pipe(takeUntil(this.unsubscribeSubject)) |
|
|
|
.subscribe((types) => { |
|
|
|
this.typesFilterChanged.emit(types ?? []); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
public ngAfterViewInit() { |
|
|
|
|