Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

226 righe
6.9 KiB

  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  4. exports.__esModule = true;
  5. exports.default = void 0;
  6. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  7. var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
  8. var _propTypes = _interopRequireDefault(require("prop-types"));
  9. var _react = _interopRequireDefault(require("react"));
  10. var _reactDom = require("react-dom");
  11. var _clsx = _interopRequireDefault(require("clsx"));
  12. var dates = _interopRequireWildcard(require("./utils/dates"));
  13. var _helpers = require("./utils/helpers");
  14. var _selection = require("./utils/selection");
  15. var _Selection = _interopRequireWildcard(require("./Selection"));
  16. var BackgroundCells =
  17. /*#__PURE__*/
  18. function (_React$Component) {
  19. (0, _inheritsLoose2.default)(BackgroundCells, _React$Component);
  20. function BackgroundCells(props, context) {
  21. var _this;
  22. _this = _React$Component.call(this, props, context) || this;
  23. _this.state = {
  24. selecting: false
  25. };
  26. return _this;
  27. }
  28. var _proto = BackgroundCells.prototype;
  29. _proto.componentDidMount = function componentDidMount() {
  30. this.props.selectable && this._selectable();
  31. };
  32. _proto.componentWillUnmount = function componentWillUnmount() {
  33. this._teardownSelectable();
  34. };
  35. _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
  36. if (nextProps.selectable && !this.props.selectable) this._selectable();
  37. if (!nextProps.selectable && this.props.selectable) this._teardownSelectable();
  38. };
  39. _proto.render = function render() {
  40. var _this$props = this.props,
  41. range = _this$props.range,
  42. getNow = _this$props.getNow,
  43. getters = _this$props.getters,
  44. currentDate = _this$props.date,
  45. Wrapper = _this$props.components.dateCellWrapper;
  46. var _this$state = this.state,
  47. selecting = _this$state.selecting,
  48. startIdx = _this$state.startIdx,
  49. endIdx = _this$state.endIdx;
  50. var current = getNow();
  51. return _react.default.createElement("div", {
  52. className: "rbc-row-bg"
  53. }, range.map(function (date, index) {
  54. var selected = selecting && index >= startIdx && index <= endIdx;
  55. var _getters$dayProp = getters.dayProp(date),
  56. className = _getters$dayProp.className,
  57. style = _getters$dayProp.style;
  58. return _react.default.createElement(Wrapper, {
  59. key: index,
  60. value: date,
  61. range: range
  62. }, _react.default.createElement("div", {
  63. style: style,
  64. className: (0, _clsx.default)('rbc-day-bg', className, selected && 'rbc-selected-cell', dates.eq(date, current, 'day') && 'rbc-today', currentDate && dates.month(currentDate) !== dates.month(date) && 'rbc-off-range-bg')
  65. }));
  66. }));
  67. };
  68. _proto._selectable = function _selectable() {
  69. var _this2 = this;
  70. var node = (0, _reactDom.findDOMNode)(this);
  71. var selector = this._selector = new _Selection.default(this.props.container, {
  72. longPressThreshold: this.props.longPressThreshold
  73. });
  74. var selectorClicksHandler = function selectorClicksHandler(point, actionType) {
  75. if (!(0, _Selection.isEvent)((0, _reactDom.findDOMNode)(_this2), point)) {
  76. var rowBox = (0, _Selection.getBoundsForNode)(node);
  77. var _this2$props = _this2.props,
  78. range = _this2$props.range,
  79. rtl = _this2$props.rtl;
  80. if ((0, _selection.pointInBox)(rowBox, point)) {
  81. var currentCell = (0, _selection.getSlotAtX)(rowBox, point.x, rtl, range.length);
  82. _this2._selectSlot({
  83. startIdx: currentCell,
  84. endIdx: currentCell,
  85. action: actionType,
  86. box: point
  87. });
  88. }
  89. }
  90. _this2._initial = {};
  91. _this2.setState({
  92. selecting: false
  93. });
  94. };
  95. selector.on('selecting', function (box) {
  96. var _this2$props2 = _this2.props,
  97. range = _this2$props2.range,
  98. rtl = _this2$props2.rtl;
  99. var startIdx = -1;
  100. var endIdx = -1;
  101. if (!_this2.state.selecting) {
  102. (0, _helpers.notify)(_this2.props.onSelectStart, [box]);
  103. _this2._initial = {
  104. x: box.x,
  105. y: box.y
  106. };
  107. }
  108. if (selector.isSelected(node)) {
  109. var nodeBox = (0, _Selection.getBoundsForNode)(node);
  110. var _dateCellSelection = (0, _selection.dateCellSelection)(_this2._initial, nodeBox, box, range.length, rtl);
  111. startIdx = _dateCellSelection.startIdx;
  112. endIdx = _dateCellSelection.endIdx;
  113. }
  114. _this2.setState({
  115. selecting: true,
  116. startIdx: startIdx,
  117. endIdx: endIdx
  118. });
  119. });
  120. selector.on('beforeSelect', function (box) {
  121. if (_this2.props.selectable !== 'ignoreEvents') return;
  122. return !(0, _Selection.isEvent)((0, _reactDom.findDOMNode)(_this2), box);
  123. });
  124. selector.on('click', function (point) {
  125. return selectorClicksHandler(point, 'click');
  126. });
  127. selector.on('doubleClick', function (point) {
  128. return selectorClicksHandler(point, 'doubleClick');
  129. });
  130. selector.on('select', function (bounds) {
  131. _this2._selectSlot((0, _extends2.default)({}, _this2.state, {
  132. action: 'select',
  133. bounds: bounds
  134. }));
  135. _this2._initial = {};
  136. _this2.setState({
  137. selecting: false
  138. });
  139. (0, _helpers.notify)(_this2.props.onSelectEnd, [_this2.state]);
  140. });
  141. };
  142. _proto._teardownSelectable = function _teardownSelectable() {
  143. if (!this._selector) return;
  144. this._selector.teardown();
  145. this._selector = null;
  146. };
  147. _proto._selectSlot = function _selectSlot(_ref) {
  148. var endIdx = _ref.endIdx,
  149. startIdx = _ref.startIdx,
  150. action = _ref.action,
  151. bounds = _ref.bounds,
  152. box = _ref.box;
  153. if (endIdx !== -1 && startIdx !== -1) this.props.onSelectSlot && this.props.onSelectSlot({
  154. start: startIdx,
  155. end: endIdx,
  156. action: action,
  157. bounds: bounds,
  158. box: box
  159. });
  160. };
  161. return BackgroundCells;
  162. }(_react.default.Component);
  163. BackgroundCells.propTypes = process.env.NODE_ENV !== "production" ? {
  164. date: _propTypes.default.instanceOf(Date),
  165. getNow: _propTypes.default.func.isRequired,
  166. getters: _propTypes.default.object.isRequired,
  167. components: _propTypes.default.object.isRequired,
  168. container: _propTypes.default.func,
  169. dayPropGetter: _propTypes.default.func,
  170. selectable: _propTypes.default.oneOf([true, false, 'ignoreEvents']),
  171. longPressThreshold: _propTypes.default.number,
  172. onSelectSlot: _propTypes.default.func.isRequired,
  173. onSelectEnd: _propTypes.default.func,
  174. onSelectStart: _propTypes.default.func,
  175. range: _propTypes.default.arrayOf(_propTypes.default.instanceOf(Date)),
  176. rtl: _propTypes.default.bool,
  177. type: _propTypes.default.string
  178. } : {};
  179. var _default = BackgroundCells;
  180. exports.default = _default;
  181. module.exports = exports["default"];