This is an automated email from the ASF dual-hosted git repository.

hshpak pushed a commit to branch 
fix/DATALAB-2955/scope-of-bugs-for-view-list-of-filtered-images
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit 53fcadb99b82bc83577ce51802b81e9e3d94bb9a
Author: Hennadii_Shpak <[email protected]>
AuthorDate: Mon Aug 8 13:26:43 2022 +0300

    added disable apply btn if filter was not changed
---
 .../src/main/resources/webapp/package-lock.json     | 11 +++++++++++
 .../src/main/resources/webapp/package.json          |  3 ++-
 .../page-filter/page-filter.component.html          | 11 ++++++++++-
 .../page-filter/page-filter.component.ts            | 21 +++++++++++++++++++--
 .../src/app/resources/images/images.component.ts    |  4 ----
 5 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/package-lock.json 
b/services/self-service/src/main/resources/webapp/package-lock.json
index 305e75aaf..18aabf796 100644
--- a/services/self-service/src/main/resources/webapp/package-lock.json
+++ b/services/self-service/src/main/resources/webapp/package-lock.json
@@ -24,6 +24,7 @@
         "@angular/router": "^11.2.14",
         "core-js": "^3.6.5",
         "guacamole-common-js": "^1.2.0",
+        "lodash.isequal": "^4.5.0",
         "moment": "^2.24.0",
         "moment-timezone": "^0.5.31",
         "ng-daterangepicker": "^1.1.0",
@@ -8585,6 +8586,11 @@
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";,
       "integrity": 
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
+    "node_modules/lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": 
"https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz";,
+      "integrity": 
"sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+    },
     "node_modules/lodash.memoize": {
       "version": "4.1.2",
       "resolved": 
"https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz";,
@@ -22326,6 +22332,11 @@
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";,
       "integrity": 
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
+    "lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": 
"https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz";,
+      "integrity": 
"sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+    },
     "lodash.memoize": {
       "version": "4.1.2",
       "resolved": 
"https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz";,
diff --git a/services/self-service/src/main/resources/webapp/package.json 
b/services/self-service/src/main/resources/webapp/package.json
index 1771ae73f..631d8a607 100644
--- a/services/self-service/src/main/resources/webapp/package.json
+++ b/services/self-service/src/main/resources/webapp/package.json
@@ -30,6 +30,7 @@
     "@angular/router": "^11.2.14",
     "core-js": "^3.6.5",
     "guacamole-common-js": "^1.2.0",
+    "lodash.isequal": "^4.5.0",
     "moment": "^2.24.0",
     "moment-timezone": "^0.5.31",
     "ng-daterangepicker": "^1.1.0",
@@ -57,4 +58,4 @@
   "resolutions": {
     "webpack": "^5.0.0"
   }
-}
\ No newline at end of file
+}
diff --git 
a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.html
 
b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.html
index 81449bbc8..dd527e809 100644
--- 
a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.html
+++ 
b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.html
@@ -20,6 +20,7 @@
 <div class="dialog-content selection">
 
   <ng-container *ngIf="$setFilterValueObservable | async"></ng-container>
+  <ng-container *ngIf="$changeIsApplyBtnDisabledObservable | 
async"></ng-container>
 
   <div id="scrolling" class="mat-reset">
     <form class="filter-table__wrapper" [formGroup]="filterForm">
@@ -194,7 +195,15 @@
 
       <div class="text-center m-top-20">
         <button type="button" class="butt" mat-raised-button 
(click)="cancelFilter()" >Cancel</button>
-        <button type="button" class="butt butt-success" mat-raised-button 
(click)="confirmFilter()" >Apply</button>
+        <button
+          type="button"
+          [disabled]="($isApplyBtnDisabled | async)"
+          class="butt butt-success"
+          mat-raised-button
+          (click)="confirmFilter()"
+        >
+          Apply
+        </button>
       </div>
     </form>
   </div>
diff --git 
a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.ts
 
b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.ts
index 577bd8f38..61a614fd7 100644
--- 
a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.ts
+++ 
b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/page-filter/page-filter.component.ts
@@ -19,9 +19,11 @@
 
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { Observable } from 'rxjs';
+import { BehaviorSubject, Observable } from 'rxjs';
 import { take, tap } from 'rxjs/operators';
 
+import isEqual from 'lodash.isequal';
+
 import { FilterFormPlaceholders } from './page-filter.config';
 import {
   DropdownFieldNames,
@@ -49,8 +51,13 @@ export class PageFilterComponent implements OnInit {
   readonly dropdownFieldNames: typeof DropdownFieldNames = DropdownFieldNames;
   readonly selectAllValue = DropdownSelectAllValue;
 
+  private $$isApplyBtnDisabled: BehaviorSubject<boolean> = new 
BehaviorSubject<boolean>(true);
+  private filterFormStartValue: ImageFilterFormValue;
+
   filterForm: FormGroup;
   $setFilterValueObservable: Observable<ImageFilterFormValue>;
+  $changeIsApplyBtnDisabledObservable: Observable<ImageFilterFormValue>;
+  $isApplyBtnDisabled: Observable<boolean> = 
this.$$isApplyBtnDisabled.asObservable();
 
   constructor(
     private fb: FormBuilder
@@ -60,6 +67,7 @@ export class PageFilterComponent implements OnInit {
     this.createFilterForm();
     this.onControlChange(DropdownFieldNames.imageName);
     this.setFilterValue();
+    this.isFilterFormChanged();
   }
 
   onSelectClick(): void {
@@ -103,7 +111,16 @@ export class PageFilterComponent implements OnInit {
   }
 
   private setFilterValue(): void {
-    this.$setFilterValueObservable = this.$filterFormStartValue.pipe(tap(value 
=> this.filterForm.patchValue(value)));
+    this.$setFilterValueObservable = this.$filterFormStartValue.pipe(
+      tap(value => this.filterFormStartValue = value),
+      tap(value => this.filterForm.patchValue(value)
+      ));
+  }
+
+  private isFilterFormChanged(): void {
+    this.$changeIsApplyBtnDisabledObservable = 
this.filterForm.valueChanges.pipe(
+      tap(formValue => this.$$isApplyBtnDisabled.next(isEqual(formValue, 
this.filterFormStartValue)))
+    );
   }
 
   get statuses() {
diff --git 
a/services/self-service/src/main/resources/webapp/src/app/resources/images/images.component.ts
 
b/services/self-service/src/main/resources/webapp/src/app/resources/images/images.component.ts
index 7d9a7ee12..82e173181 100644
--- 
a/services/self-service/src/main/resources/webapp/src/app/resources/images/images.component.ts
+++ 
b/services/self-service/src/main/resources/webapp/src/app/resources/images/images.component.ts
@@ -255,8 +255,4 @@ export class ImagesComponent implements OnInit, OnDestroy {
   private initIsImageListFiltered(): void {
     this.$isFiltered = this.imagesService.$isImageListFiltered;
   }
-
-  get isImageSelected(): boolean {
-    return this.imagesService.isImageSelected();
-  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to