Commit 7598c58f53b9142a2af7e32009b5d7887cc3e62d
1 parent
77034810
Exists in
master
add eventTypeID / UI Filter
Showing
5 changed files
with
214 additions
and
29 deletions
Show diff stats
app/controllers/home.controller.js
| ... | ... | @@ -37,7 +37,7 @@ function ggToKendo(data) { |
| 37 | 37 | for (var n = 0; n < data.items.length; n++) { |
| 38 | 38 | dataToArr.push({ |
| 39 | 39 | "TaskID": data.items[n].id, |
| 40 | - "OwnerID": 2, | |
| 40 | + "EventTypeID": checkObjEmpty(data.items[n].extendedProperties, 'private'), | |
| 41 | 41 | "Title": data.items[n].summary, |
| 42 | 42 | "Description": data.items[n].description, |
| 43 | 43 | "StartTimezone": "Asia/Bangkok", |
| ... | ... | @@ -125,14 +125,19 @@ function eventCreate(req, res) { |
| 125 | 125 | payload = payload.models[0] |
| 126 | 126 | } |
| 127 | 127 | |
| 128 | - let summary = payload.summary | |
| 129 | - let description = payload.description | |
| 130 | - let email = payload.email | |
| 131 | - let startDate = payload.startDate | |
| 132 | - let startTimezone = payload.startTimezone | |
| 133 | - let endDate = payload.endDate | |
| 134 | - let endTimezone = payload.endTimezone | |
| 135 | - let extendedProperties = payload.extendedProperties | |
| 128 | + // let summary = payload.summary | |
| 129 | + // let description = payload.description | |
| 130 | + // let email = payload.email | |
| 131 | + // let startDate = payload.startDate | |
| 132 | + // let startTimezone = payload.startTimezone | |
| 133 | + // let endDate = payload.endDate | |
| 134 | + // let endTimezone = payload.endTimezone | |
| 135 | + // // let extendedProperties = payload.extendedProperties | |
| 136 | + // payload.extendedProperties = { | |
| 137 | + // "private": { | |
| 138 | + // "eventTypeID": payload.EventTypeID | |
| 139 | + // } | |
| 140 | + // } | |
| 136 | 141 | |
| 137 | 142 | lib.authorize((err, auth) => { |
| 138 | 143 | let options = lib.eventBuilder(payload) |
| ... | ... | @@ -225,6 +230,16 @@ function eventUpdate(req, res) { |
| 225 | 230 | }) |
| 226 | 231 | } |
| 227 | 232 | |
| 233 | +function checkObjEmpty(obj, parm) { | |
| 234 | + if (obj) { | |
| 235 | + if (Object.getOwnPropertyNames(obj)) { | |
| 236 | + return obj[parm].eventTypeID | |
| 237 | + } | |
| 238 | + } else { | |
| 239 | + return | |
| 240 | + } | |
| 241 | + | |
| 242 | +} | |
| 228 | 243 | |
| 229 | 244 | module.exports.index = index |
| 230 | 245 | module.exports.events = events | ... | ... |
app/lib/index.js
| ... | ... | @@ -156,7 +156,8 @@ module.exports = { |
| 156 | 156 | calendar.events.update({ |
| 157 | 157 | auth: options.auth, |
| 158 | 158 | calendarId: CALENDAR_ID || 'primary', |
| 159 | - eventId: options.eventId | |
| 159 | + eventId: options.eventId, | |
| 160 | + resource: options | |
| 160 | 161 | }, (err, response) => { |
| 161 | 162 | if (err) return callback(err); |
| 162 | 163 | |
| ... | ... | @@ -192,8 +193,12 @@ module.exports = { |
| 192 | 193 | ] |
| 193 | 194 | } |
| 194 | 195 | } |
| 195 | - if (payload.extendedProperties) { | |
| 196 | - buildPayload.extendedProperties = payload.extendedProperties | |
| 196 | + if (payload.EventTypeID) { | |
| 197 | + buildPayload.extendedProperties = { | |
| 198 | + "private": { | |
| 199 | + "eventTypeID": payload.EventTypeID | |
| 200 | + } | |
| 201 | + } | |
| 197 | 202 | } |
| 198 | 203 | } catch (error) { |
| 199 | 204 | console.error(error.message) |
| ... | ... | @@ -243,6 +248,13 @@ module.exports = { |
| 243 | 248 | ] |
| 244 | 249 | } |
| 245 | 250 | } |
| 251 | + if (payload.EventTypeID) { | |
| 252 | + buildPayload.extendedProperties = { | |
| 253 | + "private": { | |
| 254 | + "eventTypeID": payload.EventTypeID | |
| 255 | + } | |
| 256 | + } | |
| 257 | + } | |
| 246 | 258 | if (payload.extendedProperties) { |
| 247 | 259 | buildPayload.extendedProperties = payload.extendedProperties |
| 248 | 260 | } | ... | ... |
app/routes/home.routes.js
| ... | ... | @@ -3,7 +3,7 @@ var express = require('express') |
| 3 | 3 | var router = express.Router() |
| 4 | 4 | var home = require('../controllers/home.controller') |
| 5 | 5 | |
| 6 | -router.get('/', home.index) | |
| 6 | +router.get('/', home.home) | |
| 7 | 7 | router.get('/home', home.home) |
| 8 | 8 | |
| 9 | 9 | router.get('/events', home.events) | ... | ... |
public/js/controllers/kendo.js
| 1 | 1 | angular.module("KendoDemos", ["kendo.directives"]) |
| 2 | 2 | .controller("MyCtrl", function ($scope, $http) { |
| 3 | + $scope.monthPickerConfig = { | |
| 4 | + start: "year", | |
| 5 | + depth: "year", | |
| 6 | + format: "MMMM yyyy" | |
| 7 | + }; | |
| 3 | 8 | $scope.update = function () { |
| 4 | 9 | console.log("update") |
| 5 | 10 | } |
| ... | ... | @@ -19,7 +24,7 @@ angular.module("KendoDemos", ["kendo.directives"]) |
| 19 | 24 | } |
| 20 | 25 | } else { |
| 21 | 26 | console.info(response) |
| 22 | - schedulerStart() | |
| 27 | + schedulerOptions2() | |
| 23 | 28 | } |
| 24 | 29 | |
| 25 | 30 | }, function errorCallback(response) { |
| ... | ... | @@ -27,17 +32,39 @@ angular.module("KendoDemos", ["kendo.directives"]) |
| 27 | 32 | }); |
| 28 | 33 | } |
| 29 | 34 | getAuthURL() |
| 35 | + $scope.filter = {} | |
| 36 | + $scope.data = {} | |
| 37 | + $scope.test = function () { | |
| 38 | + console.log($scope.operation) | |
| 39 | + } | |
| 30 | 40 | |
| 31 | 41 | function schedulerStart() { |
| 32 | 42 | $scope.schedulerOptions = { |
| 33 | 43 | date: new Date("2016/10/12"), |
| 34 | - startTime: new Date("2016/10/12 07:00 AM"), | |
| 44 | + startTime: new Date("2016/10/12 07:00"), | |
| 45 | + majorTimeHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'HH:mm')#</strong><sup> เธ.</sup>"), | |
| 46 | + minorTickCount: 1, | |
| 47 | + toolbar: ["pdf"], | |
| 48 | + messages: { | |
| 49 | + cancel: "Cancel", | |
| 50 | + save: "Save", | |
| 51 | + deleteWindowTitle: "Remove event", | |
| 52 | + pdf: "PDF Export", | |
| 53 | + editable: { | |
| 54 | + confirmation: "Are you sure you want to delete this event?" | |
| 55 | + }, | |
| 56 | + editor: { | |
| 57 | + description: "Description" | |
| 58 | + } | |
| 59 | + }, | |
| 35 | 60 | height: 600, |
| 36 | 61 | views: [ |
| 37 | 62 | "day", |
| 38 | 63 | { type: "workWeek", selected: true }, |
| 39 | 64 | "week", |
| 40 | 65 | "month", |
| 66 | + "agenda", | |
| 67 | + "timeline" | |
| 41 | 68 | ], |
| 42 | 69 | timezone: "Asia/Bangkok", |
| 43 | 70 | dataSource: { |
| ... | ... | @@ -83,32 +110,144 @@ angular.module("KendoDemos", ["kendo.directives"]) |
| 83 | 110 | recurrenceId: { from: "RecurrenceID" }, |
| 84 | 111 | recurrenceRule: { from: "RecurrenceRule" }, |
| 85 | 112 | recurrenceException: { from: "RecurrenceException" }, |
| 86 | - ownerId: { from: "OwnerID", defaultValue: 1 }, | |
| 113 | + eventTypeID: { from: "EventTypeID" }, | |
| 87 | 114 | isAllDay: { type: "boolean", from: "IsAllDay" } |
| 88 | 115 | } |
| 89 | 116 | } |
| 90 | 117 | }, |
| 91 | 118 | filter: { |
| 92 | - logic: "or", | |
| 93 | - filters: [ | |
| 94 | - { field: "ownerId", operator: "eq", value: 1 }, | |
| 95 | - { field: "ownerId", operator: "eq", value: 2 } | |
| 96 | - ] | |
| 119 | + field: "eventTypeID", operator: "eq", value: parseInt($scope.data.value) | |
| 97 | 120 | } |
| 98 | 121 | }, |
| 99 | 122 | editable: true, |
| 100 | 123 | resources: [ |
| 101 | 124 | { |
| 102 | - field: "ownerId", | |
| 103 | - title: "Owner", | |
| 125 | + field: "eventTypeID", | |
| 126 | + title: "EventType", | |
| 104 | 127 | dataSource: [ |
| 105 | - { text: "Alex", value: 1, color: "#f8a398" }, | |
| 106 | - { text: "Bob", value: 2, color: "#51a0ed" }, | |
| 107 | - { text: "Charlie", value: 3, color: "#56ca85" } | |
| 128 | + { text: "Type1", value: 1, color: "#f8a398" }, | |
| 129 | + { text: "Type2", value: 2, color: "#51a0ed" }, | |
| 130 | + { text: "Type3", value: 3, color: "#56ca85" } | |
| 108 | 131 | ] |
| 109 | 132 | } |
| 110 | 133 | ] |
| 111 | 134 | }; |
| 112 | 135 | } |
| 113 | 136 | |
| 137 | + | |
| 138 | + function schedulerOptions2() { | |
| 139 | + $(function () { | |
| 140 | + $("#scheduler").kendoScheduler({ | |
| 141 | + date: new Date("2016/10/12"), | |
| 142 | + startTime: new Date("2016/10/12 07:00"), | |
| 143 | + majorTimeHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'HH:mm')#</strong><sup> เธ.</sup>"), | |
| 144 | + minorTickCount: 1, | |
| 145 | + toolbar: ["pdf"], | |
| 146 | + messages: { | |
| 147 | + cancel: "Cancel", | |
| 148 | + save: "Save", | |
| 149 | + deleteWindowTitle: "Remove event", | |
| 150 | + pdf: "PDF Export", | |
| 151 | + editable: { | |
| 152 | + confirmation: "Are you sure you want to delete this event?" | |
| 153 | + }, | |
| 154 | + editor: { | |
| 155 | + description: "Description" | |
| 156 | + } | |
| 157 | + }, | |
| 158 | + height: 600, | |
| 159 | + views: [ | |
| 160 | + "day", | |
| 161 | + { type: "workWeek", selected: true }, | |
| 162 | + "week", | |
| 163 | + "month", | |
| 164 | + "agenda", | |
| 165 | + "timeline" | |
| 166 | + ], | |
| 167 | + timezone: "Asia/Bangkok", | |
| 168 | + dataSource: { | |
| 169 | + batch: true, | |
| 170 | + transport: { | |
| 171 | + read: { | |
| 172 | + url: "//localhost:3001/events", | |
| 173 | + dataType: "jsonp", | |
| 174 | + type: "GET" | |
| 175 | + }, | |
| 176 | + update: { | |
| 177 | + url: "//localhost:3001/events", | |
| 178 | + dataType: "jsonp", | |
| 179 | + type: "PUT" | |
| 180 | + }, | |
| 181 | + create: { | |
| 182 | + url: "//localhost:3001/events", | |
| 183 | + dataType: "jsonp", | |
| 184 | + type: "POST" | |
| 185 | + }, | |
| 186 | + destroy: { | |
| 187 | + url: "//localhost:3001/events", | |
| 188 | + dataType: "jsonp", | |
| 189 | + type: "DELETE" | |
| 190 | + }, | |
| 191 | + parameterMap: function (options, operation) { | |
| 192 | + if (operation !== "read" && options.models) { | |
| 193 | + return { models: kendo.stringify(options.models) }; | |
| 194 | + } | |
| 195 | + } | |
| 196 | + }, | |
| 197 | + schema: { | |
| 198 | + model: { | |
| 199 | + id: "taskId", | |
| 200 | + fields: { | |
| 201 | + taskId: { from: "TaskID" }, | |
| 202 | + title: { from: "Title", defaultValue: "No title", validation: { required: true } }, | |
| 203 | + start: { type: "datetime", from: "Start" }, | |
| 204 | + end: { type: "datetime", from: "End" }, | |
| 205 | + startTimezone: { from: "StartTimezone", defaultValue: "Asia/Bangkok" }, | |
| 206 | + endTimezone: { from: "EndTimezone", defaultValue: "Asia/Bangkok" }, | |
| 207 | + description: { from: "Description" }, | |
| 208 | + recurrenceId: { from: "RecurrenceID" }, | |
| 209 | + recurrenceRule: { from: "RecurrenceRule" }, | |
| 210 | + recurrenceException: { from: "RecurrenceException" }, | |
| 211 | + eventTypeID: { from: "EventTypeID" }, | |
| 212 | + isAllDay: { type: "boolean", from: "IsAllDay" } | |
| 213 | + } | |
| 214 | + } | |
| 215 | + }, | |
| 216 | + filter: { | |
| 217 | + logic: "or", | |
| 218 | + filters: [ | |
| 219 | + { field: "eventTypeID", operator: "eq", value: 1 }, | |
| 220 | + { field: "eventTypeID", operator: "eq", value: 2 } | |
| 221 | + ] | |
| 222 | + } | |
| 223 | + }, | |
| 224 | + editable: true, | |
| 225 | + resources: [ | |
| 226 | + { | |
| 227 | + field: "eventTypeID", | |
| 228 | + title: "EventType", | |
| 229 | + dataSource: [ | |
| 230 | + { text: "Type1", value: 1, color: "#f8a398" }, | |
| 231 | + { text: "Type2", value: 2, color: "#51a0ed" }, | |
| 232 | + { text: "Type3", value: 3, color: "#56ca85" } | |
| 233 | + ] | |
| 234 | + } | |
| 235 | + ] | |
| 236 | + }); | |
| 237 | + | |
| 238 | + $("#people :checkbox").change(function (e) { | |
| 239 | + var checked = $.map($("#people :checked"), function (checkbox) { | |
| 240 | + return parseInt($(checkbox).val()); | |
| 241 | + }); | |
| 242 | + | |
| 243 | + var scheduler = $("#scheduler").data("kendoScheduler"); | |
| 244 | + | |
| 245 | + scheduler.dataSource.filter({ | |
| 246 | + operator: function (task) { | |
| 247 | + return $.inArray(task.eventTypeID, checked) >= 0; | |
| 248 | + } | |
| 249 | + }); | |
| 250 | + }); | |
| 251 | + }); | |
| 252 | + } | |
| 114 | 253 | }) | ... | ... |
public/views/index.html
| ... | ... | @@ -7,9 +7,9 @@ |
| 7 | 7 | <link href="../assets/content/shared/styles/examples-offline.css" rel="stylesheet"> |
| 8 | 8 | <link href="../assets/styles/kendo.common.min.css" rel="stylesheet"> |
| 9 | 9 | <link href="../assets/styles/kendo.rtl.min.css" rel="stylesheet"> |
| 10 | - <link href="../assets/styles/kendo.bootstrap.min.css" rel="stylesheet"> | |
| 10 | + <link href="../assets/styles/kendo.metro.min.css" rel="stylesheet"> | |
| 11 | 11 | <link href="../assets/styles/kendo.dataviz.min.css" rel="stylesheet"> |
| 12 | - <link href="../assets/styles/kendo.dataviz.flat.min.css" rel="stylesheet"> | |
| 12 | + <link href="../assets/styles/kendo.dataviz.metro.min.css" rel="stylesheet"> | |
| 13 | 13 | <script src="../assets/js/jquery.min.js"></script> |
| 14 | 14 | <script src="../assets/js/angular.min.js"></script> |
| 15 | 15 | <script src="../assets/js/jszip.min.js"></script> |
| ... | ... | @@ -29,10 +29,29 @@ |
| 29 | 29 | |
| 30 | 30 | <div id="example" ng-app="KendoDemos"> |
| 31 | 31 | <div ng-controller="MyCtrl"> |
| 32 | + <div id="team-schedule"> | |
| 33 | + <div id="people"> | |
| 34 | + <input checked type="checkbox" id="alex" value="1"> | |
| 35 | + <input checked type="checkbox" id="bob" value="2"> | |
| 36 | + <input type="checkbox" id="charlie" value="3"> | |
| 37 | + </div> | |
| 38 | + </div> | |
| 39 | + <div id="scheduler"></div> | |
| 40 | + | |
| 41 | + <!--<select name="singleSelect" ng-model="data.value"> | |
| 42 | + <option value="1">Option 1</option> | |
| 43 | + <option value="2">Option 2</option> | |
| 44 | + </select> | |
| 45 | + <button type="button" ng-click="test()">Test</button> | |
| 46 | + <br> | |
| 47 | + <pre>{{data.value}}</pre> | |
| 48 | + <pre>{{schedulerOptions.dataSource.filter}}</pre> | |
| 49 | + <br /> | |
| 32 | 50 | <div kendo-scheduler k-options="schedulerOptions"> |
| 33 | 51 | <span k-event-template class="custom-event">{{dataItem.title}}</span> |
| 34 | 52 | <div k-all-day-event-template class="custom-all-day-event">{{dataItem.title}}</div> |
| 35 | - </div> | |
| 53 | + </div>--> | |
| 54 | + | |
| 36 | 55 | </div> |
| 37 | 56 | |
| 38 | 57 | <style> | ... | ... |