Merge pull request #5932 from vvlladd28/improvement/dashboard-autocomplete/double-request-and-init
[3.3.3] UI: Improvement dashboard autocomplete - fixed double request and init component
This commit is contained in:
commit
ac8f866d1a
@ -19,6 +19,7 @@
|
|||||||
<input matInput type="text" placeholder="{{ placeholder || ('dashboard.dashboard' | translate) }}"
|
<input matInput type="text" placeholder="{{ placeholder || ('dashboard.dashboard' | translate) }}"
|
||||||
#dashboardInput
|
#dashboardInput
|
||||||
formControlName="dashboard"
|
formControlName="dashboard"
|
||||||
|
(focusin)="onFocus()"
|
||||||
[required]="required"
|
[required]="required"
|
||||||
[matAutocomplete]="dashboardAutocomplete">
|
[matAutocomplete]="dashboardAutocomplete">
|
||||||
<button *ngIf="selectDashboardFormGroup.get('dashboard').value && !disabled"
|
<button *ngIf="selectDashboardFormGroup.get('dashboard').value && !disabled"
|
||||||
|
|||||||
@ -19,7 +19,7 @@ import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from
|
|||||||
import { Observable, of } from 'rxjs';
|
import { Observable, of } from 'rxjs';
|
||||||
import { PageLink } from '@shared/models/page/page-link';
|
import { PageLink } from '@shared/models/page/page-link';
|
||||||
import { Direction } from '@shared/models/page/sort-order';
|
import { Direction } from '@shared/models/page/sort-order';
|
||||||
import { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';
|
import { catchError, debounceTime, distinctUntilChanged, map, share, switchMap, tap } from 'rxjs/operators';
|
||||||
import { emptyPageData, PageData } from '@shared/models/page/page-data';
|
import { emptyPageData, PageData } from '@shared/models/page/page-data';
|
||||||
import { DashboardInfo } from '@app/shared/models/dashboard.models';
|
import { DashboardInfo } from '@app/shared/models/dashboard.models';
|
||||||
import { DashboardService } from '@core/http/dashboard.service';
|
import { DashboardService } from '@core/http/dashboard.service';
|
||||||
@ -43,6 +43,8 @@ import { FloatLabelType } from '@angular/material/form-field/form-field';
|
|||||||
})
|
})
|
||||||
export class DashboardAutocompleteComponent implements ControlValueAccessor, OnInit, AfterViewInit {
|
export class DashboardAutocompleteComponent implements ControlValueAccessor, OnInit, AfterViewInit {
|
||||||
|
|
||||||
|
private dirty = false;
|
||||||
|
|
||||||
selectDashboardFormGroup: FormGroup;
|
selectDashboardFormGroup: FormGroup;
|
||||||
|
|
||||||
modelValue: DashboardInfo | string | null;
|
modelValue: DashboardInfo | string | null;
|
||||||
@ -117,10 +119,10 @@ export class DashboardAutocompleteComponent implements ControlValueAccessor, OnI
|
|||||||
}
|
}
|
||||||
this.updateView(modelValue);
|
this.updateView(modelValue);
|
||||||
}),
|
}),
|
||||||
startWith<string | DashboardInfo>(''),
|
|
||||||
map(value => value ? (typeof value === 'string' ? value : value.name) : ''),
|
map(value => value ? (typeof value === 'string' ? value : value.name) : ''),
|
||||||
distinctUntilChanged(),
|
distinctUntilChanged(),
|
||||||
switchMap(name => this.fetchDashboards(name) )
|
switchMap(name => this.fetchDashboards(name) ),
|
||||||
|
share()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,18 +161,19 @@ export class DashboardAutocompleteComponent implements ControlValueAccessor, OnI
|
|||||||
this.dashboardService.getDashboardInfo(value).subscribe(
|
this.dashboardService.getDashboardInfo(value).subscribe(
|
||||||
(dashboard) => {
|
(dashboard) => {
|
||||||
this.modelValue = this.useIdValue ? dashboard.id.id : dashboard;
|
this.modelValue = this.useIdValue ? dashboard.id.id : dashboard;
|
||||||
this.selectDashboardFormGroup.get('dashboard').patchValue(dashboard, {emitEvent: true});
|
this.selectDashboardFormGroup.get('dashboard').patchValue(dashboard, {emitEvent: false});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.modelValue = this.useIdValue ? value.id.id : value;
|
this.modelValue = this.useIdValue ? value.id.id : value;
|
||||||
this.selectDashboardFormGroup.get('dashboard').patchValue(value, {emitEvent: true});
|
this.selectDashboardFormGroup.get('dashboard').patchValue(value, {emitEvent: false});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.modelValue = null;
|
this.modelValue = null;
|
||||||
this.selectDashboardFormGroup.get('dashboard').patchValue(null, {emitEvent: true});
|
this.selectDashboardFormGroup.get('dashboard').patchValue('', {emitEvent: false});
|
||||||
this.selectFirstDashboardIfNeeded();
|
this.selectFirstDashboardIfNeeded();
|
||||||
}
|
}
|
||||||
|
this.dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateView(value: DashboardInfo | string | null) {
|
updateView(value: DashboardInfo | string | null) {
|
||||||
@ -224,8 +227,15 @@ export class DashboardAutocompleteComponent implements ControlValueAccessor, OnI
|
|||||||
return dashboardsObservable;
|
return dashboardsObservable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onFocus() {
|
||||||
|
if (this.dirty) {
|
||||||
|
this.selectDashboardFormGroup.get('dashboard').updateValueAndValidity({onlySelf: true});
|
||||||
|
this.dirty = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
this.selectDashboardFormGroup.get('dashboard').patchValue(null, {emitEvent: true});
|
this.selectDashboardFormGroup.get('dashboard').patchValue('');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.dashboardInput.nativeElement.blur();
|
this.dashboardInput.nativeElement.blur();
|
||||||
this.dashboardInput.nativeElement.focus();
|
this.dashboardInput.nativeElement.focus();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user