@huntsman-cancer-institute/navigation 17.2.6 → 17.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1859,11 +1859,24 @@ var __metadata$2 = (this && this.__metadata) || function (k, v) {
1859
1859
  * but it can only handle paging internally.
1860
1860
  */
1861
1861
  let SearchListControllerComponent = class SearchListControllerComponent extends NavComponent {
1862
+ getCustomStyles(styles) {
1863
+ let customStyleObject = "";
1864
+ for (let style of styles.split(" ")) {
1865
+ let styleObject = this.customStyles[style];
1866
+ if (styleObject) {
1867
+ customStyleObject = Object.assign({}, customStyleObject, styleObject);
1868
+ }
1869
+ }
1870
+ return customStyleObject;
1871
+ }
1862
1872
  constructor(elementRef, renderer, resolver, navigationGlobalService, navigationService, http, changeDetectorRef) {
1863
1873
  super(elementRef, renderer, resolver, navigationService, changeDetectorRef);
1864
1874
  this.http = http;
1865
1875
  this.showTitle = true;
1876
+ this.inputMultiline = false;
1877
+ this.searchOptionsWidth = "";
1866
1878
  this.fields = [];
1879
+ this.customStyles = {};
1867
1880
  this.basicSearch = {};
1868
1881
  this.advancedSearch = {};
1869
1882
  this.filterByAllowedFields = [];
@@ -1877,6 +1890,8 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1877
1890
  this.searchType = "";
1878
1891
  this.searchTypeSelected = "";
1879
1892
  this.basicSearchHeader = "";
1893
+ this.globalSearchPlaceholder = "";
1894
+ this.globalSearchValidator = "";
1880
1895
  this.searchListChange = new EventEmitter();
1881
1896
  this.activeTab = 1;
1882
1897
  this.activeTab1 = 1;
@@ -1899,6 +1914,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1899
1914
  this.performedBasicSearchSubject = new Subject();
1900
1915
  this.performedAdvancedSearchSubject = new Subject();
1901
1916
  this.disableLocalFiltering = false;
1917
+ this.advancedSearchAllowFilter = false;
1902
1918
  this.allowSearchSubject$ = new BehaviorSubject(undefined);
1903
1919
  this.searchAllowedSubject$ = new BehaviorSubject(undefined);
1904
1920
  this.allowToggleSubject$ = new BehaviorSubject(undefined);
@@ -1908,6 +1924,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1908
1924
  this.allowSearch = true;
1909
1925
  this.allowToggle = true;
1910
1926
  this.showToggleOptions = true;
1927
+ this.quickSearchEnabled = true;
1911
1928
  if (!navigationService) {
1912
1929
  this.navigationService = new NavigationService(navigationGlobalService);
1913
1930
  }
@@ -1926,11 +1943,12 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1926
1943
  }
1927
1944
  }
1928
1945
  doGlobalSearch(event) {
1929
- let searchString = event.target.value;
1946
+ let searchString = (event.target.value).trim();
1930
1947
  if (event.keyCode === 13) {
1931
1948
  // Send a message with search-text
1932
1949
  console.debug("In SearchListController enter was detected");
1933
- this.searchStringSubject.next(searchString);
1950
+ this.globalSearch = searchString;
1951
+ this.searchStringSubject.next(this.getSearchString(searchString));
1934
1952
  this.searchButtonClicked();
1935
1953
  return;
1936
1954
  }
@@ -1944,13 +1962,17 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1944
1962
  for (let field of this.filterByAllowedFields) {
1945
1963
  filterField = (filterField) ? filterField + " or " + field : field;
1946
1964
  }
1947
- this.filtersSubject.next([new HciFilterDto(filterField, "string", searchString, undefined, "L", true)]);
1965
+ this.filtersSubject.next([new HciFilterDto(filterField, "string", this.getSearchString(searchString), undefined, "L", true)]);
1948
1966
  }
1949
1967
  }
1950
1968
  }
1951
1969
  this.globalSearch = searchString;
1952
1970
  }
