Skip to content
This repository was archived by the owner on Aug 28, 2023. It is now read-only.

Commit e18e08b

Browse files
[80002] Improve form appearance and validation (#18)
1 parent cc68645 commit e18e08b

File tree

82 files changed

+1415
-912
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+1415
-912
lines changed

automation/jenkinsfiles/deploy.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@Library(['workbench_lib', 'mainlib@0.1.0']) _
1+
@Library(['workbench_lib@PR-17', 'mainlib@0.1.0']) _
22
import java.text.SimpleDateFormat
33

44

automation/jenkinsfiles/precommit.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@Library(['workbench_lib', 'mainlib@0.4.0']) _
1+
@Library(['workbench_lib@PR-17', 'mainlib@0.4.0']) _
22

33
properties([
44
buildDiscarder(logRotator(daysToKeepStr: "10")),

client/automation/package_BOM.txt

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ assets/js/track.js
4848
assets/netron/openvino-metadata.json
4949
assets/netron/view-grapher.css
5050
assets/netron/view-sidebar.css
51+
assets/svg/arrow-down.svg
5152
assets/svg/icon_set.svg
5253
assets/svg/point-a.svg
5354
assets/svg/point-b.svg

client/e2e/src/create-na-dataset.e2e-spec.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
ConfigurationWizardPage,
66
InferenceType,
77
NotAnnotatedDataSet,
8-
TranformationOptions,
8+
TransformationOptions,
99
} from './pages/configuration-wizard.po';
1010
import { Helpers } from './pages/helpers';
1111
import { TestUtils } from './pages/test-utils';
@@ -114,10 +114,10 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
114114
dataSet.imageFiles = [browser.params.precommit_scope.resources.testImages.streetImage];
115115
await configurationWizard.openDatasetPageAndImportImages(dataSet);
116116

117-
await configurationWizard.selectTransformationOption(TranformationOptions.HORIZONTAL);
117+
await configurationWizard.selectTransformationOption(TransformationOptions.HORIZONTAL);
118118
await configurationWizard.importDataset(dataSet.name);
119119

120-
expect(await configurationWizard.checkImagesInDataset(dataSet.name, TranformationOptions.HORIZONTAL)).toBeTruthy(
120+
expect(await configurationWizard.checkImagesInDataset(dataSet.name, TransformationOptions.HORIZONTAL)).toBeTruthy(
121121
`Image not found in dataset`
122122
);
123123

@@ -128,10 +128,10 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
128128
dataSet.imageFiles = [browser.params.precommit_scope.resources.testImages.personImage];
129129
await configurationWizard.openDatasetPageAndImportImages(dataSet);
130130

131-
await configurationWizard.selectTransformationOption(TranformationOptions.VERTICAL);
131+
await configurationWizard.selectTransformationOption(TransformationOptions.VERTICAL);
132132
await configurationWizard.importDataset(dataSet.name);
133133

134-
expect(await configurationWizard.checkImagesInDataset(dataSet.name, TranformationOptions.VERTICAL)).toBeTruthy(
134+
expect(await configurationWizard.checkImagesInDataset(dataSet.name, TransformationOptions.VERTICAL)).toBeTruthy(
135135
`Image not found in dataset`
136136
);
137137

@@ -145,7 +145,7 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
145145
];
146146
await configurationWizard.openDatasetPageAndImportImages(dataSet);
147147

148-
await configurationWizard.selectTransformationOption(TranformationOptions.ERASE);
148+
await configurationWizard.selectTransformationOption(TransformationOptions.ERASE);
149149

150150
const eraseRatio = Helpers.getRandomInRange(1, 21);
151151
console.log(`Set value of erase ratio to ${eraseRatio}%`);
@@ -179,7 +179,7 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
179179
dataSet.imageFiles = [browser.params.precommit_scope.resources.testImages.personImage];
180180
await configurationWizard.openDatasetPageAndImportImages(dataSet);
181181

182-
await configurationWizard.selectTransformationOption(TranformationOptions.ERASE);
182+
await configurationWizard.selectTransformationOption(TransformationOptions.ERASE);
183183

184184
const eraseRatio = 21;
185185
await TestUtils.setInput('eraseRatio', eraseRatio);
@@ -205,7 +205,7 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
205205
];
206206
await configurationWizard.openDatasetPageAndImportImages(dataSet);
207207

208-
await configurationWizard.selectTransformationOption(TranformationOptions.NOISE);
208+
await configurationWizard.selectTransformationOption(TransformationOptions.NOISE);
209209

210210
const noiseInjection = Helpers.getRandomInRange(1, 5);
211211
console.log(`Set value of noise injection to ${noiseInjection}%`);
@@ -239,7 +239,7 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
239239
dataSet.imageFiles = [browser.params.precommit_scope.resources.testImages.personImage];
240240
await configurationWizard.openDatasetPageAndImportImages(dataSet);
241241

242-
await configurationWizard.selectTransformationOption(TranformationOptions.NOISE);
242+
await configurationWizard.selectTransformationOption(TransformationOptions.NOISE);
243243

244244
const noiseInjection = 5.01;
245245
await TestUtils.setInput('noiseRatio', noiseInjection);
@@ -267,7 +267,7 @@ describe('UI tests on Creating Not Annotated Datasets', () => {
267267
const presetsCount = 6;
268268
await configurationWizard.openDatasetPageAndImportImages(dataSet);
269269

270-
await configurationWizard.selectTransformationOption(TranformationOptions.COLOR);
270+
await configurationWizard.selectTransformationOption(TransformationOptions.COLOR);
271271

272272
await configurationWizard.importDataset(dataSet.name);
273273

client/e2e/src/pages/configuration-wizard.po.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ enum EditButtonDataTestId {
2828
DATASETS = 'edit-import-dataset-button',
2929
}
3030

31-
export enum TranformationOptions {
31+
export enum TransformationOptions {
3232
HORIZONTAL = 'applyHorizontalFlip',
3333
VERTICAL = 'applyVerticalFlip',
3434
ERASE = 'applyErase',
@@ -1280,21 +1280,21 @@ export class ConfigurationWizardPage {
12801280
}
12811281

12821282
async selectAllTransformation(): Promise<void> {
1283-
await this.selectTransformationOption(TranformationOptions.HORIZONTAL);
1284-
await this.selectTransformationOption(TranformationOptions.VERTICAL);
1285-
await this.selectTransformationOption(TranformationOptions.ERASE);
1286-
await this.selectTransformationOption(TranformationOptions.NOISE);
1287-
await this.selectTransformationOption(TranformationOptions.COLOR);
1283+
await this.selectTransformationOption(TransformationOptions.HORIZONTAL);
1284+
await this.selectTransformationOption(TransformationOptions.VERTICAL);
1285+
await this.selectTransformationOption(TransformationOptions.ERASE);
1286+
await this.selectTransformationOption(TransformationOptions.NOISE);
1287+
await this.selectTransformationOption(TransformationOptions.COLOR);
12881288
}
12891289

12901290
async selectTransformationOption(option: string): Promise<void> {
1291-
const checkBox = TestUtils.getElementByDataTestId(option);
1292-
await TestUtils.scrollToElement(checkBox);
1291+
const augmentationTypeSection = TestUtils.getElementByDataTestId(option);
1292+
await TestUtils.scrollToElement(augmentationTypeSection);
12931293
await browser.sleep(1000);
1294-
await checkBox.click();
1294+
await augmentationTypeSection.click();
12951295
await browser.sleep(1000);
12961296

1297-
if (option === TranformationOptions.COLOR) {
1297+
if (option === TransformationOptions.COLOR) {
12981298
await this.selectAllColorPresets();
12991299
}
13001300
}
@@ -1312,10 +1312,10 @@ export class ConfigurationWizardPage {
13121312
async checkImagesInDataset(datasetName: string, transformation: string): Promise<boolean> {
13131313
let transformedImagePath;
13141314
switch (transformation) {
1315-
case TranformationOptions.HORIZONTAL:
1315+
case TransformationOptions.HORIZONTAL:
13161316
transformedImagePath = browser.params.precommit_scope.resources.transformedImages.horizontalFlip.pathToImage;
13171317
break;
1318-
case TranformationOptions.VERTICAL:
1318+
case TransformationOptions.VERTICAL:
13191319
transformedImagePath = browser.params.precommit_scope.resources.transformedImages.verticalFlip.pathToImage;
13201320
}
13211321
console.log('Get hash from transformed image');

client/e2e/src/pages/model-manager.po.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ export class ModelManagerPage {
324324
}
325325

326326
async clickMoreTips(fieldCss) {
327-
const field = await element(by.css(`a[data-test-id="${fieldCss}"]`));
327+
const field = await element(by.css(`wb-button[data-test-id="${fieldCss}"]`));
328328
await field.click();
329329
const tipName = fieldCss.substring(5, fieldCss.length - 4);
330330
await console.log(`Learn more for ${tipName} is clicked.`);

client/src/app/modules/accuracy/components/visualization/network-output/original-image-controls/original-image-controls.component.scss

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
wb-config-form-field {
1111
margin-right: auto;
12+
margin-bottom: 0;
1213
}
1314

1415
> wb-button + wb-button {

client/src/app/modules/dataset-manager/components/create-dataset/dataset-augmentation/color-transformations-section/color-transformations-section.component.html

+7-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@
44
<wb-info-hint [message]="'Choose one or several transformations. ' + augmentationTipMessage"></wb-info-hint>
55
<div class="row">
66
<div class="col" *ngFor="let preset of colorSpacePresets">
7-
<div class="transform-img" data-test-id="transform-img" *ngIf="defaultImagePath" (click)="addPreset(preset)">
7+
<div
8+
*ngIf="defaultImagePath"
9+
class="transform-img"
10+
data-test-id="transform-img"
11+
(click)="togglePreset(preset)"
12+
>
813
<img
914
[ngStyle]="{
1015
filter: 'brightness(' + preset.brightness + ') contrast(' + preset.contrast + ')'
@@ -20,9 +25,7 @@
2025
<span>Contrast: {{ getPercentageValue(preset.contrast) }}</span>
2126
</div>
2227
</div>
23-
<mat-checkbox [checked]="selectedPresets.includes(preset)" (change)="addPreset(preset)">
24-
{{ preset.name }}
25-
</mat-checkbox>
28+
<wb-config-form-field [field]="getField(preset)" [group]="group"></wb-config-form-field>
2629
</div>
2730
</div>
2831
</div>

client/src/app/modules/dataset-manager/components/create-dataset/dataset-augmentation/color-transformations-section/color-transformations-section.component.scss

+7-1
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,25 @@ $icon-size: 30px;
2424
flex-wrap: wrap;
2525
justify-content: center;
2626
margin-top: $container-padding;
27+
gap: 10px 20px;
2728
}
2829

2930
.transform-img {
3031
position: relative;
3132

3233
img {
3334
width: $image-card-size;
35+
border: 1px solid $very-light-pink;
36+
border-radius: 3px;
3437
}
3538
}
3639

3740
.col {
3841
flex: 0 0 calc(33.33% - 20px);
39-
margin: 5px;
42+
43+
wb-config-form-field {
44+
margin-bottom: 0;
45+
}
4046
}
4147

4248
.img-overlay {

client/src/app/modules/dataset-manager/components/create-dataset/dataset-augmentation/color-transformations-section/color-transformations-section.component.ts

+27-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
OnDestroy,
99
} from '@angular/core';
1010
import { DecimalPipe } from '@angular/common';
11+
import { FormControl, FormGroup } from '@angular/forms';
1112

1213
import { isNil } from 'lodash';
1314
import { Subject } from 'rxjs';
@@ -18,6 +19,8 @@ import { DatasetsService } from '@core/services/api/rest/datasets.service';
1819

1920
import { IImageCorrection } from '@store/dataset-store/dataset.model';
2021

22+
import { AdvancedConfigField } from '@shared/components/config-form-field/config-form-field.component';
23+
2124
import { colorSpacePresets } from '../dataset-augmentation-fields';
2225
import defaultImages from '../../../../../../../assets/img/default-dataset/images.json';
2326

@@ -52,7 +55,8 @@ export class ColorTransformationsSectionComponent implements OnDestroy {
5255
public augmentationTipMessage = this.messagesService.getHint('createDatasetTips', 'augmentationTip');
5356
public readonly defaultImageName = defaultImages[0];
5457
public defaultImagePath: string = null;
55-
public dafaultImage: File = null;
58+
59+
readonly group = new FormGroup({});
5660

5761
private unsubscribe$: Subject<void> = new Subject<void>();
5862
isNil = isNil;
@@ -62,15 +66,29 @@ export class ColorTransformationsSectionComponent implements OnDestroy {
6266
private decimalPipe: DecimalPipe,
6367
private datasetService: DatasetsService,
6468
private _cdr: ChangeDetectorRef
65-
) {}
69+
) {
70+
this.colorSpacePresets.forEach(({ id }) => {
71+
this.group.addControl(id, new FormControl());
72+
});
6673

67-
addPreset(preset): void {
68-
if (this.selectedPresets.includes(preset)) {
69-
this.selectedPresets = this.selectedPresets.filter((el) => el.name !== preset.name);
70-
} else {
71-
this.selectedPresets.push(preset);
72-
}
73-
this.setPresetsEvent.emit({ presets: this.selectedPresets });
74+
this.group.valueChanges.pipe(takeUntil(this.unsubscribe$)).subscribe((checkboxes) => {
75+
const selectedPresetIds = Object.keys(checkboxes).filter((key) => checkboxes[key]);
76+
77+
this.selectedPresets = this.colorSpacePresets.filter(({ id }) => selectedPresetIds.includes(id));
78+
this.setPresetsEvent.emit({ presets: this.selectedPresets });
79+
});
80+
}
81+
82+
togglePreset({ id }): void {
83+
this.group.get(id).setValue(!this.group.get(id).value);
84+
}
85+
86+
getField({ id, name }: IImageCorrection): AdvancedConfigField {
87+
return {
88+
name: id,
89+
label: name,
90+
type: 'checkbox',
91+
};
7492
}
7593

7694
getPercentageValue(value): string {

client/src/app/modules/dataset-manager/components/create-dataset/dataset-augmentation/dataset-augmentation-fields.ts

+11
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,35 @@ const horizontalFlipField: AdvancedConfigField = {
2020
type: 'checkbox',
2121
name: AugmentationFormFieldNames.HORIZONTAL_FLIP,
2222
value: false,
23+
label: 'Horizontal Flip',
2324
};
2425

2526
const verticalFlipField: AdvancedConfigField = {
2627
type: 'checkbox',
2728
name: AugmentationFormFieldNames.VERTICAL_FLIP,
2829
value: false,
30+
label: 'Vertical Flip',
2931
};
3032

3133
const applyEraseField: AdvancedConfigField = {
3234
type: 'checkbox',
3335
name: AugmentationFormFieldNames.RANDOM_ERASE,
3436
value: false,
37+
label: 'Random Erase',
3538
};
3639

3740
const applyNoiseField: AdvancedConfigField = {
3841
type: 'checkbox',
3942
name: AugmentationFormFieldNames.NOISE_INJECTION,
4043
value: false,
44+
label: 'Noise Injection',
4145
};
4246

4347
const changeColorSpace: AdvancedConfigField = {
4448
type: 'checkbox',
4549
name: AugmentationFormFieldNames.IMAGE_CORRECTIONS,
4650
value: false,
51+
label: 'Color Transformations',
4752
};
4853

4954
const eraseFields: AdvancedConfigField[] = [
@@ -91,31 +96,37 @@ const noiseFields: AdvancedConfigField[] = [
9196

9297
export const colorSpacePresets: IImageCorrection[] = [
9398
{
99+
id: 'preset-1',
94100
name: 'Preset 1',
95101
brightness: 1.2,
96102
contrast: 1.2,
97103
},
98104
{
105+
id: 'preset-2',
99106
name: 'Preset 2',
100107
brightness: 1.2,
101108
contrast: 0.8,
102109
},
103110
{
111+
id: 'preset-3',
104112
name: 'Preset 3',
105113
brightness: 1.0,
106114
contrast: 1.2,
107115
},
108116
{
117+
id: 'preset-4',
109118
name: 'Preset 4',
110119
brightness: 0.8,
111120
contrast: 1.0,
112121
},
113122
{
123+
id: 'preset-5',
114124
name: 'Preset 5',
115125
brightness: 0.8,
116126
contrast: 1.2,
117127
},
118128
{
129+
id: 'preset-6',
119130
name: 'Preset 6',
120131
brightness: 0.8,
121132
contrast: 0.8,

0 commit comments

Comments
 (0)