super-productivity/app-src/scripts/input-duration/input-duration-d.js

57 lines
1.5 KiB
JavaScript

/**
* @ngdoc directive
* @name superProductivity.directive:inputDuration
* @description
* # inputDuration
*/
(function () {
'use strict';
angular
.module('superProductivity')
.directive('inputDuration', inputDuration);
/* @ngInject */
function inputDuration(ParseDuration) {
return {
bindToController: true,
controllerAs: 'vm',
link: linkFn,
restrict: 'A',
require: 'ngModel'
};
function linkFn(scope, element, attrs, ngModelCtrl) {
// format to duration model
ngModelCtrl.$parsers.push((strValue) => {
let momentVal = ParseDuration.fromString(strValue);
let isValid = !!momentVal;
ngModelCtrl.$setValidity('inputDuration', !!momentVal);
// should be valid for optional
if (!isValid && (attrs.inputDuration === 'optional' && strValue.trim().length <= 1)) {
isValid = true;
// should be undefined nevertheless
momentVal = undefined;
}
if (momentVal && attrs.minDuration) {
const minDuration = ParseDuration.fromString(attrs.minDuration);
const isValidMinDuration = momentVal.asMilliseconds() >= minDuration.asMilliseconds();
ngModelCtrl.$setValidity('inputDurationMin', isValidMinDuration);
isValid = isValidMinDuration;
}
return isValid ? momentVal : undefined;
});
// format to display
ngModelCtrl.$formatters.push((value) => {
return ParseDuration.toString(value);
});
}
}
})();