UNPKG

ember-litepicker

Version:

Ember addon for Litepicker date range picker library.

208 lines (204 loc) 6.92 kB
import Modifier from 'ember-modifier'; import { getOwner } from '@ember/application'; import { registerDestructor } from '@ember/destroyable'; import Litepicker from 'litepicker'; function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } class LitepickerModifier extends Modifier { get _config() { const config = getOwner(this).resolveRegistration('config:environment') || {}; return config['ember-litepicker'] || {}; } constructor(owner, args) { super(owner, args); _defineProperty(this, "picker", void 0); _defineProperty(this, "element", void 0); _defineProperty(this, "cleanup", () => { if (this.picker) { this.picker.destroy(); } }); registerDestructor(this, this.cleanup); } modify(element, positional, named) { const args = this._getDefaults(element, positional, named); if (this.picker) { this.picker.setOptions(args); } else { this.element = element; const plugins = args['plugins']; if (plugins && Array.isArray(plugins) && plugins.length > 0) { const importedPlugins = []; plugins.forEach(plugin => { if (plugin === 'keyboardnav') { importedPlugins.push(import('litepicker/dist/plugins/keyboardnav')); } if (plugin === 'mobilefriendly') { importedPlugins.push(import('litepicker/dist/plugins/mobilefriendly')); } if (plugin === 'ranges') { importedPlugins.push(import('litepicker/dist/plugins/ranges')); } if (plugin === 'multiselect') { importedPlugins.push(import('litepicker/dist/plugins/multiselect')); } }); if (importedPlugins.length > 0) { Promise.all(importedPlugins).then(() => { this._initialize(args); }); } else { this._initialize(args); } } else { this._initialize(args); } } } _getArgs(positional, named) { return Object.keys(named).length ? named : positional[0] || {}; } _getDefaults(element, positional, named) { return Object.assign({ element }, this._config, this._getArgs(positional, named)); } _setOptions(options) { if (options.setup) { delete options.setup; } options.setup = picker => { picker.on('before:click', target => { if (options.onBeforeClick && typeof options.onBeforeClick === 'function') { options.onBeforeClick(target); } }); picker.on('before:render', ui => { if (options.onBeforeRender && typeof options.onBeforeRender === 'function') { options.onBeforeRender(ui); } }); picker.on('before:show', el => { if (options.onBeforeShow && typeof options.onBeforeShow === 'function') { options.onBeforeShow(el); } }); picker.on('button:apply', (date1, date2) => { if (options.onButtonApply && typeof options.onButtonApply === 'function') { options.onButtonApply(date1, date2); } }); picker.on('button:cancel', () => { if (options.onButtonCancel && typeof options.onButtonCancel === 'function') { options.onButtonCancel(); } }); picker.on('change:month', (date, calendarIdx) => { if (options.onChangeMonth && typeof options.onChangeMonth === 'function') { options.onChangeMonth(date, calendarIdx); } }); picker.on('change:year', (date, calendarIdx) => { if (options.onChangeYear && typeof options.onChangeYear === 'function') { options.onChangeYear(date, calendarIdx); } }); picker.on('clear:selection', () => { if (options.onClearSelection && typeof options.onClearSelection === 'function') { options.onClearSelection(); } }); picker.on('preselect', (date1, date2) => { if (options.onPreselect && typeof options.onPreselect === 'function') { options.onPreselect(date1, date2); } }); picker.on('selected', (date1, date2) => { if (options.onSelected && typeof options.onSelected === 'function') { options.onSelected(date1, date2); } }); picker.on('render', ui => { if (options.onRender && typeof options.onRender === 'function') { options.onRender(ui); } }); picker.on('render:day', (day, date) => { if (options.onRenderDay && typeof options.onRenderDay === 'function') { options.onRenderDay(day, date); } }); picker.on('render:footer', (day, date) => { if (options.onRenderFooter && typeof options.onRenderFooter === 'function') { options.onRenderFooter(day, date); } }); picker.on('render:month', (month, date) => { if (options.onRenderMonth && typeof options.onRenderMonth === 'function') { options.onRenderMonth(month, date); } }); picker.on('show', el => { if (options.onShow && typeof options.onShow === 'function') { options.onShow(el); } }); picker.on('hide', () => { if (options.onHide && typeof options.onHide === 'function') { options.onHide(); } }); picker.on('tooltip', (tooltip, day) => { if (options.onTooltip && typeof options.onTooltip === 'function') { options.onTooltip(tooltip, day); } }); picker.on('error:range', () => { if (options.onErrorRange && typeof options.onErrorRange === 'function') { options.onErrorRange(); } }); picker.on('destroy', () => { if (options.onDestroy && typeof options.onDestroy === 'function') { options.onDestroy(); } }); }; return options; } _initialize(args) { const options = this._setOptions(args); this.picker = new Litepicker(options); if (options.registerAPI && typeof options.registerAPI === 'function') { options.registerAPI(this.picker); } } } export { LitepickerModifier as default }; //# sourceMappingURL=litepicker.js.map