Commit f9552e09c25c6eda35132a8741645fc5a3c8470f
1 parent
eb8f115c
UI: Fixed invalidate cache for change entityType or entitySubtype in entity-autocomplete component
Showing
1 changed file
with
29 additions
and
23 deletions
@@ -26,8 +26,8 @@ import { | @@ -26,8 +26,8 @@ import { | ||
26 | ViewChild | 26 | ViewChild |
27 | } from '@angular/core'; | 27 | } from '@angular/core'; |
28 | import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; | 28 | import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; |
29 | -import { Observable, of } from 'rxjs'; | ||
30 | -import { catchError, debounceTime, distinctUntilChanged, map, share, switchMap, tap } from 'rxjs/operators'; | 29 | +import { merge, Observable, of, Subject } from 'rxjs'; |
30 | +import { catchError, debounceTime, map, share, switchMap, tap } from 'rxjs/operators'; | ||
31 | import { Store } from '@ngrx/store'; | 31 | import { Store } from '@ngrx/store'; |
32 | import { AppState } from '@app/core/core.state'; | 32 | import { AppState } from '@app/core/core.state'; |
33 | import { TranslateService } from '@ngx-translate/core'; | 33 | import { TranslateService } from '@ngx-translate/core'; |
@@ -66,6 +66,7 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | @@ -66,6 +66,7 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | ||
66 | this.entityTypeValue = entityType; | 66 | this.entityTypeValue = entityType; |
67 | this.load(); | 67 | this.load(); |
68 | this.reset(); | 68 | this.reset(); |
69 | + this.refresh$.next([]); | ||
69 | this.dirty = true; | 70 | this.dirty = true; |
70 | } | 71 | } |
71 | } | 72 | } |
@@ -78,6 +79,7 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | @@ -78,6 +79,7 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | ||
78 | if (currentEntity) { | 79 | if (currentEntity) { |
79 | if ((currentEntity as any).type !== this.entitySubtypeValue) { | 80 | if ((currentEntity as any).type !== this.entitySubtypeValue) { |
80 | this.reset(); | 81 | this.reset(); |
82 | + this.refresh$.next([]); | ||
81 | this.dirty = true; | 83 | this.dirty = true; |
82 | } | 84 | } |
83 | } | 85 | } |
@@ -121,6 +123,8 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | @@ -121,6 +123,8 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | ||
121 | 123 | ||
122 | private dirty = false; | 124 | private dirty = false; |
123 | 125 | ||
126 | + private refresh$ = new Subject<Array<BaseData<EntityId>>>(); | ||
127 | + | ||
124 | private propagateChange = (v: any) => { }; | 128 | private propagateChange = (v: any) => { }; |
125 | 129 | ||
126 | constructor(private store: Store<AppState>, | 130 | constructor(private store: Store<AppState>, |
@@ -140,27 +144,29 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | @@ -140,27 +144,29 @@ export class EntityAutocompleteComponent implements ControlValueAccessor, OnInit | ||
140 | } | 144 | } |
141 | 145 | ||
142 | ngOnInit() { | 146 | ngOnInit() { |
143 | - this.filteredEntities = this.selectEntityFormGroup.get('entity').valueChanges | ||
144 | - .pipe( | ||
145 | - debounceTime(150), | ||
146 | - tap(value => { | ||
147 | - let modelValue; | ||
148 | - if (typeof value === 'string' || !value) { | ||
149 | - modelValue = null; | ||
150 | - } else { | ||
151 | - modelValue = value.id.id; | ||
152 | - } | ||
153 | - this.updateView(modelValue, value); | ||
154 | - if (value === null) { | ||
155 | - this.clear(); | ||
156 | - } | ||
157 | - }), | ||
158 | - // startWith<string | BaseData<EntityId>>(''), | ||
159 | - map(value => value ? (typeof value === 'string' ? value : value.name) : ''), | ||
160 | - distinctUntilChanged(), | ||
161 | - switchMap(name => this.fetchEntities(name)), | ||
162 | - share() | ||
163 | - ); | 147 | + this.filteredEntities = merge( |
148 | + this.refresh$.asObservable(), | ||
149 | + this.selectEntityFormGroup.get('entity').valueChanges | ||
150 | + .pipe( | ||
151 | + debounceTime(150), | ||
152 | + tap(value => { | ||
153 | + let modelValue; | ||
154 | + if (typeof value === 'string' || !value) { | ||
155 | + modelValue = null; | ||
156 | + } else { | ||
157 | + modelValue = value.id.id; | ||
158 | + } | ||
159 | + this.updateView(modelValue, value); | ||
160 | + if (value === null) { | ||
161 | + this.clear(); | ||
162 | + } | ||
163 | + }), | ||
164 | + // startWith<string | BaseData<EntityId>>(''), | ||
165 | + map(value => value ? (typeof value === 'string' ? value : value.name) : ''), | ||
166 | + switchMap(name => this.fetchEntities(name)), | ||
167 | + share() | ||
168 | + ) | ||
169 | + ); | ||
164 | } | 170 | } |
165 | 171 | ||
166 | ngAfterViewInit(): void {} | 172 | ngAfterViewInit(): void {} |