Merge "Add filters to the Jobs table of the EIC"
authorPatrik Buhr <patrik.buhr@est.tech>
Wed, 10 Feb 2021 10:24:32 +0000 (10:24 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Wed, 10 Feb 2021 10:24:32 +0000 (10:24 +0000)
webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.html
webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.scss
webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.ts
webapp-frontend/src/app/mock/ei-jobs-producer1.json
webapp-frontend/src/app/mock/ei-jobs-producer2.json

index 79385a7..09d03ec 100644 (file)
@@ -62,26 +62,59 @@ limitations under the License.
 
 <br>
 <h4>Jobs</h4>
+
 <div class="table-container">
-    <table mat-table EIJobTable [dataSource]="eiJobsDataSource" [ngClass]="{'table-dark': darkMode}" matSort
-        multiTemplateDataRows class="ei-coordinator-table mat-elevation-z8">
+    <mat-table [dataSource]="jobsDataSource" 
+        matSort class="ei-coordinator-table mat-elevation-z8">
         <ng-container matColumnDef="id">
-            <th mat-header-cell *matHeaderCellDef> Job ID </th>
-            <td mat-cell *matCellDef="let eiJob"> {{this.getDisplayName(eiJob)}} </td>
+            <mat-header-cell *matHeaderCellDef>
+                <br>
+                <form style="display: flex" [formGroup]="jobsFormControl">
+                    <mat-form-field>
+                        <input matInput formControlName="id">
+                        <mat-placeholder>Job ID</mat-placeholder>
+                    </mat-form-field>
+                </form>
+            </mat-header-cell>
+            <mat-cell *matCellDef="let eiJob"> {{this.getDisplayName(eiJob)}} </mat-cell>
         </ng-container>
         <ng-container matColumnDef="typeId">
-            <th mat-header-cell *matHeaderCellDef> Type ID </th>
-            <td mat-cell *matCellDef="let eiJob"> {{this.getEITypeId(eiJob)}} </td>
-        </ng-container>
+            <mat-header-cell *matHeaderCellDef>
+                <br>
+                <form style="display: flex" [formGroup]="jobsFormControl">
+                    <mat-form-field>
+                        <input matInput formControlName="typeId">
+                        <mat-placeholder>Type ID</mat-placeholder>
+                    </mat-form-field>
+                </form>
+            </mat-header-cell>
+            <mat-cell *matCellDef="let eiJob">{{this.getEITypeId(eiJob)}} </mat-cell>
+            </ng-container>
         <ng-container matColumnDef="owner">
-            <th mat-header-cell *matHeaderCellDef> Owner </th>
-            <td mat-cell *matCellDef="let eiJob"> {{eiJob.owner}} </td>
+            <mat-header-cell *matHeaderCellDef>
+                <br>
+                <form style="display: flex" [formGroup]="jobsFormControl">
+                    <mat-form-field>
+                        <input matInput formControlName="owner">
+                        <mat-placeholder>Owner</mat-placeholder>
+                    </mat-form-field>
+                </form>
+            </mat-header-cell>
+            <mat-cell *matCellDef="let eiJob">{{eiJob.owner}} </mat-cell>
         </ng-container>
         <ng-container matColumnDef="targetUri">
-            <th mat-header-cell *matHeaderCellDef> Target URI </th>
-            <td mat-cell *matCellDef="let eiJob"> {{this.getTargetUri(eiJob)}} </td>
+            <mat-header-cell *matHeaderCellDef>
+                <br>
+                <form style="display: flex" [formGroup]="jobsFormControl">
+                    <mat-form-field>
+                        <input matInput formControlName="targetUri">
+                        <mat-placeholder>Target URI</mat-placeholder>
+                    </mat-form-field>
+                </form>
+            </mat-header-cell>
+            <mat-cell *matCellDef="let eiJob"> {{this.getTargetUri(eiJob)}}  </mat-cell>
         </ng-container>
-        <tr mat-header-row *matHeaderRowDef="['id', 'typeId', 'owner', 'targetUri']"></tr>
-        <tr mat-row *matRowDef="let row; columns: ['id', 'typeId', 'owner', 'targetUri'];"></tr>
-    </table>
+        <mat-header-row *matHeaderRowDef="['id', 'typeId', 'owner', 'targetUri']"></mat-header-row>
+        <mat-row *matRowDef="let row; columns: ['id', 'typeId', 'owner', 'targetUri'];"></mat-row>
+    </mat-table>
 </div>
\ No newline at end of file
index 759f2a8..955ca31 100644 (file)
   background-color: #2d2d3d;
 }
 
-.action-cell {
-  display: flex;
-  justify-content: flex-end;
-}
-
 .display-none {
   display: none;
 }
