54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
// #docregion
|
|
import { Component } from '@angular/core';
|
|
|
|
import { Phone, PhoneData } from '../core/phone/phone.service';
|
|
|
|
@Component({
|
|
selector: 'phone-list',
|
|
templateUrl: './phone-list.template.html',
|
|
})
|
|
export class PhoneListComponent {
|
|
phones: PhoneData[];
|
|
query: string;
|
|
orderProp: string;
|
|
|
|
constructor(phone: Phone) {
|
|
phone.query().subscribe(phones => {
|
|
this.phones = phones;
|
|
});
|
|
this.orderProp = 'age';
|
|
}
|
|
|
|
getPhones(): PhoneData[] {
|
|
return this.sortPhones(this.filterPhones(this.phones));
|
|
}
|
|
|
|
private filterPhones(phones: PhoneData[]) {
|
|
if (phones && this.query) {
|
|
return phones.filter(phone => {
|
|
let name = phone.name.toLowerCase();
|
|
let snippet = phone.snippet.toLowerCase();
|
|
return name.indexOf(this.query) >= 0 || snippet.indexOf(this.query) >= 0;
|
|
});
|
|
}
|
|
return phones;
|
|
}
|
|
|
|
private sortPhones(phones: PhoneData[]) {
|
|
if (phones && this.orderProp) {
|
|
return phones
|
|
.slice(0) // Make a copy
|
|
.sort((a, b) => {
|
|
if (a[this.orderProp] < b[this.orderProp]) {
|
|
return -1;
|
|
} else if ([b[this.orderProp] < a[this.orderProp]]) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
});
|
|
}
|
|
return phones;
|
|
}
|
|
}
|