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