diff --git a/src/app/api/dataset.api.ts b/src/app/api/dataset.api.ts index 086c0c8b3..b8850bc3e 100644 --- a/src/app/api/dataset.api.ts +++ b/src/app/api/dataset.api.ts @@ -11,6 +11,8 @@ import { DeleteDatasetMutation, GetDatasetSchemaGQL, GetDatasetSchemaQuery, + RenameDatasetGQL, + RenameDatasetMutation, UpdateReadmeGQL, UpdateReadmeMutation, } from "src/app/api/kamu.graphql.interface"; @@ -54,6 +56,7 @@ export class DatasetApi { private datasetSchemaGQL: GetDatasetSchemaGQL, private updateReadmeGQL: UpdateReadmeGQL, private deleteDatasetGQL: DeleteDatasetGQL, + private renameDatasetGQL: RenameDatasetGQL, ) {} public getDatasetMainData(params: { @@ -254,4 +257,18 @@ export class DatasetApi { }), ); } + + public renameDataset(datasetId: string, newName: string): Observable { + return this.renameDatasetGQL + .mutate({ + datasetId, + newName, + }) + .pipe( + first(), + map((result: MutationResult) => { + return result.data; + }), + ); + } } diff --git a/src/app/dataset-view/additional-components/settings-component/services/dataset-settings.service.ts b/src/app/dataset-view/additional-components/settings-component/services/dataset-settings.service.ts index 8af96b8ed..c1f58c4b6 100644 --- a/src/app/dataset-view/additional-components/settings-component/services/dataset-settings.service.ts +++ b/src/app/dataset-view/additional-components/settings-component/services/dataset-settings.service.ts @@ -3,10 +3,11 @@ import { NavigationService } from "src/app/services/navigation.service"; import { Injectable } from "@angular/core"; import { DatasetApi } from "src/app/api/dataset.api"; import { map } from "rxjs/operators"; -import { DeleteDatasetMutation } from "src/app/api/kamu.graphql.interface"; +import { DeleteDatasetMutation, RenameDatasetMutation } from "src/app/api/kamu.graphql.interface"; import { DatasetViewTypeEnum } from "src/app/dataset-view/dataset-view.interface"; import { promiseWithCatch } from "src/app/common/app.helpers"; import { ModalService } from "src/app/components/modal/modal.service"; +import { DatasetService } from "src/app/dataset-view/dataset.service"; @Injectable({ providedIn: "root", @@ -16,6 +17,7 @@ export class DatasetSettingsService { private datasetApi: DatasetApi, private navigationService: NavigationService, private modalService: ModalService, + private datasetService: DatasetService, ) {} public deleteDataset(datasetId: string): Observable { @@ -37,4 +39,35 @@ export class DatasetSettingsService { }), ); } + + public renameDataset(accountName: string, datasetId: string, newName: string): Observable { + return this.datasetApi.renameDataset(datasetId, newName).pipe( + map((data: RenameDatasetMutation | undefined | null) => { + console.log("data", data); + if (data?.datasets.byId?.rename.__typename === "RenameResultSuccess") { + this.datasetService + .requestDatasetMainData({ + accountName, + datasetName: newName, + }) + .subscribe(); + this.navigationService.navigateToDatasetView({ + accountName, + datasetName: newName, + tab: DatasetViewTypeEnum.Overview, + }); + } else { + if (data) { + promiseWithCatch( + this.modalService.error({ + title: "Can't rename dataset", + message: data.datasets.byId?.rename.message, + yesButtonText: "Ok", + }), + ); + } + } + }), + ); + } } diff --git a/src/app/dataset-view/additional-components/settings-component/settings.component.html b/src/app/dataset-view/additional-components/settings-component/settings.component.html index 2bd26e430..112c90373 100644 --- a/src/app/dataset-view/additional-components/settings-component/settings.component.html +++ b/src/app/dataset-view/additional-components/settings-component/settings.component.html @@ -53,7 +53,18 @@

General

/> - + +
+ Name is required + Invalid dataset name +

Danger Zone

diff --git a/src/app/dataset-view/additional-components/settings-component/settings.component.sass b/src/app/dataset-view/additional-components/settings-component/settings.component.sass index 31882fb54..8d4aa13b7 100644 --- a/src/app/dataset-view/additional-components/settings-component/settings.component.sass +++ b/src/app/dataset-view/additional-components/settings-component/settings.component.sass @@ -10,6 +10,8 @@ p h2 font-weight: 400 margin: 0 + dl + margin: 0 .p-responsive padding-left: 16px diff --git a/src/app/dataset-view/additional-components/settings-component/settings.component.ts b/src/app/dataset-view/additional-components/settings-component/settings.component.ts index e6c8769fd..5ecf88555 100644 --- a/src/app/dataset-view/additional-components/settings-component/settings.component.ts +++ b/src/app/dataset-view/additional-components/settings-component/settings.component.ts @@ -1,6 +1,6 @@ import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { DatasetSettingsService } from "./services/dataset-settings.service"; -import { ChangeDetectionStrategy, Component, Input, OnInit } from "@angular/core"; +import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import { DatasetBasicsFragment } from "src/app/api/kamu.graphql.interface"; import { promiseWithCatch } from "src/app/common/app.helpers"; import { BaseComponent } from "src/app/common/base.component"; @@ -12,7 +12,7 @@ import { ModalService } from "src/app/components/modal/modal.service"; styleUrls: ["./settings.component.sass"], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class SettingsTabComponent extends BaseComponent implements OnInit { +export class SettingsTabComponent extends BaseComponent { @Input() public datasetBasics?: DatasetBasicsFragment; public renameDatasetForm: FormGroup; @@ -31,15 +31,25 @@ export class SettingsTabComponent extends BaseComponent implements OnInit { }); } - ngOnInit(): void { - console.log("yes"); + public get datasetName() { + return this.renameDatasetForm.get("datasetName"); + } + + public renameDataset(): void { + const datasetId = this.datasetBasics?.id as string; + const accountName = this.getDatasetInfoFromUrl().accountName; + this.trackSubscription( + this.datasetSettingsService + .renameDataset(accountName, datasetId, this.datasetName?.value as string) + .subscribe(), + ); } public deleteDataset(): void { promiseWithCatch( this.modalService.error({ title: "Delete", - message: "Do you want to delete dataset?", + message: "Do you want to delete a dataset?", yesButtonText: "Ok", noButtonText: "Cancel", handler: (ok) => {