165c02751f59877ea755a64b3d2d727d1580b39c65bf22185f5028ec98a4630be1c24e75388ad1aba1b3acf32babd70ff33e62d5bdf4b546bffb0b53f7bf39 1.6 KB

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