summaryrefslogtreecommitdiffstats
path: root/portal-FE-common/src/app
diff options
context:
space:
mode:
authorSunder Tattavarada <statta@research.att.com>2020-02-05 15:19:13 +0000
committerGerrit Code Review <gerrit@onap.org>2020-02-05 15:19:13 +0000
commitbe539894f21c8dea9e82fbfbeb3efa3d6b315e05 (patch)
tree227fd732a780d06f84940c362acb7753b4f4be1b /portal-FE-common/src/app
parent096d3ac4c7b98f98eb20978cf1f07ff5cc91d492 (diff)
parentdf54a39b99fd5e1a52522623dfdfc0d2247f1dbf (diff)
Merge "global-search and search user components"
Diffstat (limited to 'portal-FE-common/src/app')
-rw-r--r--portal-FE-common/src/app/layout/components/global-search/global-search.component.html109
-rw-r--r--portal-FE-common/src/app/layout/components/global-search/global-search.component.scss74
-rw-r--r--portal-FE-common/src/app/layout/components/global-search/global-search.component.spec.ts62
-rw-r--r--portal-FE-common/src/app/layout/components/global-search/global-search.component.ts152
-rw-r--r--portal-FE-common/src/app/layout/components/search-users/search-users.component.html70
-rw-r--r--portal-FE-common/src/app/layout/components/search-users/search-users.component.scss56
-rw-r--r--portal-FE-common/src/app/layout/components/search-users/search-users.component.spec.ts63
-rw-r--r--portal-FE-common/src/app/layout/components/search-users/search-users.component.ts107
-rw-r--r--portal-FE-common/src/app/shared/services/global-search/global-search.service.spec.ts49
-rw-r--r--portal-FE-common/src/app/shared/services/global-search/global-search.service.ts54
10 files changed, 796 insertions, 0 deletions
diff --git a/portal-FE-common/src/app/layout/components/global-search/global-search.component.html b/portal-FE-common/src/app/layout/components/global-search/global-search.component.html
new file mode 100644
index 00000000..ff5473be
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/global-search/global-search.component.html
@@ -0,0 +1,109 @@
+<!--
+ ============LICENSE_START==========================================
+ ONAP Portal
+ ===================================================================
+ Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ ===================================================================
+
+ Unless otherwise specified, all software contained herein is licensed
+ under the Apache License, Version 2.0 (the "License");
+ you may not use this software except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Unless otherwise specified, all documentation contained herein is licensed
+ under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ you may not use this documentation except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://creativecommons.org/licenses/by/4.0/
+
+ Unless required by applicable law or agreed to in writing, documentation
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ============LICENSE_END============================================
+
+
+ -->
+<div class="search-div" (clickOutside)="clickOutSide($event)">
+ <div class="notification-div">
+ <div class="form-field form-field__small">
+ <div class="search-input">
+ <input id="mainSearchText" style="border-radius:0.25rem;" type="text" (keypress)="searchDialogToggle($event)"
+ placeholder="What are you looking for?" class="form-field form-field__small" />
+ </div>
+ <span class="icon-search-span"> <i class="icon-search">&nbsp;</i>
+ </span>
+
+ </div>
+ </div>
+</div>
+<div *ngIf="searchResDialog" class="search-res-dialog">
+ <div id="reg-header-snippet">
+
+ <div tabindex="0" id="reg-searchPop-id">
+ <div id="contentVertical" att-scrollbar="y">
+ <ul class="searchUl">
+ <li><a class="icon-tiles"></a> <a id="search-app-title" (click)="goToUrl(item)"
+ class="searchLiHeader">Applications:</a>
+ </li>
+ <li *ngFor="let item of items?.application"><a
+ id="search-app-item-{{item.name.split(' ').join('-')}}-{{$index}}" (click)="goToUrl(item)"
+ class="searchLiItems">{{item.name}}</a>
+ </li>
+ </ul>
+
+ <ul class="searchUl">
+ <li><a class="icon-tiles-small"></a> <a id="seach-functional-menu-title" (click)="goToUrl(item)"
+ class="searchLiHeader">Functional Menus:</a></li>
+ <li *ngFor="let item of items?.menu"><a
+ id="search-functional-menu-item-{{item.name.split(' ').join('-')}}-{{$index}}" (click)="goToUrl(item)"
+ class="searchLiItems">{{item.name}}</a>
+ </li>
+ </ul>
+
+
+ <ul class="searchUl">
+ <li><a class="full-linear-icon-person search-li"></a> <a id="search-user-title" (click)="goToUrl(item)"
+ class="searchLiHeader">Users:</a></li>
+ <li *ngFor="let item of items?.user"><a id="search-user-item-{{item.name.split(' ').join('-')}}-{{$index}}"
+ href="qto://talk/{{item.target}}" class="searchLiItems">{{item.name}}</a>
+
+ </li>
+ </ul>
+
+ <ul class="searchUl">
+ <li><a class="full-linear-icon-person search-li"></a> <a id="search-widgets-title" (click)="goToUrl(item)"
+ class="searchLiHeader">Widgets:</a></li>
+ <li *ngFor="let item of items?.widget"><a
+ id="search-widgets-item-{{item.name.split(' ').join('-')}}-{{$index}}" href="widgetCatalog"
+ class="searchLiHeader">{{item.name}}</a></li>
+ </ul>
+
+ <ul class="searchUl">
+ <li><a class="full-linear-icon-internet search-li"></a> <a id="search-intranet"
+ (click)="goToUrl(item, 'intra')" class="searchLiHeader" style="cursor: pointer;">Click to search
+ Intranet <span class="icon-arrow-right"></span>
+ </a></li>
+ </ul>
+
+ <ul class="searchUl">
+ <li><a class="full-linear-icon-internet search-li"></a> <a id="search-extranet"
+ (click)="goToUrl(item, 'extra')" class="searchLiHeader" style="cursor: pointer;">Click to search
+ Extranet <span class="icon-arrow-right"></span></a></li>
+ </ul>
+
+ </div>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/portal-FE-common/src/app/layout/components/global-search/global-search.component.scss b/portal-FE-common/src/app/layout/components/global-search/global-search.component.scss
new file mode 100644
index 00000000..70f1b34c
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/global-search/global-search.component.scss
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+ .search-div {
+ margin-bottom: -14px;
+ }
+
+ .search-res-dialog{
+ position: fixed;
+ background: white;
+ box-shadow: rgba(0, 0, 0, 0.247059) 0px 5px 6px 0px;
+ top: 2.5em;
+ border-radius: 0.25rem;
+ padding: 20px;
+ opacity: 1;
+ z-index: 1;
+ }
+ .searchUl {
+ list-style: none;
+ border-bottom: 1px solid #bbb;
+ padding-bottom: 20px;
+ padding-left: 4px;
+ }
+ .searchLiHeader {
+ font-weight: bold;
+ color: #0574ac;
+ font-size: 16px;
+ padding-bottom: 10px;
+ line-height: 1.5;
+ font-family: Omnes-ECOMP-W02,Arial;
+
+ }
+ .searchLiItems{
+ cursor: pointer;
+ font-weight: normal;
+ font-size: 12px;
+ color: #444444;
+ font-family: Omnes-ECOMP-W02,Arial;
+ } \ No newline at end of file
diff --git a/portal-FE-common/src/app/layout/components/global-search/global-search.component.spec.ts b/portal-FE-common/src/app/layout/components/global-search/global-search.component.spec.ts
new file mode 100644
index 00000000..c3771377
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/global-search/global-search.component.spec.ts
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { GlobalSearchComponent } from './global-search.component';
+
+describe('GlobalSearchComponent', () => {
+ let component: GlobalSearchComponent;
+ let fixture: ComponentFixture<GlobalSearchComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ GlobalSearchComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(GlobalSearchComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/portal-FE-common/src/app/layout/components/global-search/global-search.component.ts b/portal-FE-common/src/app/layout/components/global-search/global-search.component.ts
new file mode 100644
index 00000000..f98ea397
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/global-search/global-search.component.ts
@@ -0,0 +1,152 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+import { Component, OnInit, Output, EventEmitter } from '@angular/core';
+import { GlobalSearchService } from 'src/app/shared/services/global-search/global-search.service';
+import { GlobalSearchItem } from 'src/app/shared/model/global-search-item.model';
+import * as $ from 'jquery';
+import { AddTabFunctionService } from 'src/app/shared/services/tab/add-tab-function.service';
+import { Router } from '@angular/router';
+import { environment } from 'src/environments/environment';
+
+@Component({
+ selector: 'app-global-search',
+ templateUrl: './global-search.component.html',
+ styleUrls: ['./global-search.component.scss']
+})
+export class GlobalSearchComponent implements OnInit {
+ searchResDialog: boolean = false;
+ items: any;
+ searchString: string;
+ api = environment.api;
+ constructor(private globalSearchService: GlobalSearchService, private addTabFuntionService: AddTabFunctionService, private router: Router) { }
+
+ ngOnInit() {
+ }
+
+ showHideSearchSnippet() {
+ setTimeout(() => {
+ $('#mainSearchSnippet').click();
+ }, 1000);
+ setTimeout(() => {
+ $('mainSearchText').focus();
+ }, 1000);
+ }
+
+ mainSearchEvent = $('#mainSearchDiv').keyup((event) => {
+ if (event.keyCode == 13) {
+
+ this.getSearchResult(<string><any>$('#mainSearchText').val());
+
+ // opens the popup
+ var popupDomObj = $("[content='searchSnippet.html']");
+ if (popupDomObj.length == 0) {
+ this.showHideSearchSnippet();
+ } else {
+ $('#mainSearchSnippet').click();
+ this.showHideSearchSnippet();
+ }
+
+
+
+ }
+ });
+
+ clickOutSide(event: any) {
+
+ this.searchResDialog = false;
+
+ }
+ searchDialogToggle(event: any) {
+ if (event.keyCode == 13) {
+ this.searchResDialog = true;
+ this.searchString = <string><any>$('#mainSearchText').val();
+ this.getSearchResult(<string><any>$('#mainSearchText').val());
+ }
+ }
+
+ getSearchResult(searchString: string) {
+ //console.log("getSearch Result");
+ this.globalSearchService.getSearchResults(searchString).subscribe(data => {
+ //console.log("Response data" + data);
+ this.items = data.response;
+ //console.log("search result data" + JSON.stringify(data));
+
+ }, error => {
+ console.log('getSearchResult Error Object' + error);
+ });
+ };
+ goToUrl(item: any, type?: any) {
+ //console.log('check goto');
+ //var a = { 'test1': 'value1', 'test2': 'value3', 'test3': 'value2' };
+ if (type == 'intra') {
+
+ var intraSearcLink = this.api.intraSearcLink;
+ var intraSpecSearcLink = intraSearcLink + encodeURIComponent(this.searchString);
+ window.open(intraSpecSearcLink, '_blank');
+
+ } else if (type == 'extra') {
+ var extraSearcLink = this.api.extraSearcLink;
+ var extraSpecSearcLink = extraSearcLink + encodeURIComponent(this.searchString);
+ window.open(extraSpecSearcLink, '_blank');
+ }
+ let url = item.target;
+ let restrictedApp = item.uuid;
+ let getAccessState = "getAccess"
+ console.log("item.target " + item.target + "item.uuid " + item.uuid);
+ if (!url) {
+ this.router.navigate(['/' + getAccessState]);
+ //$log.info('No url found for this application, doing nothing..');
+ return;
+ }
+ if (!restrictedApp) {
+ window.open(url, '_blank');
+ } else {
+ if (item.url == "root.access") {
+ this.router.navigate(['/' + item.url]);
+ var tabContent = { id: new Date(), title: 'Home', url: url };
+ // $cookies.putObject('addTab', tabContent );
+ this.addTabFuntionService.filter(tabContent);
+ } else {
+ var tabContentCtrl = { id: new Date(), title: item.name, url: url };
+ this.addTabFuntionService.filter(tabContentCtrl);
+ }
+ }
+
+ }
+
+}
diff --git a/portal-FE-common/src/app/layout/components/search-users/search-users.component.html b/portal-FE-common/src/app/layout/components/search-users/search-users.component.html
new file mode 100644
index 00000000..03624491
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/search-users/search-users.component.html
@@ -0,0 +1,70 @@
+<!--
+ ============LICENSE_START==========================================
+ ONAP Portal
+ ===================================================================
+ Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ ===================================================================
+
+ Unless otherwise specified, all software contained herein is licensed
+ under the Apache License, Version 2.0 (the "License");
+ you may not use this software except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Unless otherwise specified, all documentation contained herein is licensed
+ under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ you may not use this documentation except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://creativecommons.org/licenses/by/4.0/
+
+ Unless required by applicable law or agreed to in writing, documentation
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ============LICENSE_END============================================
+
+
+ -->
+
+<form>
+ {{searchTitle}}
+ <div class="form-row">
+ <div class="col-md-6 my-1">
+ <label for="inputSearch" class="sr-only"></label>
+ <input id="inputSearch" pattern="[a-zA-Z0-9-'\s]{3,}" [(ngModel)]="searchString" (keyup)="passSystemUserInfo($event.srcElement.value)" maxlength="80"
+ required="true" name="searchString" #searchInput auto-focus tabindex="0" autocomplete="off" type="text"
+ class="form-control" value="searchString" placeholder="{{placeHolder}}">
+ </div>
+
+ <div class="col-auto my-1">
+ <button id="button-search-users" *ngIf="!isSystemUser" [disabled]="!searchInput.validity.valid || isLoading " type="submit"
+ class="btn btn-primary mb-2" (click)="searchUsers()"> Search
+ </button>
+ </div>
+ </div>
+</form>
+<span class="ecomp-spinner" *ngIf="isLoading"></span>
+<div class="search-user-container" *ngIf="showUserTable && !isSystemUser">
+ <table mat-table [dataSource]="dataSourceMap">
+ <!-- Search Result Column-->
+ <ng-container matColumnDef="firstName">
+ <th id="rowheader-result" mat-header-cell *matHeaderCellDef> Showing {{searchUsersResults.length}} {{txtResults}} </th>
+ <td id="table-data-{{i}}" mat-cell *matCellDef="let element; let i = index;">
+ {{element.firstName}} {{element.lastName}} <br> {{element.jobTitle}}
+ </td>
+ </ng-container>
+ <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
+ <tr mat-row (click)="setSelectedUser(row)" id="table-row-{{i}}" [ngClass]="{ 'selected': row === selectedUser }"
+ *matRowDef="let row; columns: displayedColumns; let i = index;"></tr>
+ </table>
+</div> \ No newline at end of file
diff --git a/portal-FE-common/src/app/layout/components/search-users/search-users.component.scss b/portal-FE-common/src/app/layout/components/search-users/search-users.component.scss
new file mode 100644
index 00000000..95a2a5ec
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/search-users/search-users.component.scss
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+@import "../../../pages/pages.component";
+
+.mat-row {
+ cursor: pointer;
+ background-color: #f2f2f2;
+}
+.selected {
+ background-color: #ffffff !important;
+}
+
+.search-user-container {
+ overflow-y: auto;
+ height: 250px;
+}
+
+.ecomp-spinner{
+ opacity: 10;
+}
diff --git a/portal-FE-common/src/app/layout/components/search-users/search-users.component.spec.ts b/portal-FE-common/src/app/layout/components/search-users/search-users.component.spec.ts
new file mode 100644
index 00000000..66a966cf
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/search-users/search-users.component.spec.ts
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SearchUsersComponent } from './search-users.component';
+
+describe('SearchUsersComponent', () => {
+ let component: SearchUsersComponent;
+ let fixture: ComponentFixture<SearchUsersComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ SearchUsersComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SearchUsersComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/portal-FE-common/src/app/layout/components/search-users/search-users.component.ts b/portal-FE-common/src/app/layout/components/search-users/search-users.component.ts
new file mode 100644
index 00000000..b93ffd61
--- /dev/null
+++ b/portal-FE-common/src/app/layout/components/search-users/search-users.component.ts
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core';
+import { UsersService } from 'src/app/shared/services';
+import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material';
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { ConfirmationModalComponent } from 'src/app/modals/confirmation-modal/confirmation-modal.component';
+import { PortalAdmin } from 'src/app/shared/model/PortalAdmin';
+
+@Component({
+ selector: 'app-search-users',
+ templateUrl: './search-users.component.html',
+ styleUrls: ['./search-users.component.scss']
+})
+export class SearchUsersComponent implements OnInit {
+
+ constructor(private userService: UsersService, private ngModal: NgbModal) { }
+ @Input() searchTitle: string;
+ @Input() placeHolder: string;
+ @Input() isSystemUser: boolean;
+ @ViewChild(MatSort) sort: MatSort;
+ @ViewChild(MatPaginator) paginator: MatPaginator;
+ @Output() passBackSelectedUser: EventEmitter<any> = new EventEmitter();
+ searchString: string;
+ txtResults = 'result';
+ searchUsersResults: any;
+ selected: any;
+ isLoading: boolean;
+ showUserTable: boolean;
+ selectedUser: any;
+ displayedColumns: string[] = ['firstName'];
+ dataSourceMap = new MatTableDataSource(this.searchUsersResults);
+
+ ngOnInit() {
+ this.searchString = '';
+ this.showUserTable = false;
+ this.isSystemUser = false;
+ }
+
+ passSystemUserInfo(systemUser: string) {
+ if (this.isSystemUser)
+ this.passBackSelectedUser.emit(systemUser);
+ }
+
+ searchUsers() {
+ if (!this.isSystemUser) {
+ this.isLoading = true;
+ this.showUserTable = false;
+ this.passBackSelectedUser.emit(this.selectedUser = '');
+ this.userService.searchUsers(this.searchString).subscribe((_data: PortalAdmin) => {
+ this.searchUsersResults = _data;
+ if (this.searchUsersResults == null || this.searchUsersResults.length == 0) {
+ const modelRef = this.ngModal.open(ConfirmationModalComponent)
+ modelRef.componentInstance.title = "Confirmation";
+ modelRef.componentInstance.message = " No users found with your query. Please change your search and try again."
+ this.isLoading = false;
+ } else {
+ this.showUserTable = true;
+ this.isLoading = false;
+ this.dataSourceMap = new MatTableDataSource(this.searchUsersResults);
+ this.txtResults = (this.searchUsersResults && this.searchUsersResults.length > 1) ? 'results' : 'result';
+ }
+ });
+ }
+ }
+
+ setSelectedUser(user: PortalAdmin) {
+ this.selectedUser = user;
+ this.passBackSelectedUser.emit(this.selectedUser);
+ }
+
+}
diff --git a/portal-FE-common/src/app/shared/services/global-search/global-search.service.spec.ts b/portal-FE-common/src/app/shared/services/global-search/global-search.service.spec.ts
new file mode 100644
index 00000000..50ccebbf
--- /dev/null
+++ b/portal-FE-common/src/app/shared/services/global-search/global-search.service.spec.ts
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+import { TestBed } from '@angular/core/testing';
+
+import { GlobalSearchService } from './global-search.service';
+
+describe('GlobalSearchService', () => {
+ beforeEach(() => TestBed.configureTestingModule({}));
+
+ it('should be created', () => {
+ const service: GlobalSearchService = TestBed.get(GlobalSearchService);
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/portal-FE-common/src/app/shared/services/global-search/global-search.service.ts b/portal-FE-common/src/app/shared/services/global-search/global-search.service.ts
new file mode 100644
index 00000000..ff44fbac
--- /dev/null
+++ b/portal-FE-common/src/app/shared/services/global-search/global-search.service.ts
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+import { Injectable } from '@angular/core';
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
+import { environment } from 'src/environments/environment';
+import { Observable } from 'rxjs';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class GlobalSearchService {
+
+ constructor(private api: HttpClient) { }
+ getSearchResults(searchString: string): Observable<any> {
+ let httpParams = new HttpParams()
+ .set('searchString', searchString);
+ return this.api.get(environment.api.getSearchAllByStringResults, { params: httpParams, responseType: 'json' });
+ }
+}