PanelHeader.js 6.0 KB

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