Skip to content

Commit 73481cb

Browse files
dmitriy-borzenkoDmitriy Borzenko
and
Dmitriy Borzenko
authored
Kamu UI 546 set transform ux deleting datasets with same name (#548)
* Fixed bug with alias * Added unit test * changed CHANGELOG.md --------- Co-authored-by: Dmitriy Borzenko <[email protected]>
1 parent b9c99a1 commit 73481cb

File tree

7 files changed

+50
-14
lines changed

7 files changed

+50
-14
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
## [Unreleased]
88
### Fixed
99
- Batching trigger form: removed disabled state when updates turn off
10+
- Edit SetTransform: deleting input datasets with same name
1011

1112
## [0.39.1] - 2025-02-03
1213
### Changed

src/app/common/app.values.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export default class AppValues {
2727
public static readonly SHORT_DELAY_MS = 200;
2828
public static readonly LONG_DELAY_MS = 2000;
2929
public static readonly SIMULATION_START_CONDITION_DELAY_MS = 1200;
30+
public static readonly SET_TRANSFORM_UNAVAILABLE_INPUT_LABEL = "- Dataset is unavailable";
3031
public static readonly DEFAULT_OFFSET_COLUMN_NAME = "offset";
3132
public static readonly DEFAULT_FLOW_INITIATOR = "system process";
3233
public static readonly HEADERS_SKIP_LOADING_KEY = "Skip-loading";

src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/search-section/search-section.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<div class="d-flex flex-row position-relative">
66
<input
77
type="text"
8-
class="form-control w-350"
8+
class="form-control w-350 search-control"
99
data-test-id="searchInputDatasets"
1010
#searchDatasets
1111
placeholder="Look up a dataset..."
@@ -37,7 +37,7 @@
3737
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
3838
{{ node.name }}&nbsp;&nbsp; <span *ngIf="node.type" class="fw-bold">({{ node.type }})</span>
3939
<button
40-
*ngIf="!node.children?.length"
40+
*ngIf="node.name === UNAVAILABLE_INPUT_LABEL"
4141
class="no-button d-flex"
4242
(click)="deleteInputDataset(node.name)"
4343
title="Delete input dataset"
@@ -60,7 +60,7 @@
6060
</div>
6161
<button
6262
class="no-button d-flex"
63-
(click)="deleteInputDataset(node.name)"
63+
(click)="deleteInputDataset(node.owner + '/' + node.name)"
6464
title="Delete input dataset"
6565
>
6666
<mat-icon class="fs-4 hover">delete</mat-icon>

src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/search-section/search-section.component.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,7 @@ mat-tree {
7373
min-height: 30px;
7474
}
7575
}
76+
77+
.search-control {
78+
padding: 6px 33px 6px 10px;
79+
}

src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/search-section/search-section.component.spec.ts

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,36 @@ describe("SearchSectionComponent", () => {
120120
});
121121

122122
it("should check delete input dataset", () => {
123-
const deletedName = "mockDataset1";
124-
component.inputDatasets = new Set([deletedName, "mockDataset2"]);
125-
component.TREE_DATA = [{ name: deletedName }, { name: "mockDataset2" }];
123+
const deletedDatasetAlias = "test-account/com.youtube.playlist.featuring-kamu-data.videos.stats";
124+
component.inputDatasets = new Set([
125+
'{"datasetRef":"did:odf:fed0176ed321fcd2fc471d4d1ab06662223be2c76b7e3d3f14c37413e0802e1dca3c1","alias":"kamu/github.stats"}',
126+
'{"datasetRef":"did:odf:fed01ae1c46fe64c9d50d741989b406b89b6c40f3810e1b7bcc0ed83edc050fba2d9d","alias":"test-account/com.youtube.playlist.featuring-kamu-data.videos.stats"}',
127+
]);
128+
component.TREE_DATA = [
129+
{ name: "kamu/github.stats", owner: "kamu" },
130+
{ name: "com.youtube.playlist.featuring-kamu-data.videos.stats", owner: "test-account" },
131+
];
126132
fixture.detectChanges();
127133

128-
component.deleteInputDataset(deletedName);
134+
component.deleteInputDataset(deletedDatasetAlias);
135+
136+
expect(component.inputDatasets.size).toBe(1);
137+
expect(component.TREE_DATA.length).toBe(1);
138+
});
139+
140+
it("should check deleting with same dataset name, but different account name", () => {
141+
const deletedDatasetAlias = "test-account/com.youtube.playlist.featuring-kamu-data.videos.stats";
142+
component.inputDatasets = new Set([
143+
'{"datasetRef":"did:odf:fed0176ed321fcd2fc471d4d1ab06662223be2c76b7e3d3f14c37413e0802e1dca3c1","alias":"kamu/com.youtube.playlist.featuring-kamu-data.videos.stats"}',
144+
'{"datasetRef":"did:odf:fed01ae1c46fe64c9d50d741989b406b89b6c40f3810e1b7bcc0ed83edc050fba2d9d","alias":"test-account/com.youtube.playlist.featuring-kamu-data.videos.stats"}',
145+
]);
146+
component.TREE_DATA = [
147+
{ name: "com.youtube.playlist.featuring-kamu-data.videos.stats", owner: "kamu" },
148+
{ name: "com.youtube.playlist.featuring-kamu-data.videos.stats", owner: "test-account" },
149+
];
150+
fixture.detectChanges();
151+
152+
component.deleteInputDataset(deletedDatasetAlias);
129153

130154
expect(component.inputDatasets.size).toBe(1);
131155
expect(component.TREE_DATA.length).toBe(1);

src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/search-section/search-section.component.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class SearchSectionComponent extends BaseComponent {
3131
public treeControl = new NestedTreeControl<DatasetNode>((node) => node.children);
3232
@Input({ required: true }) public dataSource: MatTreeNestedDataSource<DatasetNode>;
3333
@Input({ required: true }) public TREE_DATA: DatasetNode[];
34+
public readonly UNAVAILABLE_INPUT_LABEL: string = AppValues.SET_TRANSFORM_UNAVAILABLE_INPUT_LABEL;
3435

3536
private appSearchAPI = inject(SearchApi);
3637
private datasetService = inject(DatasetService);
@@ -51,10 +52,10 @@ export class SearchSectionComponent extends BaseComponent {
5152
public onSelectItem(event: NgbTypeaheadSelectItemEvent): void {
5253
const value = event.item as DatasetAutocompleteItem;
5354
const id = value.dataset.id;
54-
const name = value.dataset.name;
55+
const alias = value.dataset.alias;
5556
const inputDataset = JSON.stringify({
5657
datasetRef: id,
57-
alias: name,
58+
alias,
5859
});
5960
if (value.__typename !== TypeNames.allDataType && !this.inputDatasets.has(inputDataset)) {
6061
this.inputDatasets.add(inputDataset);
@@ -68,9 +69,12 @@ export class SearchSectionComponent extends BaseComponent {
6869
const schema: MaybeNull<DatasetSchema> = parseCurrentSchema(
6970
data.datasets.byId.metadata.currentSchema,
7071
);
72+
7173
this.TREE_DATA.push({
7274
name: value.dataset.name,
73-
children: schema?.fields,
75+
children: schema?.fields.length
76+
? schema.fields
77+
: [{ name: "No schema", type: "", repetition: "" }],
7478
owner,
7579
});
7680
this.dataSource.data = this.TREE_DATA;
@@ -83,11 +87,11 @@ export class SearchSectionComponent extends BaseComponent {
8387
this.searchDataset = "";
8488
}
8589

86-
public deleteInputDataset(datasetName: string): void {
87-
this.TREE_DATA = this.TREE_DATA.filter((item: DatasetNode) => item.name !== datasetName);
90+
public deleteInputDataset(alias: string): void {
91+
this.TREE_DATA = this.TREE_DATA.filter((item: DatasetNode) => `${item.owner}/${item.name}` !== alias);
8892
this.dataSource.data = this.TREE_DATA;
8993
this.inputDatasets.forEach((item) => {
90-
if (item.includes(datasetName)) {
94+
if (item.includes(alias)) {
9195
this.inputDatasets.delete(item);
9296
}
9397
});

src/app/dataset-view/additional-components/metadata-component/components/set-transform/set-transform.component.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export class SetTransformComponent extends BaseMainEventComponent implements OnI
2828
public queries: Omit<SqlQueryStep, "__typename">[] = [];
2929
public dataSource = new MatTreeNestedDataSource<DatasetNode>();
3030
public TREE_DATA: DatasetNode[] = [];
31+
private readonly UNAVAILABLE_INPUT_LABEL: string = AppValues.SET_TRANSFORM_UNAVAILABLE_INPUT_LABEL;
3132

3233
private editService = inject(EditSetTransformService);
3334

@@ -85,6 +86,7 @@ export class SetTransformComponent extends BaseMainEventComponent implements OnI
8586
const schema: MaybeNull<DatasetSchema> = parseCurrentSchema(
8687
data.datasets.byId.metadata.currentSchema,
8788
);
89+
8890
const datasetInfo = item.alias.split("/");
8991
this.TREE_DATA.push({
9092
name: datasetInfo.length > 1 ? datasetInfo[1] : item.alias,
@@ -93,7 +95,7 @@ export class SetTransformComponent extends BaseMainEventComponent implements OnI
9395
});
9496
} else {
9597
this.TREE_DATA.push({
96-
name: "- Dataset is unavailable",
98+
name: this.UNAVAILABLE_INPUT_LABEL,
9799
children: [],
98100
owner: "",
99101
});

0 commit comments

Comments
 (0)