From 3b512d7526b5f17e46840a20478978feae876a3e Mon Sep 17 00:00:00 2001 From: Dmytro Borzenko <51016717+dmitriy-borzenko@users.noreply.github.com> Date: Mon, 3 Feb 2025 17:46:14 +0200 Subject: [PATCH] Kamu UI 533 return to the previously opened page after login (#538) * set redirect url when dataset not found * changed CHANGELOG.md * minor changes --------- Co-authored-by: Dmitriy Borzenko --- CHANGELOG.md | 2 ++ src/app/app.component.ts | 4 +++- .../dataset-settings-general-tab.component.ts | 2 +- src/app/dataset-view/dataset.service.spec.ts | 23 +++++++++++++++---- src/app/dataset-view/dataset.service.ts | 10 ++++++++ 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a253337a5..3ea5a952c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added a feature for changing account email - Added `redirectUrl` parameter in the URL for login page +### Fixed +- Private datasets: return to the previously opened page after login ## [0.38.0] - 2025-01-27 ### Changed diff --git a/src/app/app.component.ts b/src/app/app.component.ts index a7de5ea89..d4abb2093 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -183,7 +183,9 @@ export class AppComponent extends BaseComponent implements OnInit { } public onLogin(): void { - this.localStorageService.setRedirectAfterLoginUrl(this.router.url); + if (!this.localStorageService.redirectAfterLoginUrl) { + this.localStorageService.setRedirectAfterLoginUrl(this.router.url); + } this.navigationService.navigateToLogin(); } diff --git a/src/app/dataset-view/additional-components/dataset-settings-component/tabs/general/dataset-settings-general-tab.component.ts b/src/app/dataset-view/additional-components/dataset-settings-component/tabs/general/dataset-settings-general-tab.component.ts index 6a543496f..f7b2bc969 100644 --- a/src/app/dataset-view/additional-components/dataset-settings-component/tabs/general/dataset-settings-general-tab.component.ts +++ b/src/app/dataset-view/additional-components/dataset-settings-component/tabs/general/dataset-settings-general-tab.component.ts @@ -243,7 +243,7 @@ export class DatasetSettingsGeneralTabComponent extends BaseComponent implements ] : [ "You will decide who else has access", - "It will appear in search results on for people with access", + "It will appear in search results only for people with access", "You can control the level of access others have", ], warningText: !this.isPrivate diff --git a/src/app/dataset-view/dataset.service.spec.ts b/src/app/dataset-view/dataset.service.spec.ts index 6ef99ce27..16a7a670f 100644 --- a/src/app/dataset-view/dataset.service.spec.ts +++ b/src/app/dataset-view/dataset.service.spec.ts @@ -8,13 +8,12 @@ import { mockDatasetLineageResponse, } from "../search/mock.data"; import { TestBed } from "@angular/core/testing"; -import { Apollo, ApolloModule } from "apollo-angular"; +import { Apollo, APOLLO_OPTIONS } from "apollo-angular"; import { DatasetApi } from "../api/dataset.api"; import { ModalService } from "../components/modal/modal.service"; import { DatasetService } from "./dataset.service"; import { DatasetSubscriptionsService } from "./dataset.subscriptions.service"; import { HttpClientTestingModule } from "@angular/common/http/testing"; -import { ApolloTestingModule } from "apollo-angular/testing"; import { DataQueryResultErrorKind, DatasetBasicsFragment, @@ -45,8 +44,24 @@ describe("AppDatasetService", () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ApolloModule, ApolloTestingModule, HttpClientTestingModule], - providers: [DatasetApi, ModalService, DatasetService, DatasetSubscriptionsService, Apollo], + imports: [HttpClientTestingModule], + providers: [ + DatasetApi, + ModalService, + DatasetService, + DatasetSubscriptionsService, + Apollo, + { + provide: APOLLO_OPTIONS, + useFactory: () => { + return { + cache: { + evict: () => null, + }, + }; + }, + }, + ], }); service = TestBed.inject(DatasetService); datasetApi = TestBed.inject(DatasetApi); diff --git a/src/app/dataset-view/dataset.service.ts b/src/app/dataset-view/dataset.service.ts index 93ae4ed11..38513bf7a 100644 --- a/src/app/dataset-view/dataset.service.ts +++ b/src/app/dataset-view/dataset.service.ts @@ -1,3 +1,4 @@ +import { LocalStorageService } from "src/app/services/local-storage.service"; import { SqlExecutionError } from "../common/errors"; import { BlockRef, @@ -39,12 +40,15 @@ import { parseCurrentSchema } from "../common/app.helpers"; import { APOLLO_OPTIONS } from "apollo-angular"; import { resetCacheHelper } from "../apollo-cache.helper"; import { parseDataRows } from "../common/data.helpers"; +import { Router } from "@angular/router"; @Injectable({ providedIn: "root" }) export class DatasetService { private datasetApi = inject(DatasetApi); private datasetSubsService = inject(DatasetSubscriptionsService); private injector = inject(Injector); + private router = inject(Router); + private localStorageService = inject(LocalStorageService); private currentHeadBlockHash: string; private dataset$: Subject = new Subject(); @@ -81,6 +85,12 @@ export class DatasetService { throw new SqlExecutionError(dataTail.errorMessage); } } else { + this.localStorageService.setRedirectAfterLoginUrl(this.router.url); + const cache = this.injector.get(APOLLO_OPTIONS).cache; + cache.evict({ + id: "ROOT_QUERY", + fieldName: "datasets", + }); throw new DatasetNotFoundError(); } }),