У меня есть это приложение, где у меня есть 3 поля поиска: имя пользователя, организация и активный (логический). При нажатии на кнопку поиска я фильтрую таблицу, используя комбинацию значений выше или по одному поиску.
Мой Json:
[
{
"id": 1,
"userName": "abc",
"active": true,
"organisations": [{
"id": 2,
"organisation": "org1"
},
{
"id": 3,
"organisation": "org2"
}]
},
{
"id": 2,
"userName": "def",
"active": true,
"organisations": [{
"id": 4,
"organisation": "org4"
},
{
"id": 5,
"organisation": "org5"
}]
},
{
"id": 3,
"userName": "ghj",
"active": false,
"lastLogon": "",
"organisations": [{
"id": 6,
"organisation": "org6"
},
{
"id": 7,
"organisation": "org7"
}]
}
]
Мой фильтр:
@Pipe({name: 'searchfilter'})
export class SearchFilterPipe implements PipeTransform {
transform(items: Array<any>, filter: {[key: string]: any }): Array<any> {
return items.filter(item => {
let notMatchingField = Object.keys(filter)
.find(key => item[key] !== filter[key]);
return !notMatchingField;
});
}
}
My Html:
<tr *ngFor="let user of users | searchfilter: tableFilter;">
<td>{{ user.userName }}</td>
<td><input type="checkbox" [checked]="user.active"></td>
</tr>
tableFilter - это объект поиска, который может иметь либо одно поле поиска, либо комбинацию из двух или трех полей. Например: tableFilter = {"userName": "ab c"} или tableFilter = {"userName": "ab c", "active": true} или tableFilter = {"userName": "ab c "," organization: "org6", "active": true}.
Мой код работает для имени пользователя или для активного, или для обоих типов. Но происходит сбой, когда я использую организацию как отдельное поле или как комбинацию, как мой массив вложен.
Так что любая помощь с фильтром трубы будет полезна. Я слышал о библиотеке Loda sh, но я не знаю, как ее использовать. Заранее спасибо.