commit extjs-2.2.1
[extjs.git] / air / samples / tasks / js / TaskStore.js
1 /*\r
2  * Ext JS Library 0.30\r
3  * Copyright(c) 2006-2009, Ext JS, LLC.\r
4  * licensing@extjs.com\r
5  * \r
6  * http://extjs.com/license\r
7  */\r
8 \r
9 \r
10 tx.data.TaskStore = Ext.extend(Ext.data.GroupingStore, {\r
11         constructor: function(){\r
12                 tx.data.TaskStore.superclass.constructor.call(this, {\r
13                 sortInfo:{field: 'dueDate', direction: "ASC"},\r
14                 groupField:'dueDate',\r
15                 taskFilter: 'all',\r
16                 reader: new Ext.data.JsonReader({\r
17                     id: 'taskId',\r
18                                 fields: tx.data.Task\r
19                 })\r
20             });\r
21                 this.conn = tx.data.conn;\r
22             this.proxy = new Ext.sql.Proxy(tx.data.conn, 'task', 'taskId', this);\r
23         },\r
24         \r
25         applyFilter : function(filter){\r
26         if(filter !== undefined){\r
27                 this.taskFilter = filter;\r
28         }\r
29         var value = this.taskFilter;\r
30         if(value == 'all'){\r
31             return this.clearFilter();\r
32         }\r
33         return this.filterBy(function(item){\r
34             return item.data.completed === value;\r
35         });\r
36     },\r
37 \r
38     addTask : function(data){\r
39         this.suspendEvents();\r
40         this.clearFilter();\r
41         this.resumeEvents();\r
42         this.loadData([data], true);\r
43         this.suspendEvents();\r
44         this.applyFilter();\r
45         this.applyGrouping(true);\r
46         this.resumeEvents();\r
47         this.fireEvent('datachanged', this);\r
48     },\r
49 \r
50         loadList: function(listId){\r
51                 var multi = Ext.isArray(listId);\r
52                 this.activeList = multi ? listId[0] : listId;\r
53                 this.suspendEvents();\r
54         if(multi){\r
55                         var ps = [];\r
56                         for(var i = 0, len = listId.length; i < len; i++){\r
57                                 ps.push('?');\r
58                         }\r
59                         this.load({\r
60                                 params: {\r
61                                         where: 'where listId in (' + ps.join(',') + ')',\r
62                                         args: listId\r
63                                 }\r
64                         });\r
65                 }else{\r
66                         this.load({params: {\r
67                                 where: 'where listId = ?',\r
68                                 args: [listId]\r
69                         }});\r
70                 }               \r
71         this.applyFilter();\r
72         this.applyGrouping(true);\r
73         this.resumeEvents();\r
74         this.fireEvent('datachanged', this);\r
75         },\r
76         \r
77         removeList: function(listId){\r
78                 this.conn.execBy('delete from task where listId = ?', [listId]);\r
79                 this.reload();\r
80         },\r
81         \r
82     prepareTable : function(){\r
83         try{\r
84         this.createTable({\r
85             name: 'task',\r
86             key: 'taskId',\r
87             fields: tx.data.Task.prototype.fields\r
88         });\r
89         }catch(e){console.log(e);}\r
90     },\r
91                 \r
92         createTask : function(title, listText, dueDate, description, completed){\r
93                 if(!Ext.isEmpty(title)){\r
94                         var listId = '';\r
95                         if(!Ext.isEmpty(listText)){\r
96                                 listId = tx.data.lists.addList(Ext.util.Format.htmlEncode(listText)).id;\r
97                         }else{\r
98                                 listId = tx.data.lists.newList(false).id;\r
99                         }\r
100             this.addTask({\r
101                 taskId: Ext.uniqueId(),\r
102                 title: Ext.util.Format.htmlEncode(title),\r
103                 dueDate: dueDate||'',\r
104                 description: description||'',\r
105                 listId: listId,\r
106                 completed: completed || false\r
107             });\r
108         }\r
109         },\r
110         \r
111         afterEdit : function(r){\r
112         if(r.isModified(this.getGroupState())){\r
113                         this.applyGrouping();\r
114                 }\r
115                 //workaround WebKit cross-frame date issue\r
116                 fixDateMember(r.data, 'completedDate');\r
117                 fixDateMember(r.data, 'reminder');\r
118                 fixDateMember(r.data, 'dueDate');\r
119                 if(r.isModified('completed')){\r
120                         r.editing = true;\r
121                         r.set('completedDate', r.data.completed ? new Date() : '');\r
122                         r.editing = false;\r
123                 }\r
124                 tx.data.TaskStore.superclass.afterEdit.apply(this, arguments);\r
125     },\r
126         \r
127         init : function(){\r
128                 tx.data.lists.load();\r
129                 this.load({\r
130                         callback: function(){\r
131                                 // first time?\r
132                                 if(this.getCount() < 1){\r
133                                         Ext.Msg.confirm('Create Tasks?', 'Your database is currently empty. Would you like to insert some demo data?', \r
134                                                 function(btn){\r
135                                                         if(btn == 'yes'){\r
136                                                                 tx.data.lists.loadDemoLists();\r
137                                                                 this.loadDemoTasks();   \r
138                                                         }\r
139                                                 }, this);\r
140                                 }\r
141                         },\r
142                         scope: this\r
143                 });\r
144         },\r
145         \r
146         lookup : function(id){\r
147                 var task;\r
148                 if(task = this.getById(id)){\r
149                         return task;\r
150                 }\r
151                 var data = this.proxy.table.lookup(id);\r
152                 if (data) {\r
153                         var result = this.reader.readRecords([data]);\r
154                         return result.records[0];\r
155                 }\r
156                 return null; \r
157         },\r
158         \r
159         /* This is used to laod some demo tasks if the task database is empty */\r
160         loadDemoTasks: function(){\r
161                 var s = new Date();\r
162                 // hardcoded demo tasks\r
163                 this.addTask({taskId: Ext.uniqueId(), title:'Update Ext 2.0 documentation', listId:'ext2', description:'', dueDate: s.add('d', 21), completed: false, reminder: ''});\r
164                 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)});\r
165                 this.addTask({taskId: Ext.uniqueId(), title:'Take wife to see movie', listId:'family', description:'', dueDate:s.add('d', 2), completed: false, reminder: ''});\r
166                 this.addTask({taskId: Ext.uniqueId(), title:'Finish Simple Tasks v2 sample app', listId:'ext2', description:'', dueDate:s.add('d', 2), completed: false, reminder: ''});\r
167                 this.addTask({taskId: Ext.uniqueId(), title:'Do something other than work', listId:'fun', description:'', dueDate:s.add('d', -1), completed: false, reminder: ''});\r
168                 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()});\r
169                 this.addTask({taskId: Ext.uniqueId(), title:'Reboot my computer', listId:'personal-misc', description:'', dueDate:s, completed: false, reminder: ''});\r
170                 this.addTask({taskId: Ext.uniqueId(), title:'Respond to emails', listId:'work-misc', description:'', dueDate:s, completed: true, reminder: '', completedDate: new Date()});\r
171         }\r
172 });