salix/front/core/components/input-time/index.js

81 lines
1.8 KiB
JavaScript
Raw Normal View History

2018-09-19 13:05:07 +00:00
import ngModule from '../../module';
2019-04-02 09:02:59 +00:00
import Input from '../../lib/input';
2018-09-19 13:05:07 +00:00
import './style.scss';
2019-04-02 09:02:59 +00:00
export default class InputTime extends Input {
2019-09-30 09:30:54 +00:00
constructor($element, $scope, $filter) {
2019-04-11 05:29:41 +00:00
super($element, $scope);
2019-09-30 09:30:54 +00:00
this.$filter = $filter;
2019-04-11 05:29:41 +00:00
this.registerEvents();
}
registerEvents() {
this.input.addEventListener('change', event => {
2019-09-30 09:30:54 +00:00
this.onTimeChange();
2019-04-11 05:29:41 +00:00
this.emit('change', {event});
});
this.input.addEventListener('focus', event => {
this.emit('focus', {event});
});
}
/**
* Gets current value
*/
get value() {
return this._value;
}
2019-04-11 05:29:41 +00:00
/**
* Sets input value
*
* @param {Number} value - Value
*/
2018-09-19 13:05:07 +00:00
set value(value) {
2019-09-30 09:30:54 +00:00
this.updateValue(value);
this.input.value = this.$filter('dateTime')(value, 'HH:mm');
2019-09-30 09:30:54 +00:00
}
2019-04-11 05:29:41 +00:00
2019-09-30 09:30:54 +00:00
updateValue(value) {
2019-04-11 05:29:41 +00:00
this._value = value;
2019-09-30 09:30:54 +00:00
this.element.classList.toggle('not-empty', value != null);
2019-09-09 08:57:10 +00:00
this.validateValue();
2019-04-11 05:29:41 +00:00
}
2018-09-24 08:43:54 +00:00
2019-09-30 09:30:54 +00:00
onTimeChange() {
let date = null;
let value = this.input.value;
2019-04-11 05:29:41 +00:00
2019-09-30 09:30:54 +00:00
if (value) {
let split = value.split(':').map(i => parseInt(i) || null);
date = new Date(this.value || null);
date.setHours(split[0], split[1], 0, 0);
2019-04-11 05:29:41 +00:00
}
2019-09-30 09:30:54 +00:00
this.updateValue(date);
2019-09-09 08:57:10 +00:00
}
2018-09-19 13:05:07 +00:00
}
2019-09-30 09:30:54 +00:00
InputTime.$inject = ['$element', '$scope', '$filter'];
2018-09-19 13:05:07 +00:00
ngModule.component('vnInputTime', {
template: require('./index.html'),
controller: InputTime,
transclude: {
leftIcons: '?tLeftIcons',
rightIcons: '?tRightIcons'
},
bindings: {
label: '@?',
disabled: '<?',
readonly: '<?',
rule: '@?',
value: '=model',
vnTabIndex: '@?',
onChange: '&',
onClear: '&'
}
});