123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- import { BaseView } from "./base-view";
- import { PouchService } from "../services/pouch-service";
- import { Observable } from "rxjs/Observable";
- export abstract class BaseListView<T> extends BaseView<T>{
- items: T[];
- selectedIndex: number;
- filters: Array<[string, string, any]>;
- constructor(c: { new (): T; }, ...filters: Array<[string, string, any]>) {
- super(c, PouchService);
- this.items = [];
- this.selectedIndex = -1;
- this.filters = filters;
- this.initialize();
- }
- /**
- *
- */
- initialize() {
- let pouch = super.getInjectable(PouchService);
- pouch.getAll(this.getModelName()).subscribe(result => {
- this.applyFilter(result.docs);
- }, error => {
- console.log(error);
- });
-
- pouch.changes().subscribe(result => {
- console.log("esto es un cambio");
- console.log(result);
- }, error => console.log(error));
- }
- /**
- *
- */
- applyFilter(records: T[]): void {
- if (records.length == 0) {
- return;
- }
-
- if (this.getFilters().length == 0) {
- this.items = records;
- return;
- }
- this.items = records.filter(record => {
- let expressions = this.getFilters().map(filter => {
- let operator = "===";
- let leftOperand = "record." + filter[0];
- let rightOperand = typeof(filter[2]) === "string" ? "'" + filter[2] + "'" : filter[2];
- if (filter[1] === "!=") {
- operator = "!==";
- }
- if (filter[1] === ">") {
- operator = ">";
- }
- if (filter[1] === "<") {
- operator = "<";
- }
- if (filter[1] === ">=") {
- operator = "<=";
- }
- if (filter[1] === "<=") {
- operator = "<=";
- }
- return leftOperand + operator + rightOperand;
- });
- return eval(expressions.join("&&"));
- });
- }
-
- /**
- *
- */
- performDelete(): Observable<any> {
- // return Observable.empty();
- return super.getInjectable(PouchService).remove(this.getSelectedItem());
- }
- /**
- *
- */
- getItems(): T[] {
- return this.items;
- }
-
- /**
- *
- * @param items
- */
- setItems(items: T[]): void {
- this.items = items;
- this.applyFilter(this.getItems());
- }
- /**
- *
- */
- getSelectedIndex(): number {
- return this.selectedIndex;
- }
- /**
- *
- * @param index
- */
- setSelectedIndex(selectedIndex: number): void {
- this.selectedIndex = selectedIndex;
- }
- /**
- *
- * @param item
- */
- indexOf(item: T): number {
- return this.getItems().indexOf(item);
- }
- /**
- *
- */
- getSelectedItem(): T {
- if (this.getSelectedIndex() === -1) {
- return null;
- }
- return this.getItems()[this.getSelectedIndex()];
- }
- /**
- *
- * @param item
- */
- setSelectedItem(item: T): void {
- let index = this.indexOf(item);
- this.setSelectedIndex(index);
- }
- /**
- *
- */
- deselectItem(): void {
- this.setSelectedIndex(-1);
- }
- /**
- *
- */
- getFilters(): Array<[string, string, any]> {
- return this.filters;
- }
- /**
- *
- * @param filters
- */
- setFilters(filters: Array<[string, string, any]>): void {
- this.filters = filters;
- this.applyFilter(this.getItems());
- }
- }
|