PanelHeader.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import classNames from 'classnames';
  2. import * as React from 'react';
  3. import { isSameOrAfter } from "../utils/dateUtil";
  4. import { PickerHackContext, usePanelContext } from "./context";
  5. var HIDDEN_STYLE = {
  6. visibility: 'hidden'
  7. };
  8. function PanelHeader(props) {
  9. var offset = props.offset,
  10. superOffset = props.superOffset,
  11. onChange = props.onChange,
  12. getStart = props.getStart,
  13. getEnd = props.getEnd,
  14. children = props.children;
  15. var _usePanelContext = usePanelContext(),
  16. prefixCls = _usePanelContext.prefixCls,
  17. _usePanelContext$prev = _usePanelContext.prevIcon,
  18. prevIcon = _usePanelContext$prev === void 0 ? "\u2039" : _usePanelContext$prev,
  19. _usePanelContext$next = _usePanelContext.nextIcon,
  20. nextIcon = _usePanelContext$next === void 0 ? "\u203A" : _usePanelContext$next,
  21. _usePanelContext$supe = _usePanelContext.superPrevIcon,
  22. superPrevIcon = _usePanelContext$supe === void 0 ? "\xAB" : _usePanelContext$supe,
  23. _usePanelContext$supe2 = _usePanelContext.superNextIcon,
  24. superNextIcon = _usePanelContext$supe2 === void 0 ? "\xBB" : _usePanelContext$supe2,
  25. minDate = _usePanelContext.minDate,
  26. maxDate = _usePanelContext.maxDate,
  27. generateConfig = _usePanelContext.generateConfig,
  28. locale = _usePanelContext.locale,
  29. pickerValue = _usePanelContext.pickerValue,
  30. type = _usePanelContext.panelType;
  31. var headerPrefixCls = "".concat(prefixCls, "-header");
  32. var _React$useContext = React.useContext(PickerHackContext),
  33. hidePrev = _React$useContext.hidePrev,
  34. hideNext = _React$useContext.hideNext,
  35. hideHeader = _React$useContext.hideHeader;
  36. // ======================= Limitation =======================
  37. var disabledOffsetPrev = React.useMemo(function () {
  38. if (!minDate || !offset || !getEnd) {
  39. return false;
  40. }
  41. var prevPanelLimitDate = getEnd(offset(-1, pickerValue));
  42. return !isSameOrAfter(generateConfig, locale, prevPanelLimitDate, minDate, type);
  43. }, [minDate, offset, pickerValue, getEnd, generateConfig, locale, type]);
  44. var disabledSuperOffsetPrev = React.useMemo(function () {
  45. if (!minDate || !superOffset || !getEnd) {
  46. return false;
  47. }
  48. var prevPanelLimitDate = getEnd(superOffset(-1, pickerValue));
  49. return !isSameOrAfter(generateConfig, locale, prevPanelLimitDate, minDate, type);
  50. }, [minDate, superOffset, pickerValue, getEnd, generateConfig, locale, type]);
  51. var disabledOffsetNext = React.useMemo(function () {
  52. if (!maxDate || !offset || !getStart) {
  53. return false;
  54. }
  55. var nextPanelLimitDate = getStart(offset(1, pickerValue));
  56. return !isSameOrAfter(generateConfig, locale, maxDate, nextPanelLimitDate, type);
  57. }, [maxDate, offset, pickerValue, getStart, generateConfig, locale, type]);
  58. var disabledSuperOffsetNext = React.useMemo(function () {
  59. if (!maxDate || !superOffset || !getStart) {
  60. return false;
  61. }
  62. var nextPanelLimitDate = getStart(superOffset(1, pickerValue));
  63. return !isSameOrAfter(generateConfig, locale, maxDate, nextPanelLimitDate, type);
  64. }, [maxDate, superOffset, pickerValue, getStart, generateConfig, locale, type]);
  65. // ========================= Offset =========================
  66. var onOffset = function onOffset(distance) {
  67. if (offset) {
  68. onChange(offset(distance, pickerValue));
  69. }
  70. };
  71. var onSuperOffset = function onSuperOffset(distance) {
  72. if (superOffset) {
  73. onChange(superOffset(distance, pickerValue));
  74. }
  75. };
  76. // ========================= Render =========================
  77. if (hideHeader) {
  78. return null;
  79. }
  80. var prevBtnCls = "".concat(headerPrefixCls, "-prev-btn");
  81. var nextBtnCls = "".concat(headerPrefixCls, "-next-btn");
  82. var superPrevBtnCls = "".concat(headerPrefixCls, "-super-prev-btn");
  83. var superNextBtnCls = "".concat(headerPrefixCls, "-super-next-btn");
  84. return /*#__PURE__*/React.createElement("div", {
  85. className: headerPrefixCls
  86. }, superOffset && /*#__PURE__*/React.createElement("button", {
  87. type: "button",
  88. "aria-label": locale.previousYear,
  89. onClick: function onClick() {
  90. return onSuperOffset(-1);
  91. },
  92. tabIndex: -1,
  93. className: classNames(superPrevBtnCls, disabledSuperOffsetPrev && "".concat(superPrevBtnCls, "-disabled")),
  94. disabled: disabledSuperOffsetPrev,
  95. style: hidePrev ? HIDDEN_STYLE : {}
  96. }, superPrevIcon), offset && /*#__PURE__*/React.createElement("button", {
  97. type: "button",
  98. "aria-label": locale.previousMonth,
  99. onClick: function onClick() {
  100. return onOffset(-1);
  101. },
  102. tabIndex: -1,
  103. className: classNames(prevBtnCls, disabledOffsetPrev && "".concat(prevBtnCls, "-disabled")),
  104. disabled: disabledOffsetPrev,
  105. style: hidePrev ? HIDDEN_STYLE : {}
  106. }, prevIcon), /*#__PURE__*/React.createElement("div", {
  107. className: "".concat(headerPrefixCls, "-view")
  108. }, children), offset && /*#__PURE__*/React.createElement("button", {
  109. type: "button",
  110. "aria-label": locale.nextMonth,
  111. onClick: function onClick() {
  112. return onOffset(1);
  113. },
  114. tabIndex: -1,
  115. className: classNames(nextBtnCls, disabledOffsetNext && "".concat(nextBtnCls, "-disabled")),
  116. disabled: disabledOffsetNext,
  117. style: hideNext ? HIDDEN_STYLE : {}
  118. }, nextIcon), superOffset && /*#__PURE__*/React.createElement("button", {
  119. type: "button",
  120. "aria-label": locale.nextYear,
  121. onClick: function onClick() {
  122. return onSuperOffset(1);
  123. },
  124. tabIndex: -1,
  125. className: classNames(superNextBtnCls, disabledSuperOffsetNext && "".concat(superNextBtnCls, "-disabled")),
  126. disabled: disabledSuperOffsetNext,
  127. style: hideNext ? HIDDEN_STYLE : {}
  128. }, superNextIcon));
  129. }
  130. export default PanelHeader;