From 56275a5c093fe5b02548d5ad1db5e28ab6be3bd2 Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Tue, 28 Jul 2020 10:49:20 +0300 Subject: [PATCH] Improvement show edit filter dialog for customer --- .../filter/filters-edit.component.ts | 81 ++++++++++++------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/filter/filters-edit.component.ts b/ui-ngx/src/app/modules/home/components/filter/filters-edit.component.ts index 4019f0d24d..01028a21fb 100644 --- a/ui-ngx/src/app/modules/home/components/filter/filters-edit.component.ts +++ b/ui-ngx/src/app/modules/home/components/filter/filters-edit.component.ts @@ -22,13 +22,15 @@ import { TranslateService } from '@ngx-translate/core'; import { Subscription } from 'rxjs'; import { BreakpointObserver } from '@angular/cdk/layout'; import { deepClone } from '@core/utils'; -import { FilterInfo, isFilterEditable } from '@shared/models/query/query.models'; +import { Filter, FilterInfo, isFilterEditable } from '@shared/models/query/query.models'; import { FILTER_EDIT_PANEL_DATA, FiltersEditPanelComponent, FiltersEditPanelData } from '@home/components/filter/filters-edit-panel.component'; import { ComponentPortal, PortalInjector } from '@angular/cdk/portal'; +import { UserFilterDialogComponent, UserFilterDialogData } from '@home/components/filter/user-filter-dialog.component'; +import { MatDialog } from '@angular/material/dialog'; @Component({ selector: 'tb-filters-edit', @@ -65,7 +67,8 @@ export class FiltersEditComponent implements OnInit, OnDestroy { constructor(private translate: TranslateService, private overlay: Overlay, private breakpointObserver: BreakpointObserver, - private viewContainerRef: ViewContainerRef) { + private viewContainerRef: ViewContainerRef, + private dialog: MatDialog) { } private setupAliasController(aliasController: IAliasController) { @@ -101,33 +104,53 @@ export class FiltersEditComponent implements OnInit, OnDestroy { if (this.disabled || !this.hasEditableFilters) { return; } - const position = this.overlay.position(); - const config = new OverlayConfig({ - panelClass: 'tb-filters-edit-panel', - backdropClass: 'cdk-overlay-transparent-backdrop', - hasBackdrop: true, - }); - const connectedPosition: ConnectedPosition = { - originX: 'start', - originY: 'bottom', - overlayX: 'start', - overlayY: 'top' - }; - config.positionStrategy = position.flexibleConnectedTo(this.filtersEditPanelOrigin.elementRef) - .withPositions([connectedPosition]); - const overlayRef = this.overlay.create(config); - overlayRef.backdropClick().subscribe(() => { - overlayRef.dispose(); - }); - - const injector = this._createFiltersEditPanelInjector( - overlayRef, - { - aliasController: this.aliasController, - filtersInfo: deepClone(this.filtersInfo) - } - ); - overlayRef.attach(new ComponentPortal(FiltersEditPanelComponent, this.viewContainerRef, injector)); + const filteredArray = Object.entries(this.filtersInfo); + + if (filteredArray.length === 1) { + const singleFilter: Filter = {id: filteredArray[0][0], ...filteredArray[0][1]}; + this.dialog.open(UserFilterDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + filter: singleFilter + } + }).afterClosed().subscribe( + (result) => { + if (result) { + this.filtersInfo[result.id] = result; + this.aliasController.updateUserFilter(result); + } + }); + } else { + const position = this.overlay.position(); + const config = new OverlayConfig({ + panelClass: 'tb-filters-edit-panel', + backdropClass: 'cdk-overlay-transparent-backdrop', + hasBackdrop: true, + }); + const connectedPosition: ConnectedPosition = { + originX: 'start', + originY: 'bottom', + overlayX: 'start', + overlayY: 'top' + }; + config.positionStrategy = position.flexibleConnectedTo(this.filtersEditPanelOrigin.elementRef) + .withPositions([connectedPosition]); + const overlayRef = this.overlay.create(config); + overlayRef.backdropClick().subscribe(() => { + overlayRef.dispose(); + }); + + const injector = this._createFiltersEditPanelInjector( + overlayRef, + { + aliasController: this.aliasController, + filtersInfo: deepClone(this.filtersInfo) + } + ); + overlayRef.attach(new ComponentPortal(FiltersEditPanelComponent, this.viewContainerRef, injector)); + } } private _createFiltersEditPanelInjector(overlayRef: OverlayRef, data: FiltersEditPanelData): PortalInjector {