PanelBody.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
  2. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  3. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  4. import classNames from 'classnames';
  5. import * as React from 'react';
  6. import { formatValue, isInRange, isSame } from "../utils/dateUtil";
  7. import { PickerHackContext, usePanelContext } from "./context";
  8. export default function PanelBody(props) {
  9. var rowNum = props.rowNum,
  10. colNum = props.colNum,
  11. baseDate = props.baseDate,
  12. getCellDate = props.getCellDate,
  13. prefixColumn = props.prefixColumn,
  14. rowClassName = props.rowClassName,
  15. titleFormat = props.titleFormat,
  16. getCellText = props.getCellText,
  17. getCellClassName = props.getCellClassName,
  18. headerCells = props.headerCells,
  19. _props$cellSelection = props.cellSelection,
  20. cellSelection = _props$cellSelection === void 0 ? true : _props$cellSelection,
  21. disabledDate = props.disabledDate;
  22. var _usePanelContext = usePanelContext(),
  23. prefixCls = _usePanelContext.prefixCls,
  24. type = _usePanelContext.panelType,
  25. now = _usePanelContext.now,
  26. contextDisabledDate = _usePanelContext.disabledDate,
  27. cellRender = _usePanelContext.cellRender,
  28. onHover = _usePanelContext.onHover,
  29. hoverValue = _usePanelContext.hoverValue,
  30. hoverRangeValue = _usePanelContext.hoverRangeValue,
  31. generateConfig = _usePanelContext.generateConfig,
  32. values = _usePanelContext.values,
  33. locale = _usePanelContext.locale,
  34. onSelect = _usePanelContext.onSelect;
  35. var mergedDisabledDate = disabledDate || contextDisabledDate;
  36. var cellPrefixCls = "".concat(prefixCls, "-cell");
  37. // ============================= Context ==============================
  38. var _React$useContext = React.useContext(PickerHackContext),
  39. onCellDblClick = _React$useContext.onCellDblClick;
  40. // ============================== Value ===============================
  41. var matchValues = function matchValues(date) {
  42. return values.some(function (singleValue) {
  43. return singleValue && isSame(generateConfig, locale, date, singleValue, type);
  44. });
  45. };
  46. // =============================== Body ===============================
  47. var rows = [];
  48. for (var row = 0; row < rowNum; row += 1) {
  49. var rowNode = [];
  50. var rowStartDate = void 0;
  51. var _loop = function _loop() {
  52. var offset = row * colNum + col;
  53. var currentDate = getCellDate(baseDate, offset);
  54. var disabled = mergedDisabledDate === null || mergedDisabledDate === void 0 ? void 0 : mergedDisabledDate(currentDate, {
  55. type: type
  56. });
  57. // Row Start Cell
  58. if (col === 0) {
  59. rowStartDate = currentDate;
  60. if (prefixColumn) {
  61. rowNode.push(prefixColumn(rowStartDate));
  62. }
  63. }
  64. // Range
  65. var inRange = false;
  66. var rangeStart = false;
  67. var rangeEnd = false;
  68. if (cellSelection && hoverRangeValue) {
  69. var _hoverRangeValue = _slicedToArray(hoverRangeValue, 2),
  70. hoverStart = _hoverRangeValue[0],
  71. hoverEnd = _hoverRangeValue[1];
  72. inRange = isInRange(generateConfig, hoverStart, hoverEnd, currentDate);
  73. rangeStart = isSame(generateConfig, locale, currentDate, hoverStart, type);
  74. rangeEnd = isSame(generateConfig, locale, currentDate, hoverEnd, type);
  75. }
  76. // Title
  77. var title = titleFormat ? formatValue(currentDate, {
  78. locale: locale,
  79. format: titleFormat,
  80. generateConfig: generateConfig
  81. }) : undefined;
  82. // Render
  83. var inner = /*#__PURE__*/React.createElement("div", {
  84. className: "".concat(cellPrefixCls, "-inner")
  85. }, getCellText(currentDate));
  86. rowNode.push( /*#__PURE__*/React.createElement("td", {
  87. key: col,
  88. title: title,
  89. className: classNames(cellPrefixCls, _objectSpread(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(cellPrefixCls, "-disabled"), disabled), "".concat(cellPrefixCls, "-hover"), (hoverValue || []).some(function (date) {
  90. return isSame(generateConfig, locale, currentDate, date, type);
  91. })), "".concat(cellPrefixCls, "-in-range"), inRange && !rangeStart && !rangeEnd), "".concat(cellPrefixCls, "-range-start"), rangeStart), "".concat(cellPrefixCls, "-range-end"), rangeEnd), "".concat(prefixCls, "-cell-selected"), !hoverRangeValue &&
  92. // WeekPicker use row instead
  93. type !== 'week' && matchValues(currentDate)), getCellClassName(currentDate))),
  94. onClick: function onClick() {
  95. if (!disabled) {
  96. onSelect(currentDate);
  97. }
  98. },
  99. onDoubleClick: function onDoubleClick() {
  100. if (!disabled && onCellDblClick) {
  101. onCellDblClick();
  102. }
  103. },
  104. onMouseEnter: function onMouseEnter() {
  105. if (!disabled) {
  106. onHover === null || onHover === void 0 || onHover(currentDate);
  107. }
  108. },
  109. onMouseLeave: function onMouseLeave() {
  110. if (!disabled) {
  111. onHover === null || onHover === void 0 || onHover(null);
  112. }
  113. }
  114. }, cellRender ? cellRender(currentDate, {
  115. prefixCls: prefixCls,
  116. originNode: inner,
  117. today: now,
  118. type: type,
  119. locale: locale
  120. }) : inner));
  121. };
  122. for (var col = 0; col < colNum; col += 1) {
  123. _loop();
  124. }
  125. rows.push( /*#__PURE__*/React.createElement("tr", {
  126. key: row,
  127. className: rowClassName === null || rowClassName === void 0 ? void 0 : rowClassName(rowStartDate)
  128. }, rowNode));
  129. }
  130. // ============================== Render ==============================
  131. return /*#__PURE__*/React.createElement("div", {
  132. className: "".concat(prefixCls, "-body")
  133. }, /*#__PURE__*/React.createElement("table", {
  134. className: "".concat(prefixCls, "-content")
  135. }, headerCells && /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, headerCells)), /*#__PURE__*/React.createElement("tbody", null, rows)));
  136. }