Merge "Display input & outputs in View&edit functions."
[ccsdk/cds.git] / cds-ui / designer-client / src / app / modules / feature-modules / packages / packages.store.ts
index d770bf7..1377d25 100644 (file)
@@ -19,21 +19,26 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import {Injectable} from '@angular/core';
-import {BluePrintPage} from './model/BluePrint.model';
-import {Store} from '../../../common/core/stores/Store';
-import {PackagesListService} from './packages-list.service';
-import {PackagesDashboardState} from './model/packages-dashboard.state';
-
+import { Injectable } from '@angular/core';
+import { BluePrintPage } from './model/BluePrint.model';
+import { Store } from '../../../common/core/stores/Store';
+import { PackagesApiService } from './packages-api.service';
+import { PackagesDashboardState } from './model/packages-dashboard.state';
+import { Observable, of } from 'rxjs';
+import { NgxUiLoaderService } from 'ngx-ui-loader';
 
 @Injectable({
     providedIn: 'root'
 })
 export class PackagesStore extends Store<PackagesDashboardState> {
     // TDOD fixed for now as there is no requirement to change it from UI
-    public pageSize = 5;
+    public pageSize = 15;
+    private bluePrintContent: BluePrintPage = new BluePrintPage();
 
-    constructor(private packagesServiceList: PackagesListService) {
+    constructor(
+        private packagesServiceList: PackagesApiService,
+        private ngxLoader: NgxUiLoaderService
+    ) {
         super(new PackagesDashboardState());
     }
 
@@ -50,6 +55,13 @@ export class PackagesStore extends Store<PackagesDashboardState> {
         }
     }
 
+    public filterByTags(tags: string[]) {
+        console.log(this.state.currentPage);
+        this.getPagedPackagesByTags(this.state.command, this.state.currentPage,
+            this.pageSize, this.state.sortBy, tags);
+
+    }
+
     public getPage(pageNumber: number, pageSize: number) {
         if (this.isCommandExist()) {
             this.searchPagedPackages(this.state.command, pageNumber, pageSize);
@@ -67,20 +79,27 @@ export class PackagesStore extends Store<PackagesDashboardState> {
 
     }
 
-    private getPagedPackages(pageNumber: number, pageSize: number, sortBy: string = this.state.sortBy) {
+
+    protected getPagedPackages(pageNumber: number, pageSize: number, sortBy: string = this.state.sortBy) {
 
         this.packagesServiceList.getPagedPackages(pageNumber, pageSize, sortBy)
             .subscribe((pages: BluePrintPage[]) => {
                 this.setState({
                     ...this.state,
                     page: pages[0],
+                    filteredPackages: pages[0],
                     command: '',
                     totalPackages: pages[0].totalElements,
                     currentPage: pageNumber,
                     // this param is set only in get all as it represents the total number of pacakges in the server
                     totalPackagesWithoutSearchorFilters: pages[0].totalElements,
+                    tags: [],
                     sortBy
                 });
+            }, err => {
+                console.log(err);
+            }, () => {
+                this.ngxLoader.stop();
             });
     }
 
@@ -90,15 +109,69 @@ export class PackagesStore extends Store<PackagesDashboardState> {
                 this.setState({
                     ...this.state,
                     page: pages[0],
+                    filteredPackages: pages[0],
                     command: keyWord,
                     totalPackages: pages[0].totalElements,
                     currentPage: pageNumber,
+                    tags: [],
                     sortBy
                 });
+            }, err => {
+                console.log(err);
+            }, () => {
+                this.ngxLoader.stop(); // start master loader
             });
     }
 
     private isCommandExist() {
         return this.state.command;
     }
+
+    private getPagedPackagesByTags(keyWord: string, currentPage1: number, pageSize: number, sortBy1: string, tagsSearchable: string[]) {
+        this.getPagedPackagesByKeyWordFilteredByTags(tagsSearchable)
+            .subscribe((pages: BluePrintPage) => {
+                this.setState({
+                    ...this.state,
+                    page: this.state.page,
+                    filteredPackages: pages,
+                    command: keyWord,
+                    tags: tagsSearchable,
+                    //  totalPackages: pages.totalElements,
+                    currentPage: currentPage1,
+                    sortBy: sortBy1,
+                    totalPackages: this.state.page.totalElements,
+                });
+            });
+    }
+
+    private getPagedPackagesByKeyWordFilteredByTags(tagsSearchable: string[]): Observable<any> {
+        this.bluePrintContent.content = [];
+        if (tagsSearchable && tagsSearchable.length !== 0 && !tagsSearchable.includes('All')) {
+            tagsSearchable.forEach(tag => {
+                if (tag) {
+                    this.state.page.content.forEach(bluePrintModel => {
+                        if (tag.endsWith(',')) {
+                            tag = tag.replace(',', '');
+                        }
+                        bluePrintModel.tags.split(',').forEach(bluePrintModelTag => {
+                            if (bluePrintModelTag === tag) {
+                                this.bluePrintContent.content.push(bluePrintModel);
+                            }
+                        });
+                    });
+                } else {
+                    this.getPagedPackages(this.state.currentPage, this.pageSize);
+                    return of(this.state.page);
+                }
+            });
+            this.bluePrintContent.content = this.bluePrintContent.content.filter((value, index, self) => self.indexOf(value) === index);
+            console.log('the lenght is ' + this.bluePrintContent.content.length);
+            return of(this.bluePrintContent);
+        } else {
+            this.getPagedPackages(this.state.currentPage, this.pageSize);
+            return of(this.state.page);
+        }
+    }
+
+
 }