Commit 41e9fd57c57821d2bf5a1991451f4448ce87c64d

Authored by Vladyslav_Prykhodko
Committed by Andrew Shvayka
1 parent 0fbd95cd

Improvement view filter dialog setting

... ... @@ -29,13 +29,6 @@
29 29 <fieldset [disabled]="isLoading$ | async" fxLayout="column">
30 30 <section fxLayout="row" fxLayoutGap="8px" class="entity-key">
31 31 <section fxFlex="70" fxLayout="row" formGroupName="key" fxLayoutGap="8px">
32   - <mat-form-field fxFlex="60" class="mat-block">
33   - <mat-label translate>filter.key-name</mat-label>
34   - <input matInput required formControlName="key">
35   - <mat-error *ngIf="keyFilterFormGroup.get('key.key').hasError('required')">
36   - {{ 'filter.key-name-required' | translate }}
37   - </mat-error>
38   - </mat-form-field>
39 32 <mat-form-field fxFlex="40" class="mat-block">
40 33 <mat-label translate>filter.key-type.key-type</mat-label>
41 34 <mat-select required formControlName="type">
... ... @@ -44,10 +37,24 @@
44 37 </mat-option>
45 38 </mat-select>
46 39 </mat-form-field>
  40 + <mat-form-field fxFlex="60" class="mat-block">
  41 + <mat-label translate>filter.key-name</mat-label>
  42 + <input matInput required formControlName="key"
  43 + [matAutocomplete]="auto"
  44 + [matAutocompleteDisabled]="keyFilterFormGroup.get('key.type').value !== entityField">
  45 + <mat-autocomplete autoActiveFirstOption #auto="matAutocomplete">
  46 + <mat-option *ngFor="let option of filteredEntityFields | async" [value]="option">
  47 + {{option}}
  48 + </mat-option>
  49 + </mat-autocomplete>
  50 + <mat-error *ngIf="keyFilterFormGroup.get('key.key').hasError('required')">
  51 + {{ 'filter.key-name-required' | translate }}
  52 + </mat-error>
  53 + </mat-form-field>
47 54 </section>
48 55 <mat-form-field fxFlex="30" class="mat-block">
49 56 <mat-label translate>filter.value-type.value-type</mat-label>
50   - <mat-select matInput formControlName="valueType">
  57 + <mat-select formControlName="valueType">
51 58 <mat-select-trigger>
52 59 <mat-icon class="tb-mat-18" svgIcon="{{ entityKeyValueTypes.get(keyFilterFormGroup.get('valueType').value)?.icon }}"></mat-icon>
53 60 <span>{{ entityKeyValueTypes.get(keyFilterFormGroup.get('valueType').value)?.name | translate }}</span>
... ...
... ... @@ -27,10 +27,14 @@ import {
27 27 entityKeyTypeTranslationMap,
28 28 EntityKeyValueType,
29 29 entityKeyValueTypesMap,
30   - KeyFilterInfo, KeyFilterPredicate
  30 + KeyFilterInfo,
  31 + KeyFilterPredicate
31 32 } from '@shared/models/query/query.models';
32 33 import { DialogService } from '@core/services/dialog.service';
33 34 import { TranslateService } from '@ngx-translate/core';
  35 +import { EntityField, entityFields } from '@shared/models/entity.models';
  36 +import { Observable } from 'rxjs';
  37 +import { filter, map, startWith } from 'rxjs/operators';
34 38
35 39 export interface KeyFilterDialogData {
36 40 keyFilter: KeyFilterInfo;
... ... @@ -61,6 +65,14 @@ export class KeyFilterDialogComponent extends
61 65
62 66 submitted = false;
63 67
  68 + entityFields: { [fieldName: string]: EntityField };
  69 +
  70 + entityFieldsList: string[];
  71 +
  72 + readonly entityField = EntityKeyType.ENTITY_FIELD;
  73 +
  74 + filteredEntityFields: Observable<string[]>;
  75 +
64 76 constructor(protected store: Store<AppState>,
65 77 protected router: Router,
66 78 @Inject(MAT_DIALOG_DATA) public data: KeyFilterDialogData,
... ... @@ -99,9 +111,28 @@ export class KeyFilterDialogComponent extends
99 111 );
100 112 }
101 113 });
  114 +
  115 + this.keyFilterFormGroup.get('key.key').valueChanges.pipe(
  116 + filter((keyName) => this.keyFilterFormGroup.get('key.type').value === this.entityField && this.entityFields.hasOwnProperty(keyName))
  117 + ).subscribe((keyName: string) => {
  118 + const prevValueType: EntityKeyValueType = this.keyFilterFormGroup.value.valueType;
  119 + const newValueType = this.entityFields[keyName]?.time ? EntityKeyValueType.DATE_TIME : EntityKeyValueType.STRING;
  120 + if (prevValueType !== newValueType) {
  121 + this.keyFilterFormGroup.get('valueType').patchValue(newValueType, {emitEvent: false});
  122 + }
  123 + });
  124 +
  125 + this.entityFields = entityFields;
  126 + this.entityFieldsList = Object.values(entityFields).map(entityField => entityField.keyName).sort();
102 127 }
103 128
104 129 ngOnInit(): void {
  130 + this.filteredEntityFields = this.keyFilterFormGroup.get('key.key').valueChanges.pipe(
  131 + startWith(''),
  132 + map(value => {
  133 + return this.entityFieldsList.filter(option => option.startsWith(value));
  134 + })
  135 + );
105 136 }
106 137
107 138 isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
... ...