X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/docs/source/TaskStore.html diff --git a/docs/source/TaskStore.html b/docs/source/TaskStore.html new file mode 100644 index 00000000..cc460767 --- /dev/null +++ b/docs/source/TaskStore.html @@ -0,0 +1,173 @@ + + + The source code + + + + +
+tx.data.TaskStore = Ext.extend(Ext.data.GroupingStore, {
+	constructor: function(){
+		tx.data.TaskStore.superclass.constructor.call(this, {
+	        sortInfo:{field: 'dueDate', direction: "ASC"},
+	        groupField:'dueDate',
+	        taskFilter: 'all',
+	        reader: new Ext.data.JsonReader({
+	            id: 'taskId',
+				fields: tx.data.Task
+	        })
+	    });
+		this.conn = tx.data.conn;
+	    this.proxy = new Ext.sql.Proxy(tx.data.conn, 'task', 'taskId', this);
+	},
+	
+	applyFilter : function(filter){
+    	if(filter !== undefined){
+    		this.taskFilter = filter;
+    	}
+        var value = this.taskFilter;
+        if(value == 'all'){
+            return this.clearFilter();
+        }
+        return this.filterBy(function(item){
+            return item.data.completed === value;
+        });
+    },
+
+    addTask : function(data){
+        this.suspendEvents();
+        this.clearFilter();
+        this.resumeEvents();
+        this.loadData([data], true);
+        this.suspendEvents();
+        this.applyFilter();
+        this.applyGrouping(true);
+        this.resumeEvents();
+        this.fireEvent('datachanged', this);
+    },
+
+	loadList: function(listId){
+		var multi = Ext.isArray(listId);
+		this.activeList = multi ? listId[0] : listId;
+		this.suspendEvents();
+        if(multi){
+			var ps = [];
+			for(var i = 0, len = listId.length; i < len; i++){
+				ps.push('?');
+			}
+			this.load({
+				params: {
+					where: 'where listId in (' + ps.join(',') + ')',
+					args: listId
+				}
+			});
+		}else{
+			this.load({params: {
+				where: 'where listId = ?',
+				args: [listId]
+			}});
+		}		
+        this.applyFilter();
+        this.applyGrouping(true);
+        this.resumeEvents();
+        this.fireEvent('datachanged', this);
+	},
+	
+	removeList: function(listId){
+		this.conn.execBy('delete from task where listId = ?', [listId]);
+		this.reload();
+	},
+	
+    prepareTable : function(){
+        try{
+        this.createTable({
+            name: 'task',
+            key: 'taskId',
+            fields: tx.data.Task.prototype.fields
+        });
+        }catch(e){console.log(e);}
+    },
+		
+	createTask : function(title, listText, dueDate, description, completed){
+		if(!Ext.isEmpty(title)){
+			var listId = '';
+			if(!Ext.isEmpty(listText)){
+				listId = tx.data.lists.addList(Ext.util.Format.htmlEncode(listText)).id;
+			}else{
+				listId = tx.data.lists.newList(false).id;
+			}
+            this.addTask({
+                taskId: Ext.uniqueId(),
+                title: Ext.util.Format.htmlEncode(title),
+                dueDate: dueDate||'',
+                description: description||'',
+                listId: listId,
+                completed: completed || false
+            });
+        }
+	},
+	
+	afterEdit : function(r){
+        if(r.isModified(this.getGroupState())){
+			this.applyGrouping();
+		}
+		//workaround WebKit cross-frame date issue
+		fixDateMember(r.data, 'completedDate');
+		fixDateMember(r.data, 'reminder');
+		fixDateMember(r.data, 'dueDate');
+		if(r.isModified('completed')){
+			r.editing = true;
+			r.set('completedDate', r.data.completed ? new Date() : '');
+			r.editing = false;
+		}
+		tx.data.TaskStore.superclass.afterEdit.apply(this, arguments);
+    },
+	
+	init : function(){
+		tx.data.lists.load();
+		this.load({
+			callback: function(){
+				// first time?
+				if(this.getCount() < 1){
+					Ext.Msg.confirm('Create Tasks?', 'Your database is currently empty. Would you like to insert some demo data?', 
+						function(btn){
+							if(btn == 'yes'){
+								tx.data.lists.loadDemoLists();
+								this.loadDemoTasks();	
+							}
+						}, this);
+				}
+			},
+			scope: this
+		});
+	},
+	
+	lookup : function(id){
+		var task;
+		if(task = this.getById(id)){
+			return task;
+		}
+		var data = this.proxy.table.lookup(id);
+		if (data) {
+			var result = this.reader.readRecords([data]);
+			return result.records[0];
+		}
+		return null; 
+	},
+	
+	/* This is used to laod some demo tasks if the task database is empty */
+	loadDemoTasks: function(){
+		var s = new Date();
+		// hardcoded demo tasks
+		this.addTask({taskId: Ext.uniqueId(), title:'Update Ext 2.0 documentation', listId:'ext2', description:'', dueDate: s.add('d', 21), completed: false, reminder: ''});
+		this.addTask({taskId: Ext.uniqueId(), title:'Release Ext 2.l Beta 1', listId:'ext2', description:'', dueDate:s.add('d', 2), completed: false, reminder: s.add('d', 2).clearTime(true).add('h', 9)});
+		this.addTask({taskId: Ext.uniqueId(), title:'Take wife to see movie', listId:'family', description:'', dueDate:s.add('d', 2), completed: false, reminder: ''});
+		this.addTask({taskId: Ext.uniqueId(), title:'Finish Simple Tasks v2 sample app', listId:'ext2', description:'', dueDate:s.add('d', 2), completed: false, reminder: ''});
+		this.addTask({taskId: Ext.uniqueId(), title:'Do something other than work', listId:'fun', description:'', dueDate:s.add('d', -1), completed: false, reminder: ''});
+		this.addTask({taskId: Ext.uniqueId(), title:'Go to the grocery store', listId:'family', description:'', dueDate:s.add('d', -1), completed: true, reminder: '', completedDate: new Date()});
+		this.addTask({taskId: Ext.uniqueId(), title:'Reboot my computer', listId:'personal-misc', description:'', dueDate:s, completed: false, reminder: ''});
+		this.addTask({taskId: Ext.uniqueId(), title:'Respond to emails', listId:'work-misc', description:'', dueDate:s, completed: true, reminder: '', completedDate: new Date()});
+	}
+});
+ + \ No newline at end of file