1953
1971
  searchButtonClicked() {
1972
+ // Validation Check: if invalid, do not search.
1973
+ if (this.globalSearchValidator && this.isInvalid()) {
1974
+ return;
1975
+ }
1954
1976
  this.subscriptions.add(this.allowSearchSubject$.subscribe(val => {
1955
1977
  if (val === "allowSearch") {
1956
1978
  this.allowSearch = true;
@@ -1964,7 +1986,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1964
1986
  this.searchAllowedSubject$.next(this.allowSearch);
1965
1987
  if (this.allowSearch) {
1966
1988
  if (this.globalSearch) {
1967
- this.searchStringSubject.next(this.globalSearch);
1989
+ this.searchStringSubject.next(this.getSearchString(this.globalSearch));
1968
1990
  if (this.globalSearch.length === 0) {
1969
1991
  this.filtersSubject.next([]);
1970
1992
  }
@@ -1980,7 +2002,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
1980
2002
  filterField = (filterField) ? filterField + " or " + field : field;
1981
2003
  }
1982
2004
  }
1983
- this.filtersSubject.next([new HciFilterDto(filterField, "string", this.globalSearch, undefined, "L", true)]);
2005
+ this.filtersSubject.next([new HciFilterDto(filterField, "string", this.getSearchString(this.globalSearch), undefined, "L", true)]);
1984
2006
  }
1985
2007
  }
1986
2008
  this.selectedSearchTypeSubject.next(this.selectedSearchType);
@@ -2012,6 +2034,9 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2012
2034
  this.selectedSearchListSubject.next(this.selectedSearchList);
2013
2035
  }
2014
2036
  }
2037
+ enableQuickSearch(enabled = true) {
2038
+ this.quickSearchEnabled = enabled;
2039
+ }
2015
2040
  /**
2016
2041
  * Updates the config with options and re-fetches data.
2017
2042
  *
@@ -2038,10 +2063,16 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2038
2063
  if (config.showQuickSearchOptions) {
2039
2064
  this.showQuickSearchOptions = config.showQuickSearchOptions;
2040
2065
  }
2066
+ if (config.inputMultiline) {
2067
+ this.inputMultiline = config.inputMultiline;
2068
+ }
2069
+ if (config.searchOptionsWidth) {
2070
+ this.searchOptionsWidth = config.searchOptionsWidth;
2071
+ }
2041
2072
  if (config.searchTypeArray) {
2042
2073
  this.searchTypeArray = config.searchTypeArray;
2043
2074
  if (config.searchType) {
2044
- this.selectedSearchType = this.searchTypeArray[this.searchTypeArray.findIndex(x => x == config.searchType)];
2075
+ this.selectedSearchType = this.searchTypeArray[this.searchTypeArray.findIndex(x => x === config.searchType)];
2045
2076
  }
2046
2077
  else {
2047
2078
  this.selectedSearchType = this.searchTypeArray[0];
@@ -2050,6 +2081,9 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2050
2081
  if (config.disableLocalFiltering) {
2051
2082
  this.disableLocalFiltering = config.disableLocalFiltering;
2052
2083
  }
2084
+ if (config.advancedSearchAllowFilter) {
2085
+ this.advancedSearchAllowFilter = config.advancedSearchAllowFilter;
2086
+ }
2053
2087
  if (config.selectedSearchString) {
2054
2088
  this.globalSearch = config.selectedSearchString;
2055
2089
  }
@@ -2068,6 +2102,15 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2068
2102
  if (config.basicSearchHeader != null) {
2069
2103
  this.basicSearchHeader = config.basicSearchHeader;
2070
2104
  }
2105
+ if (config.globalSearchPlaceholder) {
2106
+ this.globalSearchPlaceholder = config.globalSearchPlaceholder;
2107
+ }
2108
+ if (config.globalSearchValidator) {
2109
+ this.globalSearchValidator = config.globalSearchValidator;
2110
+ }
2111
+ if (config.customStyles) {
2112
+ this.customStyles = config.customStyles;
2113
+ }
2071
2114
  if (config.fields != null) {
2072
2115
  this.fields = config.fields;
2073
2116
  if (this.fields) {
@@ -2253,6 +2296,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2253
2296
  filter.valid = false;
2254
2297
  }
2255
2298
  }
2299
+ this.globalSearch = "";
2256
2300
  this.filtersSubject.next(this.boundFilters);
2257
2301
  //Setting a flag on buttonClick event.
2258
2302
  if (event && (event.keyCode === 13 || event.type === "click")) {
@@ -2271,10 +2315,14 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2271
2315
  for (let filter of this.boundAdvancedSearchFilters) {
2272
2316
  filter.valid = (filter.value && filter.value.length > 0);
2273
2317
  }
2274
- for (let filter of this.boundAdvancedSearchFilters) {
2275
- this.updatedAdvanceSearchFilters.push(new HciFilterDto(filter.field, "string", filter.value, undefined, "L", false));
2318
+ this.updatedAdvanceSearchFilters = this.boundAdvancedSearchFilters;
2319
+ this.globalSearch = "";
2320
+ if (this.advancedSearchAllowFilter) {
2321
+ this.filtersSubject.next(this.updatedAdvanceSearchFilters);
2322
+ }
2323
+ else {
2324
+ this.filtersSubject.next([]);
2276
2325
  }
2277
- this.filtersSubject.next([]);
2278
2326
  this.advancedSearchFiltersSubject.next(this.updatedAdvanceSearchFilters);
2279
2327
  if (event && (event.keyCode === 13 || event.type === "click")) {
2280
2328
  this.performedAdvancedSearchSubject.next("advancedSearchClicked");
@@ -2427,18 +2475,79 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2427
2475
  if (target.parentElement.getAttribute("class").includes("closeable")) {
2428
2476
  this.showOptions = false;
2429
2477
  }
2430
- if (this.showOptions && !this.elementRef.nativeElement.querySelector("#search-title").contains(target)
2431
- && !target.getAttribute("class").includes("mat")) {
2432
- this.showOptions = false;
2433
- }
2434
2478
  this.toggleShowSubject$.next(this.showOptions);
2435
2479
  }
2436
2480
  catch (error) {
2437
2481
  }
2438
2482
  }
2439
2483
  }
2484
+ isInvalid() {
2485
+ let invalid = false;
2486
+ if (this.globalSearchValidator) {
2487
+ let searchString = this.getSearchString(this.globalSearch);
2488
+ let globalSearchStrList = searchString.split(",");
2489
+ if (typeof this.globalSearchValidator === "string") {
2490
+ for (let globalSearchStr of globalSearchStrList) {
2491
+ if (!globalSearchStr.match(this.globalSearchValidator)) {
2492
+ invalid = true;
2493
+ break;
2494
+ }
2495
+ }
2496
+ }
2497
+ else if (typeof this.globalSearchValidator === "object") {
2498
+ if (this.globalSearchValidator.required && globalSearchStrList.length === 0) {
2499
+ invalid = true;
2500
+ }
2501
+ if (this.globalSearchValidator.minRange && !isNaN(Number(this.globalSearchValidator.minRange))) {
2502
+ for (let globalSearchStr of globalSearchStrList) {
2503
+ if ((!globalSearchStr && Number(this.globalSearchValidator.minRange) > 0)
2504
+ || (globalSearchStr && globalSearchStr.length < Number(this.globalSearchValidator.minRange))) {
2505
+ invalid = true;
2506
+ break;
2507
+ }
2508
+ }
2509
+ }
2510
+ if (this.globalSearchValidator.maxRange && !isNaN(Number(this.globalSearchValidator.maxRange))) {
2511
+ for (let globalSearchStr of globalSearchStrList) {
2512
+ if (globalSearchStr && globalSearchStr.length > Number(this.globalSearchValidator.maxRange)) {
2513
+ invalid = true;
2514
+ break;
2515
+ }
2516
+ }
2517
+ }
2518
+ if (this.globalSearchValidator.pattern) {
2519
+ for (let globalSearchStr of globalSearchStrList) {
2520
+ if (!globalSearchStr.match(this.globalSearchValidator.pattern)) {
2521
+ invalid = true;
2522
+ break;
2523
+ }
2524
+ }
2525
+ }
2526
+ }
2527
+ else {
2528
+ invalid = true;
2529
+ }
2530
+ }
2531
+ return invalid;
2532
+ }
2533
+ getSearchString(searchString) {
2534
+ searchString = searchString.replace(/\n/g, ",");
2535
+ if (searchString.length > 0) {
2536
+ let strList = searchString.split(",");
2537
+ searchString = "";
2538
+ for (let str of strList) {
2539
+ str = str.trim();
2540
+ searchString = searchString ? (str ? searchString + "," + str : searchString) : str;
2541
+ }
2542
+ }
2543
+ return searchString;
2544
+ }
2545
+ get hasAdvancedSearchVerticalScrollbar() {
2546
+ const divPanel = document.getElementById("advancedSearch-scroll-panel");
2547
+ return divPanel.scrollHeight > divPanel.clientHeight;
2548
+ }
2440
2549
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchListControllerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: NavigationGlobalService }, { token: NavigationService, optional: true }, { token: i3$3.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2441
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchListControllerComponent, selector: "hci-search-list-controller", inputs: { showTitle: "showTitle", fields: "fields", basicSearch: "basicSearch", advancedSearch: "advancedSearch", filterByAllowedFields: "filterByAllowedFields", quickSearchFields: "quickSearchFields", advancedSearchFields: "advancedSearchFields", sortByAllowedFields: "sortByAllowedFields", sorts: "sorts", showQuickSearchOptions: "showQuickSearchOptions", showAdvancedSearchOptions: "showAdvancedSearchOptions", searchTypeArray: "searchTypeArray", searchType: "searchType", searchTypeSelected: "searchTypeSelected", basicSearchHeader: "basicSearchHeader" }, outputs: { searchListChange: "searchListChange" }, host: { listeners: { "document:click": "documentClick($event,$event.target)" } }, exportAs: ["searchListControllerComponent"], usesInheritance: true, ngImport: i0, template: `
2550
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchListControllerComponent, selector: "hci-search-list-controller", inputs: { showTitle: "showTitle", inputMultiline: "inputMultiline", searchOptionsWidth: "searchOptionsWidth", fields: "fields", customStyles: "customStyles", basicSearch: "basicSearch", advancedSearch: "advancedSearch", filterByAllowedFields: "filterByAllowedFields", quickSearchFields: "quickSearchFields", advancedSearchFields: "advancedSearchFields", sortByAllowedFields: "sortByAllowedFields", sorts: "sorts", showQuickSearchOptions: "showQuickSearchOptions", showAdvancedSearchOptions: "showAdvancedSearchOptions", searchTypeArray: "searchTypeArray", searchType: "searchType", searchTypeSelected: "searchTypeSelected", basicSearchHeader: "basicSearchHeader", globalSearchPlaceholder: "globalSearchPlaceholder", globalSearchValidator: "globalSearchValidator" }, outputs: { searchListChange: "searchListChange" }, host: { listeners: { "document:click": "documentClick($event,$event.target)" } }, exportAs: ["searchListControllerComponent"], usesInheritance: true, ngImport: i0, template: `
2442
2551
  <div id="search-title" class="d-flex flex-column">
2443
2552
  <div *ngIf="showTitle" class="d-flex ps-2">
2444
2553
  <div *ngIf="showBackButton" class="me-auto ms-1 backButton">
@@ -2450,7 +2559,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2450
2559
  <div class="ms-auto me-2" (click)="toggleShowOptions($event)">
2451
2560
  <i class="fas fa-cog"></i>
2452
2561
  </div>
2453
- <div class="search-options" [class.expanded]="showOptions">
2562
+ <div class="search-options" [class.expanded]="showOptions" [ngStyle]="{'width': (searchOptionsWidth !== '') ? searchOptionsWidth : 'auto'}">
2454
2563
  <div class="flex-grow-1">
2455
2564
  <div *ngIf="showToggleOptions">
2456
2565
  <div class="card-header-component">
@@ -2482,6 +2591,14 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2482
2591
  (keydown)="applyFilters($event)"/>
2483
2592
  </mat-form-field>
2484
2593
  </div>
2594
+ <!-- Double check if the textarea needed in Basic Search-->
2595
+ <!-- <div *ngIf="getFieldType(filter.field) === 'textarea' ">-->
2596
+ <!-- <mat-form-field appearance="none">-->
2597
+ <!-- <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>-->
2598
+ <!-- <textarea [ngModel]="globalSearch" class= "search-box" (keyup)="doGlobalSearch($event)"-->
2599
+ <!-- style="background-color: #f2f2f2"></textarea>-->
2600
+ <!-- </mat-form-field>-->
2601
+ <!-- </div>-->
2485
2602
  <div *ngIf="getFieldType(filter.field) === 'dropdown' ">
2486
2603
  <mat-form-field appearance="none">
2487
2604
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
@@ -2526,9 +2643,9 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2526
2643
 
2527
2644
  <div class="ri-modal-footer ri-full-width">
2528
2645
  <div class="ri-modal-header-right-container ri-full-width">
2529
- <button class="ri-btn-cancel ri-btn-cancel-dirty" (click)="setupFilters(false)">CLEAR
2646
+ <button [ngClass]="{'ri-btn-cancel': !this.changed, 'ri-btn-cancel-dirty': this.changed}" [disabled] ="!this.changed" (click)="setupFilters(false)">CLEAR
2530
2647
  </button>
2531
- <button class="ri-btn-save" [ngClass]="{'ri-btn-save-dirty': this.changed}"
2648
+ <button [ngClass]="{'ri-btn-save': !this.changed, 'ri-btn-save-dirty': this.changed}"
2532
2649
  [disabled]="!this.changed " (click)="applyFilters($event)">SEARCH
2533
2650
  </button>
2534
2651
  </div>
@@ -2539,9 +2656,10 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2539
2656
  *ngIf="advancedSearchFields.length > 0">
2540
2657
  <a ngbNavLink>ADVANCED SEARCH</a>
2541
2658
  <ng-template ngbNavContent>
2542
- <div class="advancedSearch-scroll">
2659
+ <div class="advancedSearch-scroll" id="advancedSearch-scroll-panel">
2660
+ <div class="advancedSearch-panel">
2543
2661
  <div *ngFor="let param of this.advancedSearch; index as j">
2544
- <div class="advanced-search">
2662
+ <div [ngClass]="{'advanced-search': !this.hasAdvancedSearchVerticalScrollbar, 'advanced-search-scrolled': this.hasAdvancedSearchVerticalScrollbar}">
2545
2663
  <div class="advanced-search-classification-header">
2546
2664
  {{param.header}}
2547
2665
  </div>
@@ -2602,15 +2720,16 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2602
2720
  </div>
2603
2721
  </div>
2604
2722
  </div>
2723
+ </div>
2605
2724
  <div class="search-msg-holder">
2606
2725
  <div id="advanced-search-msg-holder"></div>
2607
2726
  </div>
2608
2727
 
2609
2728
  <div class="ri-modal-footer ri-full-width">
2610
2729
  <div class="ri-modal-header-right-container ri-full-width">
2611
- <button class="ri-btn-cancel ri-btn-cancel-dirty" (click)="setupFilters(false)">CLEAR
2730
+ <button [ngClass]="{'ri-btn-cancel': !this.changed, 'ri-btn-cancel-dirty': this.changed}" [disabled]="!this.changed" (click)="setupFilters(false)">CLEAR
2612
2731
  </button>
2613
- <button class="ri-btn-save" [ngClass]="{'ri-btn-save-dirty': this.changed}"
2732
+ <button [ngClass] ="{'ri-btn-save': !this.changed, 'ri-btn-save-dirty': this.changed}"
2614
2733
  [disabled]="!this.changed " (click)="applyAdvancedSearchFilters($event)">SEARCH
2615
2734
  </button>
2616
2735
  </div>
@@ -2622,16 +2741,16 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2622
2741
  </div>
2623
2742
 
2624
2743
  <ng-template #display>
2625
- <nav ngbNav #nav1="ngbNav" [(activeId)]="activeTab1">
2626
- <ng-container ngbNavItem [ngbNavItem]="1" *ngIf="filterByAllowedFields.length > 0">
2744
+ <nav ngbNav #nav1="ngbNav" [(activeId)]="activeTab1" [ngStyle]="getCustomStyles('nav')">
2745
+ <ng-container ngbNavItem [ngbNavItem]="1" class="tab-title-class" *ngIf="filterByAllowedFields.length > 0">
2627
2746
  <a ngbNavLink>FILTER</a>
2628
2747
  <ng-template ngbNavContent>
2629
- <div class="basic-search sidebar-filter">
2630
- <div class="row search-content-body">
2748
+ <div class="basic-search sidebar-filter filter-sorting-panel" [ngStyle]="getCustomStyles('basic-search sidebar-filter filter-sorting-panel')">
2749
+ <div class="row search-content-body" [ngStyle]="getCustomStyles('row search-content-body')">
2631
2750
  <ng-container *ngFor="let filter of boundFilters; index as i">
2632
- <div class="col-6">
2751
+ <div class="col-6" [ngStyle]="getCustomStyles('col-6')">
2633
2752
  <div *ngIf="getFieldType(filter.field) === 'input' ">
2634
- <mat-form-field appearance="none">
2753
+ <mat-form-field appearance="none" [ngStyle]="getCustomStyles('mat-form-field')">
2635
2754
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
2636
2755
  <input matInput [ngModel]="filter.value"
2637
2756
  (ngModelChange)="setFilter($event, filter)"
@@ -2639,7 +2758,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2639
2758
  </mat-form-field>
2640
2759
  </div>
2641
2760
  <div *ngIf="getFieldType(filter.field) === 'dropdown' ">
2642
- <mat-form-field appearance="none">
2761
+ <mat-form-field appearance="none" [ngStyle]="getCustomStyles('mat-form-field')">
2643
2762
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
2644
2763
  <mat-select [ngModel]="filter.value"
2645
2764
  (ngModelChange)="setFilter($event, filter)"
@@ -2660,14 +2779,14 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2660
2779
  </mat-form-field>
2661
2780
  </div>
2662
2781
  <div *ngIf="getFieldType(filter.field) === 'date' ">
2663
- <mat-form-field appearance="none">
2782
+ <mat-form-field appearance="none" [ngStyle]="getCustomStyles('mat-form-field')">
2664
2783
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
2665
2784
  <input [ngModel]="filter.value"
2666
2785
  (ngModelChange)="setFilter($event, filter)"
2667
2786
  (keydown)="applyFilters($event)" matInput [matDatepicker]="myPicker"
2668
2787
  placeholder="mm/dd/yyyy">
2669
2788
  <mat-datepicker-toggle matSuffix [for]="myPicker">
2670
- <mat-icon fontSet="fa" fontIcon="fa-calendar-alt fa-lg"></mat-icon>
2789
+ <mat-icon fontSet="fas" fontIcon="fa-calendar-alt fa-lg"></mat-icon>
2671
2790
  </mat-datepicker-toggle>
2672
2791
  <mat-datepicker #myPicker></mat-datepicker>
2673
2792
  </mat-form-field>
@@ -2676,7 +2795,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2676
2795
  </ng-container>
2677
2796
  </div>
2678
2797
  </div>
2679
- <div class="search-msg-holder">
2798
+ <div class="search-msg-holder" [ngStyle]="getCustomStyles('search-msg-holder')">
2680
2799
  <div id="basic-search-msg-holder"></div>
2681
2800
  </div>
2682
2801
 
@@ -2691,14 +2810,14 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2691
2810
  </div>
2692
2811
  </ng-template>
2693
2812
  </ng-container>
2694
- <ng-container ngbNavItem [ngbNavItem]="2" *ngIf="sortByAllowedFields.length > 0">
2813
+ <ng-container ngbNavItem [ngbNavItem]="2" class="tab-title-class" *ngIf="sortByAllowedFields.length > 0">
2695
2814
  <a ngbNavLink>SORTING</a>
2696
2815
  <ng-template ngbNavContent>
2697
- <div class="basic-search sidebar-filter">
2816
+ <div class="basic-search sidebar-filter filter-sorting-panel" [ngStyle]="getCustomStyles('basic-search sidebar-filter filter-sorting-panel')">
2698
2817
  <div class="row search-content-body">
2699
2818
  <ng-container *ngFor="let sortField of sortByAllowedFields">
2700
- <div class="col-6 sort-item">
2701
- <div class="sort-icon">
2819
+ <div class="col-6 sort-item" [ngStyle]="getCustomStyles('col-6 sort-item')">
2820
+ <div class="sort-icon" [ngStyle]="getCustomStyles('sort-icon')">
2702
2821
  <div *ngIf="isSort(sortField) && isSortAsc(sortField)"
2703
2822
  [ngClass]="{'sort-arrow':isFirstSort(sortField)}">
2704
2823
  <i class="fas fa-arrow-circle-up fa-lg"></i>
@@ -2708,7 +2827,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2708
2827
  <i class="fas fa-arrow-circle-down fa-lg"></i>
2709
2828
  </div>
2710
2829
  </div>
2711
- <div class="sort-text" (click)="setSort($event, sortField)">
2830
+ <div class="sort-text" (click)="setSort($event, sortField)" [ngStyle]="getCustomStyles('sort-text')">
2712
2831
  {{getFieldDisplay(sortField)}}
2713
2832
  </div>
2714
2833
  </div>
@@ -2735,8 +2854,8 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2735
2854
 
2736
2855
  </div>
2737
2856
  </div>
2738
- <div class="d-flex mb-1 global-search">
2739
- <input [ngModel]="globalSearch" class="search-box" (keyup)="doGlobalSearch($event)"/>
2857
+ <div class="d-flex mb-1 global-search" *ngIf="inputMultiline === false">
2858
+ <input [disabled] = "!quickSearchEnabled" [ngModel]="globalSearch" class="search-box" (keyup)="doGlobalSearch($event)" [placeholder]="globalSearchPlaceholder"/>
2740
2859
  <select *ngIf="showQuickSearchOptions" [(ngModel)]="selectedSearchType" (change)="selectSearchType()"
2741
2860
  id="search-identifier" style="width: 100%; border-radius: 0px; border-color: black; ">
2742
2861
  <option *ngFor="let searchType of searchTypeArray"
@@ -2744,7 +2863,21 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2744
2863
  {{searchType}}
2745
2864
  </option>
2746
2865
  </select>
2747
- <button class="ps-1 pe-1 search-button" (click)="searchButtonClicked()">
2866
+ <button class="pl-1 pr-1 search-button" style="height: 100%" [disabled] = "!quickSearchEnabled" [ngClass] = "{'disabled-button':!quickSearchEnabled}" (click)="searchButtonClicked()">
2867
+ <i class="fas fa-search"></i>
2868
+ </button>
2869
+ </div>
2870
+ <div class="d-flex mb-1 global-search" *ngIf="inputMultiline === true">
2871
+ <textarea [disabled] = "!quickSearchEnabled" [ngModel]="globalSearch" class="search-box textarea-search-box"
2872
+ [ngStyle]="getCustomStyles('search-box textarea-search-box')" (keyup)="doGlobalSearch($event)" [placeholder]="globalSearchPlaceholder"></textarea>
2873
+ <select *ngIf="showQuickSearchOptions" [(ngModel)]="selectedSearchType" (change)="selectSearchType()"
2874
+ id="search-identifier" style="width: 100%; border-radius: 0px; border-color: black; ">
2875
+ <option *ngFor="let searchType of searchTypeArray"
2876
+ [value]="searchType">
2877
+ {{searchType}}
2878
+ </option>
2879
+ </select>
2880
+ <button class="ps-1 pe-1 search-button multiline-search-button" [ngStyle]="getCustomStyles('search-button multiline-search-button')" [disabled] = "!quickSearchEnabled" [ngClass] = "{'disabled-button':!quickSearchEnabled}" (click)="searchButtonClicked()">
2748
2881
  <i class="fas fa-search"></i>
2749
2882
  </button>
2750
2883
  </div>
@@ -2774,7 +2907,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
2774
2907
  </mat-button-toggle-group>
2775
2908
  </div>
2776
2909
  </div>
2777
- `, isInline: true, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6da9c7,#3d7a99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:#d3d3d3}.tab-pane{width:min-content!important}.search-options.expanded{height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fa fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$2.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3$2.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3$2.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3$2.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3$2.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3$2.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }] }); }
2910
+ `, isInline: true, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6da9c7,#3d7a99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:#d3d3d3}.tab-pane{width:min-content!important}.search-options.expanded{height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fas fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}.textarea-search-box{align-content:center;width:100%;min-height:30px}.multiline-search-button{height:100%;max-width:3rem;min-width:3rem}.filter-sorting-panel{margin-top:30px}.disabled-button{cursor:not-allowed;background-image:linear-gradient(var(--greywarm-light),var(--greywarm-medlight))}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$2.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i3$2.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i3$2.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i3$2.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i3$2.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i3$2.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }] }); }
2778
2911
  };
2779
2912
  SearchListControllerComponent = __decorate$3([
2780
2913
  ComponentType("SearchListControllerComponent"),
@@ -2800,7 +2933,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2800
2933
  <div class="ms-auto me-2" (click)="toggleShowOptions($event)">
2801
2934
  <i class="fas fa-cog"></i>
2802
2935
  </div>
2803
- <div class="search-options" [class.expanded]="showOptions">
2936
+ <div class="search-options" [class.expanded]="showOptions" [ngStyle]="{'width': (searchOptionsWidth !== '') ? searchOptionsWidth : 'auto'}">
2804
2937
  <div class="flex-grow-1">
2805
2938
  <div *ngIf="showToggleOptions">
2806
2939
  <div class="card-header-component">
@@ -2832,6 +2965,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2832
2965
  (keydown)="applyFilters($event)"/>
2833
2966
  </mat-form-field>
2834
2967
  </div>
2968
+ <!-- Double check if the textarea needed in Basic Search-->
2969
+ <!-- <div *ngIf="getFieldType(filter.field) === 'textarea' ">-->
2970
+ <!-- <mat-form-field appearance="none">-->
2971
+ <!-- <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>-->
2972
+ <!-- <textarea [ngModel]="globalSearch" class= "search-box" (keyup)="doGlobalSearch($event)"-->
2973
+ <!-- style="background-color: #f2f2f2"></textarea>-->
2974
+ <!-- </mat-form-field>-->
2975
+ <!-- </div>-->
2835
2976
  <div *ngIf="getFieldType(filter.field) === 'dropdown' ">
2836
2977
  <mat-form-field appearance="none">
2837
2978
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
@@ -2876,9 +3017,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2876
3017
 
2877
3018
  <div class="ri-modal-footer ri-full-width">
2878
3019
  <div class="ri-modal-header-right-container ri-full-width">
2879
- <button class="ri-btn-cancel ri-btn-cancel-dirty" (click)="setupFilters(false)">CLEAR
3020
+ <button [ngClass]="{'ri-btn-cancel': !this.changed, 'ri-btn-cancel-dirty': this.changed}" [disabled] ="!this.changed" (click)="setupFilters(false)">CLEAR
2880
3021
  </button>
2881
- <button class="ri-btn-save" [ngClass]="{'ri-btn-save-dirty': this.changed}"
3022
+ <button [ngClass]="{'ri-btn-save': !this.changed, 'ri-btn-save-dirty': this.changed}"
2882
3023
  [disabled]="!this.changed " (click)="applyFilters($event)">SEARCH
2883
3024
  </button>
2884
3025
  </div>
@@ -2889,9 +3030,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2889
3030
  *ngIf="advancedSearchFields.length > 0">
2890
3031
  <a ngbNavLink>ADVANCED SEARCH</a>
2891
3032
  <ng-template ngbNavContent>
2892
- <div class="advancedSearch-scroll">
3033
+ <div class="advancedSearch-scroll" id="advancedSearch-scroll-panel">
3034
+ <div class="advancedSearch-panel">
2893
3035
  <div *ngFor="let param of this.advancedSearch; index as j">
2894
- <div class="advanced-search">
3036
+ <div [ngClass]="{'advanced-search': !this.hasAdvancedSearchVerticalScrollbar, 'advanced-search-scrolled': this.hasAdvancedSearchVerticalScrollbar}">
2895
3037
  <div class="advanced-search-classification-header">
2896
3038
  {{param.header}}
2897
3039
  </div>
@@ -2952,15 +3094,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2952
3094
  </div>
2953
3095
  </div>
2954
3096
  </div>
3097
+ </div>
2955
3098
  <div class="search-msg-holder">
2956
3099
  <div id="advanced-search-msg-holder"></div>
2957
3100
  </div>
2958
3101
 
2959
3102
  <div class="ri-modal-footer ri-full-width">
2960
3103
  <div class="ri-modal-header-right-container ri-full-width">
2961
- <button class="ri-btn-cancel ri-btn-cancel-dirty" (click)="setupFilters(false)">CLEAR
3104
+ <button [ngClass]="{'ri-btn-cancel': !this.changed, 'ri-btn-cancel-dirty': this.changed}" [disabled]="!this.changed" (click)="setupFilters(false)">CLEAR
2962
3105
  </button>
2963
- <button class="ri-btn-save" [ngClass]="{'ri-btn-save-dirty': this.changed}"
3106
+ <button [ngClass] ="{'ri-btn-save': !this.changed, 'ri-btn-save-dirty': this.changed}"
2964
3107
  [disabled]="!this.changed " (click)="applyAdvancedSearchFilters($event)">SEARCH
2965
3108
  </button>
2966
3109
  </div>
@@ -2972,16 +3115,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2972
3115
  </div>
2973
3116
 
2974
3117
  <ng-template #display>
2975
- <nav ngbNav #nav1="ngbNav" [(activeId)]="activeTab1">
2976
- <ng-container ngbNavItem [ngbNavItem]="1" *ngIf="filterByAllowedFields.length > 0">
3118
+ <nav ngbNav #nav1="ngbNav" [(activeId)]="activeTab1" [ngStyle]="getCustomStyles('nav')">
3119
+ <ng-container ngbNavItem [ngbNavItem]="1" class="tab-title-class" *ngIf="filterByAllowedFields.length > 0">
2977
3120
  <a ngbNavLink>FILTER</a>
2978
3121
  <ng-template ngbNavContent>
2979
- <div class="basic-search sidebar-filter">
2980
- <div class="row search-content-body">
3122
+ <div class="basic-search sidebar-filter filter-sorting-panel" [ngStyle]="getCustomStyles('basic-search sidebar-filter filter-sorting-panel')">
3123
+ <div class="row search-content-body" [ngStyle]="getCustomStyles('row search-content-body')">
2981
3124
  <ng-container *ngFor="let filter of boundFilters; index as i">
2982
- <div class="col-6">
3125
+ <div class="col-6" [ngStyle]="getCustomStyles('col-6')">
2983
3126
  <div *ngIf="getFieldType(filter.field) === 'input' ">
2984
- <mat-form-field appearance="none">
3127
+ <mat-form-field appearance="none" [ngStyle]="getCustomStyles('mat-form-field')">
2985
3128
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
2986
3129
  <input matInput [ngModel]="filter.value"
2987
3130
  (ngModelChange)="setFilter($event, filter)"
@@ -2989,7 +3132,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2989
3132
  </mat-form-field>
2990
3133
  </div>
2991
3134
  <div *ngIf="getFieldType(filter.field) === 'dropdown' ">
2992
- <mat-form-field appearance="none">
3135
+ <mat-form-field appearance="none" [ngStyle]="getCustomStyles('mat-form-field')">
2993
3136
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
2994
3137
  <mat-select [ngModel]="filter.value"
2995
3138
  (ngModelChange)="setFilter($event, filter)"
@@ -3010,14 +3153,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3010
3153
  </mat-form-field>
3011
3154
  </div>
3012
3155
  <div *ngIf="getFieldType(filter.field) === 'date' ">
3013
- <mat-form-field appearance="none">
3156
+ <mat-form-field appearance="none" [ngStyle]="getCustomStyles('mat-form-field')">
3014
3157
  <mat-label>{{getFieldDisplay(filter.field)}}</mat-label>
3015
3158
  <input [ngModel]="filter.value"
3016
3159
  (ngModelChange)="setFilter($event, filter)"
3017
3160
  (keydown)="applyFilters($event)" matInput [matDatepicker]="myPicker"
3018
3161
  placeholder="mm/dd/yyyy">
3019
3162
  <mat-datepicker-toggle matSuffix [for]="myPicker">
3020
- <mat-icon fontSet="fa" fontIcon="fa-calendar-alt fa-lg"></mat-icon>
3163
+ <mat-icon fontSet="fas" fontIcon="fa-calendar-alt fa-lg"></mat-icon>
3021
3164
  </mat-datepicker-toggle>
3022
3165
  <mat-datepicker #myPicker></mat-datepicker>
3023
3166
  </mat-form-field>
@@ -3026,7 +3169,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3026
3169
  </ng-container>
3027
3170
  </div>
3028
3171
  </div>
3029
- <div class="search-msg-holder">
3172
+ <div class="search-msg-holder" [ngStyle]="getCustomStyles('search-msg-holder')">
3030
3173
  <div id="basic-search-msg-holder"></div>
3031
3174
  </div>
3032
3175
 
@@ -3041,14 +3184,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3041
3184
  </div>
3042
3185
  </ng-template>
3043
3186
  </ng-container>
3044
- <ng-container ngbNavItem [ngbNavItem]="2" *ngIf="sortByAllowedFields.length > 0">
3187
+ <ng-container ngbNavItem [ngbNavItem]="2" class="tab-title-class" *ngIf="sortByAllowedFields.length > 0">
3045
3188
  <a ngbNavLink>SORTING</a>
3046
3189
  <ng-template ngbNavContent>
3047
- <div class="basic-search sidebar-filter">
3190
+ <div class="basic-search sidebar-filter filter-sorting-panel" [ngStyle]="getCustomStyles('basic-search sidebar-filter filter-sorting-panel')">
3048
3191
  <div class="row search-content-body">
3049
3192
  <ng-container *ngFor="let sortField of sortByAllowedFields">
3050
- <div class="col-6 sort-item">
3051
- <div class="sort-icon">
3193
+ <div class="col-6 sort-item" [ngStyle]="getCustomStyles('col-6 sort-item')">
3194
+ <div class="sort-icon" [ngStyle]="getCustomStyles('sort-icon')">
3052
3195
  <div *ngIf="isSort(sortField) && isSortAsc(sortField)"
3053
3196
  [ngClass]="{'sort-arrow':isFirstSort(sortField)}">
3054
3197
  <i class="fas fa-arrow-circle-up fa-lg"></i>
@@ -3058,7 +3201,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3058
3201
  <i class="fas fa-arrow-circle-down fa-lg"></i>
3059
3202
  </div>
3060
3203
  </div>
3061
- <div class="sort-text" (click)="setSort($event, sortField)">
3204
+ <div class="sort-text" (click)="setSort($event, sortField)" [ngStyle]="getCustomStyles('sort-text')">
3062
3205
  {{getFieldDisplay(sortField)}}
3063
3206
  </div>
3064
3207
  </div>
@@ -3085,8 +3228,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3085
3228
 
3086
3229
  </div>
3087
3230
  </div>
3088
- <div class="d-flex mb-1 global-search">
3089
- <input [ngModel]="globalSearch" class="search-box" (keyup)="doGlobalSearch($event)"/>
3231
+ <div class="d-flex mb-1 global-search" *ngIf="inputMultiline === false">
3232
+ <input [disabled] = "!quickSearchEnabled" [ngModel]="globalSearch" class="search-box" (keyup)="doGlobalSearch($event)" [placeholder]="globalSearchPlaceholder"/>
3090
3233
  <select *ngIf="showQuickSearchOptions" [(ngModel)]="selectedSearchType" (change)="selectSearchType()"
3091
3234
  id="search-identifier" style="width: 100%; border-radius: 0px; border-color: black; ">
3092
3235
  <option *ngFor="let searchType of searchTypeArray"
@@ -3094,7 +3237,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3094
3237
  {{searchType}}
3095
3238
  </option>
3096
3239
  </select>
3097
- <button class="ps-1 pe-1 search-button" (click)="searchButtonClicked()">
3240
+ <button class="pl-1 pr-1 search-button" style="height: 100%" [disabled] = "!quickSearchEnabled" [ngClass] = "{'disabled-button':!quickSearchEnabled}" (click)="searchButtonClicked()">
3241
+ <i class="fas fa-search"></i>
3242
+ </button>
3243
+ </div>
3244
+ <div class="d-flex mb-1 global-search" *ngIf="inputMultiline === true">
3245
+ <textarea [disabled] = "!quickSearchEnabled" [ngModel]="globalSearch" class="search-box textarea-search-box"
3246
+ [ngStyle]="getCustomStyles('search-box textarea-search-box')" (keyup)="doGlobalSearch($event)" [placeholder]="globalSearchPlaceholder"></textarea>
3247
+ <select *ngIf="showQuickSearchOptions" [(ngModel)]="selectedSearchType" (change)="selectSearchType()"
3248
+ id="search-identifier" style="width: 100%; border-radius: 0px; border-color: black; ">
3249
+ <option *ngFor="let searchType of searchTypeArray"
3250
+ [value]="searchType">
3251
+ {{searchType}}
3252
+ </option>
3253
+ </select>
3254
+ <button class="ps-1 pe-1 search-button multiline-search-button" [ngStyle]="getCustomStyles('search-button multiline-search-button')" [disabled] = "!quickSearchEnabled" [ngClass] = "{'disabled-button':!quickSearchEnabled}" (click)="searchButtonClicked()">
3098
3255
  <i class="fas fa-search"></i>
3099
3256
  </button>
3100
3257
  </div>
@@ -3124,13 +3281,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3124
3281
  </mat-button-toggle-group>
3125
3282
  </div>
3126
3283
  </div>
3127
- `, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6da9c7,#3d7a99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:#d3d3d3}.tab-pane{width:min-content!important}.search-options.expanded{height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fa fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}\n"] }]
3284
+ `, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button{width:30%;height:2rem;background-image:linear-gradient(#6da9c7,#3d7a99);margin:0;color:#fff;border:none}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid #727b80}.tab-title-class{display:flex;height:50px;background:#d3d3d3}.tab-pane{width:min-content!important}.search-options.expanded{height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fas fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-white{color:#fff!important}.textarea-search-box{align-content:center;width:100%;min-height:30px}.multiline-search-button{height:100%;max-width:3rem;min-width:3rem}.filter-sorting-panel{margin-top:30px}.disabled-button{cursor:not-allowed;background-image:linear-gradient(var(--greywarm-light),var(--greywarm-medlight))}\n"] }]
3128
3285
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: NavigationGlobalService }, { type: NavigationService, decorators: [{
3129
3286
  type: Optional
3130
3287
  }] }, { type: i3$3.HttpClient }, { type: i0.ChangeDetectorRef }], propDecorators: { showTitle: [{
3131
3288
  type: Input
3289
+ }], inputMultiline: [{
3290
+ type: Input
3291
+ }], searchOptionsWidth: [{
3292
+ type: Input
3132
3293
  }], fields: [{
3133
3294
  type: Input
3295
+ }], customStyles: [{
3296
+ type: Input
3134
3297
  }], basicSearch: [{
3135
3298
  type: Input
3136
3299
  }], advancedSearch: [{
@@ -3157,6 +3320,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3157
3320
  type: Input
3158
3321
  }], basicSearchHeader: [{
3159
3322
  type: Input
3323
+ }], globalSearchPlaceholder: [{
3324
+ type: Input
3325
+ }], globalSearchValidator: [{
3326
+ type: Input
3160
3327
  }], searchListChange: [{
3161
3328
  type: Output
3162
3329
  }], documentClick: [{
@@ -3193,6 +3360,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
3193
3360
  this.closeOthers = true;
3194
3361
  // The list of fields to group by.
3195
3362
  this.groupingFields = [];
3363
+ // delimiter for getGroupDisplay
3364
+ this.delimiter = ", ";
3196
3365
  // TODO: Reimplement if we want users to be able to control grouping.
3197
3366
  this.groupByAllowedFields = [];
3198
3367
  // The page size of rows in a selected group.
@@ -3430,6 +3599,9 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
3430
3599
  if (config.groupDisplay) {
3431
3600
  this.groupDisplay = config.groupDisplay;
3432
3601
  }
3602
+ if (config.delimiter) {
3603
+ this.delimiter = config.delimiter;
3604
+ }
3433
3605
  if (config.closeOthers !== undefined) {
3434
3606
  this.closeOthers = config.closeOthers;
3435
3607
  }
@@ -3620,52 +3792,58 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
3620
3792
  if (this.filters && this.filters.length > 0) {
3621
3793
  let include = true;
3622
3794
  for (let filter of this.filters) {
3623
- if (filter.getField().indexOf(" or ") !== -1) {
3795
+ if (!filter.valid) {
3796
+ continue;
3797
+ }
3798
+ else if (this.controller.advancedSearch && this.controller.advancedSearch.length > 0 && !this.controller.advancedSearchAllowFilter) {
3799
+ // Advanced search does not auto filter by default
3800
+ continue;
3801
+ }
3802
+ else {
3803
+ let filterValues = filter.getValue().split(",");
3804
+ let filterFields = filter.getField().split(" or ");
3624
3805
  let innerInclude = false;
3625
- for (let field of filter.getField().split(" or ")) {
3626
- // check row[field] is a number and if yes, skip applying the toLowerCase() function.
3627
- // * to cover the handling of the search by person id scenario from within the quick search functionality.
3806
+ for (let field of filterFields) {
3628
3807
  if (row[field] && typeof row[field] == "number") {
3629
- if (row[field] == filter.getValue()) {
3630
- innerInclude = true;
3808
+ for (let value of filterValues) {
3809
+ if (row[field] == value) {
3810
+ innerInclude = true;
3811
+ break;
3812
+ }
3631
3813
  }
3632
3814
  }
3633
- else if (row[field] instanceof Date || filter.getValue() instanceof Date || filter.getDataType() == "date") {
3634
- if (row[field] && filter.getValue() && (new Date(row[field])).getTime() == (new Date(filter.getValue())).getTime()) {
3635
- filter.getValue();
3636
- innerInclude = true;
3815
+ else if (row[field] && row[field] instanceof Date || filter.getDataType() == "date") {
3816
+ for (let value of filterValues) {
3817
+ if (value instanceof Date) {
3818
+ if ((new Date(row[field])).getTime() == (new Date(value)).getTime()) {
3819
+ innerInclude = true;
3820
+ break;
3821
+ }
3822
+ }
3637
3823
  }
3638
3824
  }
3639
- else if (row[field] && row[field].toLowerCase().indexOf(filter.getValue().toLowerCase()) !== -1) {
3640
- innerInclude = true;
3825
+ else if (row[field] && typeof row[field] == "string") {
3826
+ // Check if it is multiple search strings
3827
+ for (let value of filterValues) {
3828
+ if (typeof value == "string") {
3829
+ if (row[field].toLowerCase().indexOf(value.toLowerCase()) !== -1) {
3830
+ innerInclude = true;
3831
+ break;
3832
+ }
3833
+ }
3834
+ }
3641
3835
  }
3642
- }
3643
- if (!innerInclude) {
3644
- include = false;
3645
- }
3646
- }
3647
- else {
3648
- if (!filter.valid || !filter.getValue()) {
3649
- }
3650
- else if ((filter.valid || filter.getValue()) && (this.controller.advancedSearch.length !== undefined && this.controller.advancedSearch.length > 0)) {
3651
- break;
3652
- }
3653
- else if (!row[filter.field]) {
3654
- include = false;
3655
- break;
3656
- }
3657
- else if (row[filter.field] instanceof Date || filter.getValue() instanceof Date || filter.getDataType() == "date") {
3658
- filter.getValue();
3659
- if ((new Date(row[filter.field])).getTime() != (new Date(filter.getValue())).getTime()) {
3660
- include = false;
3836
+ if (innerInclude) {
3661
3837
  break;
3662
3838
  }
3663
3839
  }
3664
- else if (row[filter.field].toLowerCase().indexOf(filter.getValue().toLowerCase()) === -1) {
3840
+ if (!innerInclude) {
3665
3841
  include = false;
3666
- break;
3667
3842
  }
3668
3843
  }
3844
+ if (include) {
3845
+ break;
3846
+ }
3669
3847
  }
3670
3848
  if (!include) {
3671
3849
  continue;
@@ -4061,7 +4239,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
4061
4239
  }
4062
4240
  }
4063
4241
  /**
4064
- * Concat group by fields to comma delimited words.
4242
+ * Concat group by fields to comma delimited words
4243
+ * or delimiter delimited words if the deliminator has its default value set.
4065
4244
  *
4066
4245
  * @param {RowGroup} rowGroup
4067
4246
  * @returns {string}
@@ -4076,7 +4255,9 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
4076
4255
  }
4077
4256
  else {
4078
4257
  for (let field of this.grouping.fields) {
4079
- display = (display) ? display + ", " + rowGroup[field] : rowGroup[field];
4258
+ if (rowGroup[field] !== null && rowGroup[field] !== "") {
4259
+ display = (display) ? display + this.delimiter + rowGroup[field] : rowGroup[field];
4260
+ }
4080
4261
  }
4081
4262
  }
4082
4263
  return display;
@@ -4211,8 +4392,8 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
4211
4392
  }
4212
4393
  }
4213
4394
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: NavigationGlobalService }, { token: NavigationService, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
4214
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchListComponent, selector: "hci-search-list", inputs: { controller: "controller", boundData: ["data", "boundData"], dataSubject: "dataSubject", externalDataCall: ["dataCall", "externalDataCall"], loadingSubjects: "loadingSubjects", loading: "loading", route: "route", inlineExpand: "inlineExpand", rowId: "rowId", groupClass: "groupClass", rowClass: "rowClass", groupDisplay: "groupDisplay", closeOthers: "closeOthers", groupingFields: "groupingFields", groupByAllowedFields: "groupByAllowedFields", pageSize: "pageSize", groupPageSize: "groupPageSize", groupCacheNumPages: "groupCacheNumPages", dropdown: "dropdown", busyIcon: "busyIcon", showResultsCount: "showResultsCount", onGroupClick: "onGroupClick", onRowClick: "onRowClick", groupTemplate: "groupTemplate", groupSelectedTemplate: "groupSelectedTemplate", itemTemplate: "itemTemplate", onGroupClose: "onGroupClose" }, outputs: { groupClick: "groupClick", rowClick: "rowClick", dataChange: "dataChange" }, viewQueries: [{ propertyName: "defaultGroupTemplate", first: true, predicate: ["defaultGroupTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupSelectedTemplate", first: true, predicate: ["defaultGroupSelectedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "selectedRowGroupContainerSetter", first: true, predicate: ["selectedRowGroupContainer"], descendants: true, read: ElementRef }, { propertyName: "rowParents", predicate: ["rowParent"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
4215
- <div
4395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SearchListComponent, selector: "hci-search-list", inputs: { controller: "controller", boundData: ["data", "boundData"], dataSubject: "dataSubject", externalDataCall: ["dataCall", "externalDataCall"], loadingSubjects: "loadingSubjects", loading: "loading", route: "route", inlineExpand: "inlineExpand", rowId: "rowId", groupClass: "groupClass", rowClass: "rowClass", groupDisplay: "groupDisplay", closeOthers: "closeOthers", groupingFields: "groupingFields", delimiter: "delimiter", groupByAllowedFields: "groupByAllowedFields", pageSize: "pageSize", groupPageSize: "groupPageSize", groupCacheNumPages: "groupCacheNumPages", dropdown: "dropdown", busyIcon: "busyIcon", showResultsCount: "showResultsCount", onGroupClick: "onGroupClick", onRowClick: "onRowClick", groupTemplate: "groupTemplate", groupSelectedTemplate: "groupSelectedTemplate", itemTemplate: "itemTemplate", onGroupClose: "onGroupClose" }, outputs: { groupClick: "groupClick", rowClick: "rowClick", dataChange: "dataChange" }, viewQueries: [{ propertyName: "defaultGroupTemplate", first: true, predicate: ["defaultGroupTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupSelectedTemplate", first: true, predicate: ["defaultGroupSelectedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "selectedRowGroupContainerSetter", first: true, predicate: ["selectedRowGroupContainer"], descendants: true, read: ElementRef }, { propertyName: "rowParents", predicate: ["rowParent"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
4396
+ <div *ngIf="showResultsCount && searchResultMessage"
4216
4397
  class="results-count" [ngClass]="{ 'format-bottom-padding': this.searchResultMessage === '' }">
4217
4398
  {{ this.searchResultMessage }}
4218
4399
  </div>
@@ -4386,7 +4567,7 @@ SearchListComponent = __decorate$2([
4386
4567
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchListComponent, decorators: [{
4387
4568
  type: Component,
4388
4569
  args: [{ selector: "hci-search-list", template: `
4389
- <div
4570
+ <div *ngIf="showResultsCount && searchResultMessage"
4390
4571
  class="results-count" [ngClass]="{ 'format-bottom-padding': this.searchResultMessage === '' }">
4391
4572
  {{ this.searchResultMessage }}
4392
4573
  </div>
@@ -4580,6 +4761,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
4580
4761
  type: Input
4581
4762
  }], groupingFields: [{
4582
4763
  type: Input
4764
+ }], delimiter: [{
4765
+ type: Input
4583
4766
  }], groupByAllowedFields: [{
4584
4767
  type: Input
4585
4768
  }], pageSize: [{