@@ -62,4 +57,9 @@
 
 .filter-form {
   width: 200px;
-}
\ No newline at end of file
+}
+
+.mat-form-field {
+  font-size: 14px;
+  width: 100%;
+}
index 2789114..8532fcc 100644 (file)
  * limitations under the License.
  * ========================LICENSE_END===================================
  */
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { MatSort } from '@angular/material/sort';
+import { Component, OnInit} from '@angular/core';
 import { animate, state, style, transition, trigger } from '@angular/animations';
-import { FormBuilder, FormGroup } from '@angular/forms';
+import { FormBuilder, FormGroup, AbstractControl } from '@angular/forms';
 import { MatTableDataSource } from '@angular/material';
 
 import { defer, BehaviorSubject, Observable } from 'rxjs';
@@ -54,24 +53,45 @@ export class EICoordinatorComponent implements OnInit {
 
     producers$: Observable<EIProducer[]>;
     filteredProducers$: Observable<EIProducer[]>;
-    @ViewChild(MatSort, { static: true }) sort: MatSort;
 
     eiJobInfo = new Map<string, EIJobInfo>();
     darkMode: boolean;
     searchString: string;
     formGroup: FormGroup;
-    eiProducersData: MatTableDataSource<EIProducerDataSource>;
+    jobsDataSource: MatTableDataSource<EIJob>;
+
+    readonly jobsFormControl: AbstractControl;
 
     constructor(
         private eiJobsDataSource: EIJobDataSource,
         private eiProducersDataSource: EIProducerDataSource,
         private ui: UiService,
         private formBuilder: FormBuilder) {
-            this.formGroup = formBuilder.group({ filter: [""] });
-        }
+
+        this.formGroup = formBuilder.group({ filter: [""] });
+        this.jobsFormControl = formBuilder.group({
+            id: '',
+            typeId: '',
+            owner: '',
+            targetUri:'',
+        })
+    }
 
     ngOnInit() {
         this.eiJobsDataSource.getJobs();
+        this.jobsDataSource = new MatTableDataSource(this.eiJobsDataSource.eiJobsSubject.value);
+
+        this.jobsFormControl.valueChanges.subscribe(value => {
+            const filter = {...value, id: value.id.trim().toLowerCase()} as string;
+            this.jobsDataSource.filter = filter;
+        });
+
+        this.jobsDataSource.filterPredicate = ((data, filter) => {
+            return this.isDataIncluding(data.ei_job_identity, filter.id) 
+                && this.isDataIncluding(data.target_uri, filter.target_uri)
+                && this.isDataIncluding(data.owner, filter.owner)
+                && this.isDataIncluding(data.ei_type_identity, filter.typeId);
+          }) as (EIJob, string) => boolean;
 
         this.producers$= this.eiProducersDataSource.loadProducers();
         this.filteredProducers$ = defer(() => this.formGroup.get("filter")
@@ -88,6 +108,10 @@ export class EICoordinatorComponent implements OnInit {
         });
     }
 
+    isDataIncluding(data: string, filter: string) : boolean {
+        return !filter || data.toLowerCase().includes(filter);
+    }
+
     getEIJobInfo(eiJob: EIJob): EIJobInfo {
         let info: EIJobInfo = this.eiJobInfo.get(eiJob.ei_job_data);
         if (!info) {
index 488e194..1f79777 100644 (file)
     {
       "ei_job_identity": "job2",
       "ei_type_identity": "type1",
-      "owner": "owner1",
+      "owner": "owner2",
+      "ei_job_data": {
+        "jobparam2": "value2_job2",
+        "jobparam3": "value3_job2",
+        "jobparam1": "value1_job2"
+      },
+      "target_uri": "https://ricsim_g3_1:8185/datadelivery"
+    },
+    {
+      "ei_job_identity": "job4",
+      "ei_type_identity": "type1",
+      "owner": "owner3",
       "ei_job_data": {
         "jobparam2": "value2_job2",
         "jobparam3": "value3_job2",
index 07220a9..fd6d2c8 100644 (file)
@@ -9,5 +9,16 @@
         "jobparam1": "value1_job3"
       },
       "target_uri": "https://ricsim_g3_1:8185/datadelivery"
+    },
+    {
+      "ei_job_identity": "job5",
+      "ei_type_identity": "type2",
+      "owner": "owner5",
+      "ei_job_data": {
+        "jobparam2": "value2_job2",
+        "jobparam3": "value3_job2",
+        "jobparam1": "value1_job2"
+      },
+      "target_uri": "https://ricsim_g3_1:8185/datadelivery"
     }
   ]
\ No newline at end of file