utils.mjs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import dayjs from 'dayjs';
  2. import { isArray, isString } from '@vue/shared';
  3. import { rangeArr } from '../../time-picker/src/utils.mjs';
  4. const isValidRange = (range) => {
  5. if (!isArray(range))
  6. return false;
  7. const [left, right] = range;
  8. return dayjs.isDayjs(left) && dayjs.isDayjs(right) && dayjs(left).isValid() && dayjs(right).isValid() && left.isSameOrBefore(right);
  9. };
  10. const getDefaultValue = (defaultValue, { lang, unit, unlinkPanels }) => {
  11. let start;
  12. if (isArray(defaultValue)) {
  13. let [left, right] = defaultValue.map((d) => dayjs(d).locale(lang));
  14. if (!unlinkPanels) {
  15. right = left.add(1, unit);
  16. }
  17. return [left, right];
  18. } else if (defaultValue) {
  19. start = dayjs(defaultValue);
  20. } else {
  21. start = dayjs();
  22. }
  23. start = start.locale(lang);
  24. return [start, start.add(1, unit)];
  25. };
  26. const buildPickerTable = (dimension, rows, {
  27. columnIndexOffset,
  28. startDate,
  29. nextEndDate,
  30. now,
  31. unit,
  32. relativeDateGetter,
  33. setCellMetadata,
  34. setRowMetadata
  35. }) => {
  36. for (let rowIndex = 0; rowIndex < dimension.row; rowIndex++) {
  37. const row = rows[rowIndex];
  38. for (let columnIndex = 0; columnIndex < dimension.column; columnIndex++) {
  39. let cell = row[columnIndex + columnIndexOffset];
  40. if (!cell) {
  41. cell = {
  42. row: rowIndex,
  43. column: columnIndex,
  44. type: "normal",
  45. inRange: false,
  46. start: false,
  47. end: false
  48. };
  49. }
  50. const index = rowIndex * dimension.column + columnIndex;
  51. const nextStartDate = relativeDateGetter(index);
  52. cell.dayjs = nextStartDate;
  53. cell.date = nextStartDate.toDate();
  54. cell.timestamp = nextStartDate.valueOf();
  55. cell.type = "normal";
  56. cell.inRange = !!(startDate && nextStartDate.isSameOrAfter(startDate, unit) && nextEndDate && nextStartDate.isSameOrBefore(nextEndDate, unit)) || !!(startDate && nextStartDate.isSameOrBefore(startDate, unit) && nextEndDate && nextStartDate.isSameOrAfter(nextEndDate, unit));
  57. if (startDate == null ? void 0 : startDate.isSameOrAfter(nextEndDate)) {
  58. cell.start = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit);
  59. cell.end = startDate && nextStartDate.isSame(startDate, unit);
  60. } else {
  61. cell.start = !!startDate && nextStartDate.isSame(startDate, unit);
  62. cell.end = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit);
  63. }
  64. const isToday = nextStartDate.isSame(now, unit);
  65. if (isToday) {
  66. cell.type = "today";
  67. }
  68. setCellMetadata == null ? void 0 : setCellMetadata(cell, { rowIndex, columnIndex });
  69. row[columnIndex + columnIndexOffset] = cell;
  70. }
  71. setRowMetadata == null ? void 0 : setRowMetadata(row);
  72. }
  73. };
  74. const datesInMonth = (year, month, lang) => {
  75. const firstDay = dayjs().locale(lang).startOf("month").month(month).year(year);
  76. const numOfDays = firstDay.daysInMonth();
  77. return rangeArr(numOfDays).map((n) => firstDay.add(n, "day").toDate());
  78. };
  79. const getValidDateOfMonth = (year, month, lang, disabledDate) => {
  80. const _value = dayjs().year(year).month(month).startOf("month");
  81. const _date = datesInMonth(year, month, lang).find((date) => {
  82. return !(disabledDate == null ? void 0 : disabledDate(date));
  83. });
  84. if (_date) {
  85. return dayjs(_date).locale(lang);
  86. }
  87. return _value.locale(lang);
  88. };
  89. const getValidDateOfYear = (value, lang, disabledDate) => {
  90. const year = value.year();
  91. if (!(disabledDate == null ? void 0 : disabledDate(value.toDate()))) {
  92. return value.locale(lang);
  93. }
  94. const month = value.month();
  95. if (!datesInMonth(year, month, lang).every(disabledDate)) {
  96. return getValidDateOfMonth(year, month, lang, disabledDate);
  97. }
  98. for (let i = 0; i < 12; i++) {
  99. if (!datesInMonth(year, i, lang).every(disabledDate)) {
  100. return getValidDateOfMonth(year, i, lang, disabledDate);
  101. }
  102. }
  103. return value;
  104. };
  105. const correctlyParseUserInput = (value, format, lang, defaultFormat) => {
  106. if (isArray(value)) {
  107. return value.map((v) => correctlyParseUserInput(v, format, lang, defaultFormat));
  108. }
  109. if (isString(value)) {
  110. const dayjsValue = defaultFormat.value ? dayjs(value) : dayjs(value, format);
  111. if (!dayjsValue.isValid()) {
  112. return dayjsValue;
  113. }
  114. }
  115. return dayjs(value, format).locale(lang);
  116. };
  117. export { buildPickerTable, correctlyParseUserInput, datesInMonth, getDefaultValue, getValidDateOfMonth, getValidDateOfYear, isValidRange };
  118. //# sourceMappingURL=utils.mjs.map