Commit f770f407971c6d99e39ce488fe29cf08c9a76442

Authored by nickAS21
1 parent ca940ba1

Lwm2m: front: update filter for models

... ... @@ -96,7 +96,6 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
96 96 configurationJson: [null, Validators.required]
97 97 });
98 98 this.lwm2mDeviceProfileFormGroup.valueChanges.subscribe((value) => {
99   - console.warn('main form');
100 99 if (!this.disabled) {
101 100 this.updateDeviceProfileValue(value);
102 101 }
... ... @@ -185,9 +184,6 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro
185 184 observeAttrTelemetry: this.getObserveAttrTelemetryObjects(objectsList)
186 185 },
187 186 {emitEvent: false});
188   - // this.lwm2mDeviceProfileFormGroup.get('observeAttrTelemetry').markAsPristine({
189   - // onlySelf: true
190   - // });
191 187 }
192 188
193 189 private updateDeviceProfileValue(config): void {
... ...
... ... @@ -20,12 +20,12 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
20 20 import { Store } from '@ngrx/store';
21 21 import { AppState } from '@core/core.state';
22 22 import { Observable, of } from 'rxjs';
23   -import { filter, mergeMap, share, tap } from 'rxjs/operators';
  23 +import { filter, map, mergeMap, tap } from 'rxjs/operators';
24 24 import { ObjectLwM2M } from './profile-config.models';
25 25 import { TranslateService } from '@ngx-translate/core';
26 26 import { DeviceProfileService } from '@core/http/device-profile.service';
27 27 import { Direction } from '@shared/models/page/sort-order';
28   -import { isDefined } from '@core/utils';
  28 +import { isDefined, isDefinedAndNotNull, isEmptyStr } from '@core/utils';
29 29
30 30 @Component({
31 31 selector: 'tb-profile-lwm2m-object-list',
... ... @@ -42,6 +42,7 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
42 42
43 43 private requiredValue: boolean;
44 44 private dirty = false;
  45 + private allObjectsList: Observable<Array<ObjectLwM2M>>;
45 46
46 47 lwm2mListFormGroup: FormGroup;
47 48 modelValue: Array<number> | null;
... ... @@ -71,7 +72,8 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
71 72
72 73 @ViewChild('objectInput') objectInput: ElementRef<HTMLInputElement>;
73 74
74   - private propagateChange = (v: any) => { };
  75 + private propagateChange = (v: any) => {
  76 + };
75 77
76 78 constructor(private store: Store<AppState>,
77 79 public translate: TranslateService,
... ... @@ -106,8 +108,8 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
106 108 }
107 109 }),
108 110 filter((value) => typeof value === 'string'),
109   - mergeMap(name => this.fetchListObjects(name)),
110   - share()
  111 + // map(value => value ? value : ''),
  112 + mergeMap(searchText => this.fetchListObjects(searchText))
111 113 );
112 114 }
113 115
... ... @@ -147,7 +149,6 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
147 149 this.lwm2mListFormGroup.get('objectsList').setValue(this.objectsList);
148 150 this.addList.next(this.objectsList);
149 151 }
150   - // this.propagateChange(this.modelValue);
151 152 this.clear();
152 153 }
153 154
... ... @@ -162,7 +163,6 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
162 163 if (!this.modelValue.length) {
163 164 this.modelValue = null;
164 165 }
165   - // this.propagateChange(this.modelValue);
166 166 this.clear();
167 167 }
168 168 }
... ... @@ -173,15 +173,34 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V
173 173
174 174 private fetchListObjects = (searchText?: string): Observable<Array<ObjectLwM2M>> => {
175 175 this.searchText = searchText;
176   - const sortOrder = {
177   - property: 'name',
178   - direction: Direction.ASC
179   - };
180   - return this.deviceProfileService.getLwm2mObjects(sortOrder, null, searchText).pipe(
181   - mergeMap(objectsList => of(objectsList))
  176 + const filters = {names: [], ids: []};
  177 + if (isDefinedAndNotNull(searchText) && !isEmptyStr(searchText)) {
  178 + const ids = searchText.match(/\d+/g);
  179 + filters.ids = isDefinedAndNotNull(ids) ? ids.map(Number) as [] : filters.ids;
  180 + const names = searchText.trim().split(" ") as [];
  181 + filters.names = names;
  182 + }
  183 + const predicate = objectLwM2M => filters.names.filter(word => objectLwM2M.name.toUpperCase().includes(word.toUpperCase())).length>0
  184 + || filters.ids.includes(objectLwM2M.id);
  185 + return this.getListModels().pipe(
  186 + map(objectLwM2Ms => searchText ? objectLwM2Ms.filter(predicate) : objectLwM2Ms)
182 187 );
183 188 }
184 189
  190 + private getListModels(): Observable<Array<ObjectLwM2M>> {
  191 + if (!this.allObjectsList) {
  192 + const sortOrder = {
  193 + property: 'name',
  194 + direction: Direction.ASC
  195 + };
  196 + this.allObjectsList = this.deviceProfileService.getLwm2mObjects(sortOrder, null, null).pipe(
  197 + mergeMap(objectsList => of(objectsList))
  198 + );
  199 + }
  200 + return this.allObjectsList;
  201 + }
  202 +
  203 +
185 204 onFocus = (): void => {
186 205 if (this.dirty) {
187 206 this.lwm2mListFormGroup.get('objectLwm2m').updateValueAndValidity({onlySelf: true, emitEvent: true});
... ...