index.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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 = DatePanel;
  8. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  9. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  11. var _classnames = _interopRequireDefault(require("classnames"));
  12. var React = _interopRequireWildcard(require("react"));
  13. var _dateUtil = require("../../utils/dateUtil");
  14. var _context = require("../context");
  15. var _PanelBody = _interopRequireDefault(require("../PanelBody"));
  16. var _PanelHeader = _interopRequireDefault(require("../PanelHeader"));
  17. function DatePanel(props) {
  18. var prefixCls = props.prefixCls,
  19. _props$panelName = props.panelName,
  20. panelName = _props$panelName === void 0 ? 'date' : _props$panelName,
  21. locale = props.locale,
  22. generateConfig = props.generateConfig,
  23. pickerValue = props.pickerValue,
  24. onPickerValueChange = props.onPickerValueChange,
  25. onModeChange = props.onModeChange,
  26. _props$mode = props.mode,
  27. mode = _props$mode === void 0 ? 'date' : _props$mode,
  28. disabledDate = props.disabledDate,
  29. onSelect = props.onSelect,
  30. onHover = props.onHover,
  31. showWeek = props.showWeek;
  32. var panelPrefixCls = "".concat(prefixCls, "-").concat(panelName, "-panel");
  33. var cellPrefixCls = "".concat(prefixCls, "-cell");
  34. var isWeek = mode === 'week';
  35. // ========================== Base ==========================
  36. var _useInfo = (0, _context.useInfo)(props, mode),
  37. _useInfo2 = (0, _slicedToArray2.default)(_useInfo, 2),
  38. info = _useInfo2[0],
  39. now = _useInfo2[1];
  40. var weekFirstDay = generateConfig.locale.getWeekFirstDay(locale.locale);
  41. var monthStartDate = generateConfig.setDate(pickerValue, 1);
  42. var baseDate = (0, _dateUtil.getWeekStartDate)(locale.locale, generateConfig, monthStartDate);
  43. var month = generateConfig.getMonth(pickerValue);
  44. // =========================== PrefixColumn ===========================
  45. var showPrefixColumn = showWeek === undefined ? isWeek : showWeek;
  46. var prefixColumn = showPrefixColumn ? function (date) {
  47. // >>> Additional check for disabled
  48. var disabled = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date, {
  49. type: 'week'
  50. });
  51. return /*#__PURE__*/React.createElement("td", {
  52. key: "week",
  53. className: (0, _classnames.default)(cellPrefixCls, "".concat(cellPrefixCls, "-week"), (0, _defineProperty2.default)({}, "".concat(cellPrefixCls, "-disabled"), disabled))
  54. // Operation: Same as code in PanelBody
  55. ,
  56. onClick: function onClick() {
  57. if (!disabled) {
  58. onSelect(date);
  59. }
  60. },
  61. onMouseEnter: function onMouseEnter() {
  62. if (!disabled) {
  63. onHover === null || onHover === void 0 || onHover(date);
  64. }
  65. },
  66. onMouseLeave: function onMouseLeave() {
  67. if (!disabled) {
  68. onHover === null || onHover === void 0 || onHover(null);
  69. }
  70. }
  71. }, /*#__PURE__*/React.createElement("div", {
  72. className: "".concat(cellPrefixCls, "-inner")
  73. }, generateConfig.locale.getWeek(locale.locale, date)));
  74. } : null;
  75. // ========================= Cells ==========================
  76. // >>> Header Cells
  77. var headerCells = [];
  78. var weekDaysLocale = locale.shortWeekDays || (generateConfig.locale.getShortWeekDays ? generateConfig.locale.getShortWeekDays(locale.locale) : []);
  79. if (prefixColumn) {
  80. headerCells.push( /*#__PURE__*/React.createElement("th", {
  81. key: "empty"
  82. }, /*#__PURE__*/React.createElement("span", {
  83. style: {
  84. width: 0,
  85. height: 0,
  86. position: 'absolute',
  87. overflow: 'hidden',
  88. opacity: 0
  89. }
  90. }, locale.week)));
  91. }
  92. for (var i = 0; i < _dateUtil.WEEK_DAY_COUNT; i += 1) {
  93. headerCells.push( /*#__PURE__*/React.createElement("th", {
  94. key: i
  95. }, weekDaysLocale[(i + weekFirstDay) % _dateUtil.WEEK_DAY_COUNT]));
  96. }
  97. // >>> Body Cells
  98. var getCellDate = function getCellDate(date, offset) {
  99. return generateConfig.addDate(date, offset);
  100. };
  101. var getCellText = function getCellText(date) {
  102. return (0, _dateUtil.formatValue)(date, {
  103. locale: locale,
  104. format: locale.cellDateFormat,
  105. generateConfig: generateConfig
  106. });
  107. };
  108. var getCellClassName = function getCellClassName(date) {
  109. var classObj = (0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-cell-in-view"), (0, _dateUtil.isSameMonth)(generateConfig, date, pickerValue)), "".concat(prefixCls, "-cell-today"), (0, _dateUtil.isSameDate)(generateConfig, date, now));
  110. return classObj;
  111. };
  112. // ========================= Header =========================
  113. var monthsLocale = locale.shortMonths || (generateConfig.locale.getShortMonths ? generateConfig.locale.getShortMonths(locale.locale) : []);
  114. var yearNode = /*#__PURE__*/React.createElement("button", {
  115. type: "button",
  116. "aria-label": locale.yearSelect,
  117. key: "year",
  118. onClick: function onClick() {
  119. onModeChange('year', pickerValue);
  120. },
  121. tabIndex: -1,
  122. className: "".concat(prefixCls, "-year-btn")
  123. }, (0, _dateUtil.formatValue)(pickerValue, {
  124. locale: locale,
  125. format: locale.yearFormat,
  126. generateConfig: generateConfig
  127. }));
  128. var monthNode = /*#__PURE__*/React.createElement("button", {
  129. type: "button",
  130. "aria-label": locale.monthSelect,
  131. key: "month",
  132. onClick: function onClick() {
  133. onModeChange('month', pickerValue);
  134. },
  135. tabIndex: -1,
  136. className: "".concat(prefixCls, "-month-btn")
  137. }, locale.monthFormat ? (0, _dateUtil.formatValue)(pickerValue, {
  138. locale: locale,
  139. format: locale.monthFormat,
  140. generateConfig: generateConfig
  141. }) : monthsLocale[month]);
  142. var monthYearNodes = locale.monthBeforeYear ? [monthNode, yearNode] : [yearNode, monthNode];
  143. // ========================= Render =========================
  144. return /*#__PURE__*/React.createElement(_context.PanelContext.Provider, {
  145. value: info
  146. }, /*#__PURE__*/React.createElement("div", {
  147. className: (0, _classnames.default)(panelPrefixCls, showWeek && "".concat(panelPrefixCls, "-show-week"))
  148. }, /*#__PURE__*/React.createElement(_PanelHeader.default, {
  149. offset: function offset(distance) {
  150. return generateConfig.addMonth(pickerValue, distance);
  151. },
  152. superOffset: function superOffset(distance) {
  153. return generateConfig.addYear(pickerValue, distance);
  154. },
  155. onChange: onPickerValueChange
  156. // Limitation
  157. ,
  158. getStart: function getStart(date) {
  159. return generateConfig.setDate(date, 1);
  160. },
  161. getEnd: function getEnd(date) {
  162. var clone = generateConfig.setDate(date, 1);
  163. clone = generateConfig.addMonth(clone, 1);
  164. return generateConfig.addDate(clone, -1);
  165. }
  166. }, monthYearNodes), /*#__PURE__*/React.createElement(_PanelBody.default, (0, _extends2.default)({
  167. titleFormat: locale.fieldDateFormat
  168. }, props, {
  169. colNum: _dateUtil.WEEK_DAY_COUNT,
  170. rowNum: 6,
  171. baseDate: baseDate
  172. // Header
  173. ,
  174. headerCells: headerCells
  175. // Body
  176. ,
  177. getCellDate: getCellDate,
  178. getCellText: getCellText,
  179. getCellClassName: getCellClassName,
  180. prefixColumn: prefixColumn,
  181. cellSelection: !isWeek
  182. }))));
  183. }