03ed51851b89b293e4e9c78fabf1db1a890d8385e3de9ae710c2433b82d96c643292348004c1ee6d972a7d82c3bc778ccff2482c92b04453500b77752e69d2 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var dayjs = require('dayjs');
  5. var lodashUnified = require('lodash-unified');
  6. var utils = require('../utils.js');
  7. var constants = require('../constants.js');
  8. var useShortcut = require('./use-shortcut.js');
  9. var index = require('../../../../hooks/use-namespace/index.js');
  10. var index$1 = require('../../../../hooks/use-locale/index.js');
  11. var shared = require('@vue/shared');
  12. function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
  13. var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
  14. const useRangePicker = (props, {
  15. defaultValue,
  16. defaultTime,
  17. leftDate,
  18. rightDate,
  19. step,
  20. unit,
  21. sortDates
  22. }) => {
  23. const { emit } = vue.getCurrentInstance();
  24. const { pickerNs } = vue.inject(constants.ROOT_PICKER_INJECTION_KEY);
  25. const drpNs = index.useNamespace("date-range-picker");
  26. const { t, lang } = index$1.useLocale();
  27. const handleShortcutClick = useShortcut.useShortcut(lang);
  28. const minDate = vue.ref();
  29. const maxDate = vue.ref();
  30. const rangeState = vue.ref({
  31. endDate: null,
  32. selecting: false
  33. });
  34. const handleChangeRange = (val) => {
  35. rangeState.value = val;
  36. };
  37. const handleRangeConfirm = (visible = false) => {
  38. const _minDate = vue.unref(minDate);
  39. const _maxDate = vue.unref(maxDate);
  40. if (utils.isValidRange([_minDate, _maxDate])) {
  41. emit("pick", [_minDate, _maxDate], visible);
  42. }
  43. };
  44. const onSelect = (selecting) => {
  45. rangeState.value.selecting = selecting;
  46. if (!selecting) {
  47. rangeState.value.endDate = null;
  48. }
  49. };
  50. const parseValue = (parsedValue) => {
  51. if (shared.isArray(parsedValue) && parsedValue.length === 2) {
  52. const [start, end] = parsedValue;
  53. minDate.value = start;
  54. leftDate.value = start;
  55. maxDate.value = end;
  56. sortDates(vue.unref(minDate), vue.unref(maxDate));
  57. } else {
  58. restoreDefault();
  59. }
  60. };
  61. const restoreDefault = () => {
  62. let [start, end] = utils.getDefaultValue(vue.unref(defaultValue), {
  63. lang: vue.unref(lang),
  64. step,
  65. unit,
  66. unlinkPanels: props.unlinkPanels
  67. });
  68. const getShift = (day) => {
  69. return day.diff(day.startOf("d"), "ms");
  70. };
  71. const maybeTimes = vue.unref(defaultTime);
  72. if (maybeTimes) {
  73. let leftShift = 0;
  74. let rightShift = 0;
  75. if (shared.isArray(maybeTimes)) {
  76. const [timeStart, timeEnd] = maybeTimes.map(dayjs__default["default"]);
  77. leftShift = getShift(timeStart);
  78. rightShift = getShift(timeEnd);
  79. } else {
  80. const shift = getShift(dayjs__default["default"](maybeTimes));
  81. leftShift = shift;
  82. rightShift = shift;
  83. }
  84. start = start.startOf("d").add(leftShift, "ms");
  85. end = end.startOf("d").add(rightShift, "ms");
  86. }
  87. minDate.value = void 0;
  88. maxDate.value = void 0;
  89. leftDate.value = start;
  90. rightDate.value = end;
  91. };
  92. vue.watch(defaultValue, (val) => {
  93. if (val) {
  94. restoreDefault();
  95. }
  96. }, { immediate: true });
  97. vue.watch(() => props.parsedValue, (parsedValue) => {
  98. if (!(parsedValue == null ? void 0 : parsedValue.length) || !lodashUnified.isEqual(parsedValue, [minDate.value, maxDate.value])) {
  99. parseValue(parsedValue);
  100. }
  101. }, {
  102. immediate: true
  103. });
  104. vue.watch(() => props.visible, () => {
  105. if (props.visible) {
  106. parseValue(props.parsedValue);
  107. }
  108. }, { immediate: true });
  109. return {
  110. minDate,
  111. maxDate,
  112. rangeState,
  113. lang,
  114. ppNs: pickerNs,
  115. drpNs,
  116. handleChangeRange,
  117. handleRangeConfirm,
  118. handleShortcutClick,
  119. onSelect,
  120. parseValue,
  121. t
  122. };
  123. };
  124. exports.useRangePicker = useRangePicker;
  125. //# sourceMappingURL=use-range-picker.js.map