timeValidator.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import moment from 'moment';
  2. // Formats which are correctly parsed to time (supported by momentjs)
  3. var STRICT_FORMATS = ['YYYY-MM-DDTHH:mm:ss.SSSZ', 'X', // Unix timestamp
  4. 'x' // Unix ms timestamp
  5. ];
  6. /**
  7. * Time cell validator
  8. *
  9. * @private
  10. * @validator TimeValidator
  11. * @dependencies moment
  12. * @param {*} value - Value of edited cell
  13. * @param {Function} callback - Callback called with validation result
  14. */
  15. export default function timeValidator(value, callback) {
  16. var valid = true;
  17. var timeFormat = this.timeFormat || 'h:mm:ss a';
  18. if (value === null) {
  19. value = '';
  20. }
  21. value = /^\d{3,}$/.test(value) ? parseInt(value, 10) : value;
  22. var twoDigitValue = /^\d{1,2}$/.test(value);
  23. if (twoDigitValue) {
  24. value += ':00';
  25. }
  26. var date = moment(value, STRICT_FORMATS, true).isValid() ? moment(value) : moment(value, timeFormat);
  27. var isValidTime = date.isValid();
  28. // is it in the specified format
  29. var isValidFormat = moment(value, timeFormat, true).isValid() && !twoDigitValue;
  30. if (this.allowEmpty && value === '') {
  31. isValidTime = true;
  32. isValidFormat = true;
  33. }
  34. if (!isValidTime) {
  35. valid = false;
  36. }
  37. if (!isValidTime && isValidFormat) {
  38. valid = true;
  39. }
  40. if (isValidTime && !isValidFormat) {
  41. if (this.correctFormat === true) {
  42. // if format correction is enabled
  43. var correctedValue = date.format(timeFormat);
  44. var row = this.instance.runHooks('unmodifyRow', this.row);
  45. var column = this.instance.runHooks('unmodifyCol', this.col);
  46. this.instance.setDataAtCell(row, column, correctedValue, 'timeValidator');
  47. valid = true;
  48. } else {
  49. valid = false;
  50. }
  51. }
  52. callback(valid);
  53. };