Commit 56275a5c093fe5b02548d5ad1db5e28ab6be3bd2
Committed by
Andrew Shvayka
1 parent
020b158e
Improvement show edit filter dialog for customer
Showing
1 changed file
with
52 additions
and
29 deletions
@@ -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 { |