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 22 import { Subscription } from 'rxjs';
23 23 import { BreakpointObserver } from '@angular/cdk/layout';
24 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 26 import {
27 27 FILTER_EDIT_PANEL_DATA,
28 28 FiltersEditPanelComponent,
29 29 FiltersEditPanelData
30 30 } from '@home/components/filter/filters-edit-panel.component';
31 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 35 @Component({
34 36 selector: 'tb-filters-edit',
... ... @@ -65,7 +67,8 @@ export class FiltersEditComponent implements OnInit, OnDestroy {
65 67 constructor(private translate: TranslateService,
66 68 private overlay: Overlay,
67 69 private breakpointObserver: BreakpointObserver,
68   - private viewContainerRef: ViewContainerRef) {
  70 + private viewContainerRef: ViewContainerRef,
  71 + private dialog: MatDialog) {
69 72 }
70 73
71 74 private setupAliasController(aliasController: IAliasController) {
... ... @@ -101,33 +104,53 @@ export class FiltersEditComponent implements OnInit, OnDestroy {
101 104 if (this.disabled || !this.hasEditableFilters) {
102 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 156 private _createFiltersEditPanelInjector(overlayRef: OverlayRef, data: FiltersEditPanelData): PortalInjector {
... ...