UNPKG

webhandle-calendar

Version:

Calendar tools for node webhandle

179 lines (150 loc) 3.39 kB
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