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 | 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 { | ... | ... |