Преглед на файлове

nueva implementación para las vistas de listas

robert2206 преди 8 години
родител
ревизия
1099b2a896

+ 21 - 5
src/app/app.component.ts

@@ -1,5 +1,5 @@
 import { Component, ViewChild } from '@angular/core';
-import { Nav, Platform, IonicApp, Events } from 'ionic-angular';
+import { Nav, Platform, IonicApp, ToastController, Events } from 'ionic-angular';
 import { StatusBar } from 'ionic-native';
 
 import { OLoader } from "../components/oloader/oloader";
@@ -22,6 +22,7 @@ import { SettingsPage } from '../pages/settings/settings';
 import { AboutPage } from '../pages/about/about';
 
 import { Slots } from "../utils/slots";
+import { Toaster } from "../utils/toaster";
 
 @Component({
     templateUrl: 'app.html'
@@ -36,7 +37,8 @@ export class OdooMobileApp {
 
     constructor(
         public platform: Platform,
-        public events: Events
+        public events: Events,
+        public toastCtrl: ToastController
     ) {
         this.initializeApp();
 
@@ -139,7 +141,7 @@ export class OdooMobileApp {
     /**
      *
      */
-    subscribeEvents(): void {
+    private subscribeEvents(): void {
         this.events.subscribe(Slots.APP_LOADING, () => {
             this.loader.show();
         });
@@ -148,9 +150,23 @@ export class OdooMobileApp {
             this.loader.hide();
         });
 
-        this.events.subscribe(Slots.APP_ERROR, () => { 
-            
+        this.events.subscribe(Slots.APP_INFO, data => {
+            this.showToast(data[0]);
         });
+
+        this.events.subscribe(Slots.APP_ERROR, data => {
+            this.showToast(data[0]);
+        });
+    }
+
+    /**
+     *
+     */
+    private showToast(text: string) {
+        this.toastCtrl.create({
+            message: text,
+            duration: 3000
+        }).present();
     }
 
     // Open the page

+ 97 - 0
src/defaults/default-list-view.ts

@@ -0,0 +1,97 @@
+import { ReflectiveInjector, OnInit, OnDestroy } from "@angular/core";
+import { Events, App, IonicApp, Config, Platform } from "ionic-angular";
+import { Slots } from "../utils/slots";
+
+/**
+ * Use with VirtualScroll
+ */
+export abstract class ListView<E> implements OnInit, OnDestroy {
+
+    private _eventsSlots: Events;
+    private _isSearch: boolean;
+    private _itemsFound: Array<E>;
+    private _items: Array<E>;
+
+    constructor() {
+        let injector = ReflectiveInjector.resolveAndCreate([App, IonicApp, Config, Platform, Events]);
+
+        this._eventsSlots = injector.get(Events);
+    }
+
+    /**
+     *
+     */
+    ngOnInit() {
+        this._eventsSlots.subscribe(Slots.ITEM_SAVED, data => {
+            this.add(data);
+        });
+    }
+
+    /**
+     *
+     */
+    ngOnDestroy() {
+        this._eventsSlots.unsubscribe(Slots.ITEM_SAVED);
+    }
+
+    /**
+     *
+     */
+    set items(_items: Array<E>) {
+        this._items = _items;
+    }
+
+    /**
+     *
+     */
+    get items() {
+        return this._items;
+    }
+
+    /**
+     *
+     */
+    add(o: E): void {
+        this.items.push(o);
+    }
+
+    /**
+     *
+     */
+    remove(o: E) {
+        let index = this.items.indexOf(o);
+        this.items.splice(index, 1);
+    }
+
+    /**
+     *
+     */
+    get(index: number) {
+        return this.items[index];
+    }
+
+    /**
+     *
+     */
+    hasItems(): boolean {
+        return this._items.length != 0;
+    }
+
+    /**
+     *
+     */
+    isSearch(): boolean {
+        return this._isSearch;
+    }
+
+    /**
+     *
+     */
+    toggleSearch(): void {
+        this._isSearch = !this._isSearch;
+
+        if (this.isSearch()) {
+
+        }
+    }
+}

+ 1 - 3
src/defaults/default-listable.ts

@@ -1,10 +1,10 @@
+import { ReflectiveInjector,  } from "@angular/core";
 import { LoadingController } from 'ionic-angular';
 import { IListable } from '../interfaces/listable-interface';
 import filter from 'async/filter';
 
 export abstract class DefaultListable<T> implements IListable<T> {
 
-    private type: T;
     private _search: boolean;
     private _elements: Array<T>;
     private _findedElements: Array<T>;
@@ -18,8 +18,6 @@ export abstract class DefaultListable<T> implements IListable<T> {
         this._elements = [];
         this._findedElements = [];
         this._visibleElements = [];
-        console.log(this.type);
-        
     }
 
     /**

+ 6 - 9
src/pages/budget-details/budget-details.ts

@@ -4,11 +4,11 @@ import { Slots } from "../../utils/slots";
 import { DataProvider } from "../../providers/data-provider";
 import { SaleOrder } from "../../models/sale.order";
 
-
 @Component({
     selector: 'page-budget-details',
     templateUrl: 'budget-details.html',
-    providers: [ SaleOrder ]
+    providers: [SaleOrder],
+    
 })
 export class BudgetDetailsPage {
 
@@ -27,12 +27,9 @@ export class BudgetDetailsPage {
     }
 
     save(): void {
-        this.events.publish(Slots.ITEM_SAVED, this.saleOrder);
-        this.navCtrl.pop(this);
-
-        // this.db.save(DataProvider.DOCS.SALE_ORDER, this.saleOrder).then(saleOrder => { 
-            
-        //     this.navCtrl.pop(this);
-        // }).catch(e => console.log(e));
+        this.db.save(DataProvider.DOCS.SALE_ORDER, this.saleOrder).then(saleOrder => { 
+            this.events.publish(Slots.ITEM_SAVED, this.saleOrder);
+            this.navCtrl.pop(this);
+        }).catch(e => console.log(e));
     }
 }

+ 29 - 30
src/pages/budget-list/budget-list.ts

@@ -1,29 +1,27 @@
-import { Component } from '@angular/core';
-import { NavController, LoadingController, ToastController, ActionSheetController, Events } from 'ionic-angular';
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { NavController, ToastController, ActionSheetController, Events } from 'ionic-angular';
 import { Slots } from "../../utils/slots";
 import { INavigable } from "../../interfaces/navigable-interface";
 import { DataProvider } from "../../providers/data-provider";
 import { DefaultListable } from "../../defaults/default-listable";
+import { DefaultListView } from "../../defaults/default-list-view";
 import { SaleOrder } from "../../models/sale.order";
 import { BudgetDetailsPage } from "../budget-details/budget-details";
 
-import { OLoader } from "../../components/oloader/oloder";
-
 @Component({
     selector: 'page-budget-list',
     templateUrl: 'budget-list.html'
 })
-export class BudgetListPage extends DefaultListable<SaleOrder> implements INavigable {
+export class BudgetListPage extends DefaultListView implements INavigable {
 
-  constructor(
-    public navCtrl: NavController,
-    public loadingCtrl: LoadingController,
-    public toastCtrl: ToastController,
-    public actionSheetCtrl: ActionSheetController,
-    public events: Events,
-    public db: DataProvider
+    constructor(
+        public navCtrl: NavController,
+        public toastCtrl: ToastController,
+        public actionSheetCtrl: ActionSheetController,
+        public events: Events,
+        public db: DataProvider
     ) { 
-        super(loadingCtrl);
+        super();
     }
     
     /**
@@ -31,22 +29,27 @@ export class BudgetListPage extends DefaultListable<SaleOrder> implements INavig
      */
     ionViewDidLoad() {
         this.initialize();
-
-        this.events.subscribe(Slots.ITEM_SAVED, data => {
-            this.add(data[0]);
-        });
     }
 
+    // /**
+    //  *
+    //  */
+    // ngOnInit() {
+    //     this.events.subscribe(Slots.ITEM_SAVED, data => {
+    //         this.add(data[0]);
+    //     });
+    // }
+
+    // /**
+    //  *
+    //  */
+    // ngOnDestroy() {
+    //     this.events.unsubscribe(Slots.ITEM_SAVED);
+    // }
+
     /**
      *
      */
-    ionViewDidLeave() {
-        this.events.unsubscribe(Slots.ITEM_SAVED);
-    }
-
-    /**
-    *
-    */
     initialize(): void {
         this.events.publish(Slots.APP_LOADING);
 
@@ -61,11 +64,7 @@ export class BudgetListPage extends DefaultListable<SaleOrder> implements INavig
             console.log(e);
 
             this.events.publish(Slots.APP_LOADED);
-
-            this.toastCtrl.create({
-                message: "No se ha podido cargar los presupuestos",
-                duration: 3000
-            }).present();
+            this.events.publish(Slots.APP_ERROR, "No se ha podido cargar las órdenes de venta");
         });
     }
 
@@ -73,7 +72,7 @@ export class BudgetListPage extends DefaultListable<SaleOrder> implements INavig
     *
     */
     goToPage(page: any) {
-        this.navCtrl.push(BudgetDetailsPage, this);
+        this.navCtrl.push(BudgetDetailsPage);
     }
 
     /**

+ 1 - 0
src/utils/slots.ts

@@ -3,6 +3,7 @@ export abstract class Slots {
     public static readonly APP_LOADING = "app:loading";
     public static readonly APP_LOADED = "app:loaded";
     public static readonly APP_ERROR = "app:error";
+    public static readonly APP_INFO = "app:info";
 
     // List events
     public static readonly ITEM_CREATE = "item:create";

+ 22 - 0
src/utils/toaster.ts

@@ -0,0 +1,22 @@
+import { ReflectiveInjector } from "@angular/core";
+import { ToastController, App } from "ionic-angular";
+
+export abstract class Toaster {
+
+    injector: ReflectiveInjector;
+
+    constructor() {
+        this.injector = ReflectiveInjector.resolveAndCreate([ToastController, App]);
+    }
+
+    /**
+     *
+     */
+    show(text: string): void {
+        let toastCtrl: ToastController = this.injector.get(ToastController);
+        toastCtrl.create({
+            message: text,
+            duration: 3000
+        }).present();
+    }
+}