dateValidator.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. 'use strict';
  2. exports.__esModule = true;
  3. exports.default = dateValidator;
  4. exports.correctFormat = correctFormat;
  5. var _moment = require('moment');
  6. var _moment2 = _interopRequireDefault(_moment);
  7. var _date = require('../helpers/date');
  8. var _editors = require('../editors');
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. /**
  11. * Date cell validator
  12. *
  13. * @private
  14. * @validator DateValidator
  15. * @dependencies moment
  16. * @param {*} value - Value of edited cell
  17. * @param {Function} callback - Callback called with validation result
  18. */
  19. function dateValidator(value, callback) {
  20. var valid = true;
  21. var dateEditor = (0, _editors.getEditorInstance)('date', this.instance);
  22. if (value == null) {
  23. value = '';
  24. }
  25. var isValidDate = (0, _moment2.default)(new Date(value)).isValid() || (0, _moment2.default)(value, dateEditor.defaultDateFormat).isValid();
  26. // is it in the specified format
  27. var isValidFormat = (0, _moment2.default)(value, this.dateFormat || dateEditor.defaultDateFormat, true).isValid();
  28. if (this.allowEmpty && value === '') {
  29. isValidDate = true;
  30. isValidFormat = true;
  31. }
  32. if (!isValidDate) {
  33. valid = false;
  34. }
  35. if (!isValidDate && isValidFormat) {
  36. valid = true;
  37. }
  38. if (isValidDate && !isValidFormat) {
  39. if (this.correctFormat === true) {
  40. // if format correction is enabled
  41. var correctedValue = correctFormat(value, this.dateFormat);
  42. var row = this.instance.runHooks('unmodifyRow', this.row);
  43. var column = this.instance.runHooks('unmodifyCol', this.col);
  44. this.instance.setDataAtCell(row, column, correctedValue, 'dateValidator');
  45. valid = true;
  46. } else {
  47. valid = false;
  48. }
  49. }
  50. callback(valid);
  51. };
  52. /**
  53. * Format the given string using moment.js' format feature
  54. *
  55. * @param {String} value
  56. * @param {String} dateFormat
  57. * @returns {String}
  58. */
  59. function correctFormat(value, dateFormat) {
  60. var dateFromDate = (0, _moment2.default)((0, _date.getNormalizedDate)(value));
  61. var dateFromMoment = (0, _moment2.default)(value, dateFormat);
  62. var isAlphanumeric = value.search(/[A-z]/g) > -1;
  63. var date = void 0;
  64. if (dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x') || !dateFromMoment.isValid() || isAlphanumeric) {
  65. date = dateFromDate;
  66. } else {
  67. date = dateFromMoment;
  68. }
  69. return date.format(dateFormat);
  70. };