webhandle-calendar
Version:
Calendar tools for node webhandle
179 lines (150 loc) • 3.39 kB
JavaScript
const Dreck = require('dreck')
let wh = global.webhandle
const moment = require('moment')
const addCallbackToPromise = require('dreck/add-callback-to-promise')
class ProgramsDreck extends Dreck {
constructor(options) {
super(options)
options.timeZone = options.timeZone || '-06:00'
this.programTypesCollection = options.programTypesCollection
this.templatePrefix = 'webhandle-calendar/programs/'
let self = this
this.injectors.push((req, focus, next) => {
next()
}
)
}
prepLocals(req, res, focus) {
super.prepLocals(req, res, focus)
res.locals.dreck.sortUrl = req.baseUrl + "/sort"
}
sortprogramsPOST(req, res, next) {
this.fetch({}).then((focus) => {
focus = focus.sort((one, two) => {
try {
let o1 = parseInt(req.body[this.getFocusId(one)] || 0)
let o2 = parseInt(req.body[this.getFocusId(two)] || 0)
if(o1 < o2) {
return -1
}
if(o1 > o2) {
return 1
}
return 0
}
catch(e) {
return 0
}
})
for(let i = 0; i < focus.length; i++) {
focus[i].sortOrder = i
}
this.saveAll(focus).then(() => {
res.end('success')
}).catch((err) => {
this.log.error(err)
next(err)
})
})
}
saveAll(focus, callback) {
let p = new Promise((resolve, reject) => {
let count = focus.length
let lastError = null
for(let item of focus) {
this.mongoCollection.save(item, (err, result) => {
count--
if(err) {
lastError = err
this.log.error(err)
}
if(count == 0) {
if(lastError) {
reject(lastError)
}
else {
resolve()
}
}
})
}
})
return addCallbackToPromise(p, callback)
}
createTitle(focus) {
return 'Create Program'
}
editTitle(focus) {
return 'Edit Program'
}
listTitle(items) {
return 'List Programs'
}
showTitle(items) {
return 'View Program'
}
newGET(req, res, next) {
if(this.programTypesCollection) {
this.programTypesCollection.find({}).toArray((err, types) => {
res.locals.programTypes = types
return super.newGET(req, res, next)
})
}
else {
return super.newGET(req, res, next)
}
}
editGET(req, res, next) {
if(this.programTypesCollection) {
this.programTypesCollection.find({}).toArray((err, types) => {
res.locals.programTypes = types
return super.editGET(req, res, next)
})
}
else {
return super.editGET(req, res, next)
}
}
sort(req, res, focus, callback) {
let p = new Promise((resolve, reject) => {
if(Array.isArray(focus)) {
focus.sort((one, two) => {
return (one.sortOrder || 0) - (two.sortOrder || 0)
})
}
resolve(focus)
})
return addCallbackToPromise(p, callback)
}
/* Sort by name
sort(req, res, focus, callback) {
let p = new Promise((resolve, reject) => {
if(focus && Array.isArray(focus)) {
focus = focus.sort((one, two) => {
try {
if(!one.name || !two.name) {
return 0
}
if (one.name < two.name) {
return -1
}
if (one.name > two.name) {
return 1
}
}
catch(e) {}
return 0
})
}
resolve(focus)
})
return addCallbackToPromise(p, callback)
}
*/
addToRouter(router) {
super.addToRouter(router)
router.post('/sort', this.sortprogramsPOST.bind(this))
return router
}
}
module.exports = ProgramsDreck