Commit 56275a5c093fe5b02548d5ad1db5e28ab6be3bd2

Authored by Vladyslav_Prykhodko
Committed by Andrew Shvayka
1 parent 020b158e

Improvement show edit filter dialog for customer

@@ -22,13 +22,15 @@ import { TranslateService } from '@ngx-translate/core'; @@ -22,13 +22,15 @@ import { TranslateService } from '@ngx-translate/core';
22 import { Subscription } from 'rxjs'; 22 import { Subscription } from 'rxjs';
23 import { BreakpointObserver } from '@angular/cdk/layout'; 23 import { BreakpointObserver } from '@angular/cdk/layout';
24 import { deepClone } from '@core/utils'; 24 import { deepClone } from '@core/utils';
25 -import { FilterInfo, isFilterEditable } from '@shared/models/query/query.models'; 25 +import { Filter, FilterInfo, isFilterEditable } from '@shared/models/query/query.models';
26 import { 26 import {
27 FILTER_EDIT_PANEL_DATA, 27 FILTER_EDIT_PANEL_DATA,
28 FiltersEditPanelComponent, 28 FiltersEditPanelComponent,
29 FiltersEditPanelData 29 FiltersEditPanelData
30 } from '@home/components/filter/filters-edit-panel.component'; 30 } from '@home/components/filter/filters-edit-panel.component';
31 import { ComponentPortal, PortalInjector } from '@angular/cdk/portal'; 31 import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
  32 +import { UserFilterDialogComponent, UserFilterDialogData } from '@home/components/filter/user-filter-dialog.component';
  33 +import { MatDialog } from '@angular/material/dialog';
32 34
33 @Component({ 35 @Component({
34 selector: 'tb-filters-edit', 36 selector: 'tb-filters-edit',
@@ -65,7 +67,8 @@ export class FiltersEditComponent implements OnInit, OnDestroy { @@ -65,7 +67,8 @@ export class FiltersEditComponent implements OnInit, OnDestroy {
65 constructor(private translate: TranslateService, 67 constructor(private translate: TranslateService,
66 private overlay: Overlay, 68 private overlay: Overlay,
67 private breakpointObserver: BreakpointObserver, 69 private breakpointObserver: BreakpointObserver,
68 - private viewContainerRef: ViewContainerRef) { 70 + private viewContainerRef: ViewContainerRef,
  71 + private dialog: MatDialog) {
69 } 72 }
70 73
71 private setupAliasController(aliasController: IAliasController) { 74 private setupAliasController(aliasController: IAliasController) {
@@ -101,33 +104,53 @@ export class FiltersEditComponent implements OnInit, OnDestroy { @@ -101,33 +104,53 @@ export class FiltersEditComponent implements OnInit, OnDestroy {
101 if (this.disabled || !this.hasEditableFilters) { 104 if (this.disabled || !this.hasEditableFilters) {
102 return; 105 return;
103 } 106 }
104 - const position = this.overlay.position();  
105 - const config = new OverlayConfig({  
106 - panelClass: 'tb-filters-edit-panel',  
107 - backdropClass: 'cdk-overlay-transparent-backdrop',  
108 - hasBackdrop: true,  
109 - });  
110 - const connectedPosition: ConnectedPosition = {  
111 - originX: 'start',  
112 - originY: 'bottom',  
113 - overlayX: 'start',  
114 - overlayY: 'top'  
115 - };  
116 - config.positionStrategy = position.flexibleConnectedTo(this.filtersEditPanelOrigin.elementRef)  
117 - .withPositions([connectedPosition]);  
118 - const overlayRef = this.overlay.create(config);  
119 - overlayRef.backdropClick().subscribe(() => {  
120 - overlayRef.dispose();  
121 - });  
122 -  
123 - const injector = this._createFiltersEditPanelInjector(  
124 - overlayRef,  
125 - {  
126 - aliasController: this.aliasController,  
127 - filtersInfo: deepClone(this.filtersInfo)  
128 - }  
129 - );  
130 - overlayRef.attach(new ComponentPortal(FiltersEditPanelComponent, this.viewContainerRef, injector)); 107 + const filteredArray = Object.entries(this.filtersInfo);
  108 +
  109 + if (filteredArray.length === 1) {
  110 + const singleFilter: Filter = {id: filteredArray[0][0], ...filteredArray[0][1]};
  111 + this.dialog.open<UserFilterDialogComponent, UserFilterDialogData,
  112 + Filter>(UserFilterDialogComponent, {
  113 + disableClose: true,
  114 + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'],
  115 + data: {
  116 + filter: singleFilter
  117 + }
  118 + }).afterClosed().subscribe(
  119 + (result) => {
  120 + if (result) {
  121 + this.filtersInfo[result.id] = result;
  122 + this.aliasController.updateUserFilter(result);
  123 + }
  124 + });
  125 + } else {
  126 + const position = this.overlay.position();
  127 + const config = new OverlayConfig({
  128 + panelClass: 'tb-filters-edit-panel',
  129 + backdropClass: 'cdk-overlay-transparent-backdrop',
  130 + hasBackdrop: true,
  131 + });
  132 + const connectedPosition: ConnectedPosition = {
  133 + originX: 'start',
  134 + originY: 'bottom',
  135 + overlayX: 'start',
  136 + overlayY: 'top'
  137 + };
  138 + config.positionStrategy = position.flexibleConnectedTo(this.filtersEditPanelOrigin.elementRef)
  139 + .withPositions([connectedPosition]);
  140 + const overlayRef = this.overlay.create(config);
  141 + overlayRef.backdropClick().subscribe(() => {
  142 + overlayRef.dispose();
  143 + });
  144 +
  145 + const injector = this._createFiltersEditPanelInjector(
  146 + overlayRef,
  147 + {
  148 + aliasController: this.aliasController,
  149 + filtersInfo: deepClone(this.filtersInfo)
  150 + }
  151 + );
  152 + overlayRef.attach(new ComponentPortal(FiltersEditPanelComponent, this.viewContainerRef, injector));
  153 + }
131 } 154 }
132 155
133 private _createFiltersEditPanelInjector(overlayRef: OverlayRef, data: FiltersEditPanelData): PortalInjector { 156 private _createFiltersEditPanelInjector(overlayRef: OverlayRef, data: FiltersEditPanelData): PortalInjector {