useRangeViewDates.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = useRangeViewDates;
  6. var _miscUtil = require("../utils/miscUtil");
  7. var _dateUtil = require("../utils/dateUtil");
  8. var _vue = require("vue");
  9. function getStartEndDistance(startDate, endDate, picker, generateConfig) {
  10. const startNext = (0, _dateUtil.getClosingViewDate)(startDate, picker, generateConfig, 1);
  11. function getDistance(compareFunc) {
  12. if (compareFunc(startDate, endDate)) {
  13. return 'same';
  14. }
  15. if (compareFunc(startNext, endDate)) {
  16. return 'closing';
  17. }
  18. return 'far';
  19. }
  20. switch (picker) {
  21. case 'year':
  22. return getDistance((start, end) => (0, _dateUtil.isSameDecade)(generateConfig, start, end));
  23. case 'quarter':
  24. case 'month':
  25. return getDistance((start, end) => (0, _dateUtil.isSameYear)(generateConfig, start, end));
  26. default:
  27. return getDistance((start, end) => (0, _dateUtil.isSameMonth)(generateConfig, start, end));
  28. }
  29. }
  30. function getRangeViewDate(values, index, picker, generateConfig) {
  31. const startDate = (0, _miscUtil.getValue)(values, 0);
  32. const endDate = (0, _miscUtil.getValue)(values, 1);
  33. if (index === 0) {
  34. return startDate;
  35. }
  36. if (startDate && endDate) {
  37. const distance = getStartEndDistance(startDate, endDate, picker, generateConfig);
  38. switch (distance) {
  39. case 'same':
  40. return startDate;
  41. case 'closing':
  42. return startDate;
  43. default:
  44. return (0, _dateUtil.getClosingViewDate)(endDate, picker, generateConfig, -1);
  45. }
  46. }
  47. return startDate;
  48. }
  49. function useRangeViewDates(_ref) {
  50. let {
  51. values,
  52. picker,
  53. defaultDates,
  54. generateConfig
  55. } = _ref;
  56. const defaultViewDates = (0, _vue.ref)([(0, _miscUtil.getValue)(defaultDates, 0), (0, _miscUtil.getValue)(defaultDates, 1)]);
  57. const viewDates = (0, _vue.ref)(null);
  58. const startDate = (0, _vue.computed)(() => (0, _miscUtil.getValue)(values.value, 0));
  59. const endDate = (0, _vue.computed)(() => (0, _miscUtil.getValue)(values.value, 1));
  60. const getViewDate = index => {
  61. // If set default view date, use it
  62. if (defaultViewDates.value[index]) {
  63. return defaultViewDates.value[index];
  64. }
  65. return (0, _miscUtil.getValue)(viewDates.value, index) || getRangeViewDate(values.value, index, picker.value, generateConfig.value) || startDate.value || endDate.value || generateConfig.value.getNow();
  66. };
  67. const startViewDate = (0, _vue.ref)(null);
  68. const endViewDate = (0, _vue.ref)(null);
  69. (0, _vue.watchEffect)(() => {
  70. startViewDate.value = getViewDate(0);
  71. endViewDate.value = getViewDate(1);
  72. });
  73. function setViewDate(viewDate, index) {
  74. if (viewDate) {
  75. let newViewDates = (0, _miscUtil.updateValues)(viewDates.value, viewDate, index);
  76. // Set view date will clean up default one
  77. // Should always be an array
  78. defaultViewDates.value = (0, _miscUtil.updateValues)(defaultViewDates.value, null, index) || [null, null];
  79. // Reset another one when not have value
  80. const anotherIndex = (index + 1) % 2;
  81. if (!(0, _miscUtil.getValue)(values.value, anotherIndex)) {
  82. newViewDates = (0, _miscUtil.updateValues)(newViewDates, viewDate, anotherIndex);
  83. }
  84. viewDates.value = newViewDates;
  85. } else if (startDate.value || endDate.value) {
  86. // Reset all when has values when `viewDate` is `null` which means from open trigger
  87. viewDates.value = null;
  88. }
  89. }
  90. return [startViewDate, endViewDate, setViewDate];
  91. }