diff --git a/apps/client/src/app/components/header/header.component.html b/apps/client/src/app/components/header/header.component.html index 4d606f591..eeb97385d 100644 --- a/apps/client/src/app/components/header/header.component.html +++ b/apps/client/src/app/components/header/header.component.html @@ -119,7 +119,13 @@ [matMenuTriggerRestoreFocus]="false" (menuOpened)="onOpenAssistant()" > - + diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index a1f65f244..5218e2870 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -19,8 +19,10 @@ import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; +import { UserService } from '@ghostfolio/client/services/user/user.service'; import { InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DateRange } from '@ghostfolio/common/types'; import { AssistantComponent } from '@ghostfolio/ui/assistant/assistant.component'; import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; @@ -88,7 +90,8 @@ export class HeaderComponent implements OnChanges { private impersonationStorageService: ImpersonationStorageService, private router: Router, private settingsStorageService: SettingsStorageService, - private tokenStorageService: TokenStorageService + private tokenStorageService: TokenStorageService, + private userService: UserService ) { this.impersonationStorageService .onChangeHasImpersonation() @@ -144,6 +147,20 @@ export class HeaderComponent implements OnChanges { window.location.reload(); } + public onDateRangeChange(dateRange: DateRange) { + this.dataService + .putUserSetting({ dateRange }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + this.userService.remove(); + + this.userService + .get() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(); + }); + } + public onMenuClosed() { this.isMenuOpen = false; } diff --git a/apps/client/src/app/components/home-holdings/home-holdings.html b/apps/client/src/app/components/home-holdings/home-holdings.html index 79828f6b7..d83f53f68 100644 --- a/apps/client/src/app/components/home-holdings/home-holdings.html +++ b/apps/client/src/app/components/home-holdings/home-holdings.html @@ -1,5 +1,5 @@
-
+
-
+

Analysis

-
+
(); + @Output() dateRangeChanged = new EventEmitter(); @ViewChild('menuTrigger') menuTriggerElement: MatMenuTrigger; @ViewChild('search', { static: true }) searchElement: ElementRef; @@ -84,6 +89,7 @@ export class AssistantComponent implements OnDestroy, OnInit { public static readonly SEARCH_RESULTS_DEFAULT_LIMIT = 5; + public dateRangeOptions = ToggleComponent.DEFAULT_DATE_RANGE_OPTIONS; public isLoading = false; public isOpen = false; public placeholder = $localize`Find holding...`; @@ -165,6 +171,10 @@ export class AssistantComponent implements OnDestroy, OnInit { this.changeDetectorRef.markForCheck(); } + public onChangeDateRange(dateRangeString: string) { + this.dateRangeChanged.emit(dateRangeString as DateRange); + } + public onCloseAssistant() { this.setIsOpen(false); diff --git a/libs/ui/src/lib/assistant/assistant.html b/libs/ui/src/lib/assistant/assistant.html index 0644c945e..795fcbbff 100644 --- a/libs/ui/src/lib/assistant/assistant.html +++ b/libs/ui/src/lib/assistant/assistant.html @@ -86,3 +86,19 @@
+
+ + + Date Range +
+ +
+
+
+
diff --git a/libs/ui/src/lib/assistant/assistant.module.ts b/libs/ui/src/lib/assistant/assistant.module.ts index e4f48e8f3..abeb3aa75 100644 --- a/libs/ui/src/lib/assistant/assistant.module.ts +++ b/libs/ui/src/lib/assistant/assistant.module.ts @@ -2,7 +2,9 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; +import { MatTabsModule } from '@angular/material/tabs'; import { RouterModule } from '@angular/router'; +import { GfToggleModule } from '@ghostfolio/client/components/toggle/toggle.module'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { GfAssistantListItemModule } from './assistant-list-item/assistant-list-item.module'; @@ -15,7 +17,9 @@ import { AssistantComponent } from './assistant.component'; CommonModule, FormsModule, GfAssistantListItemModule, + GfToggleModule, MatButtonModule, + MatTabsModule, NgxSkeletonLoaderModule, ReactiveFormsModule, RouterModule