@rusinov/react-big-calendar
Version:
226 lines (181 loc) • 7.07 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
var _reactDom = require("react-dom");
var _classnames = _interopRequireDefault(require("classnames"));
var _dates = _interopRequireDefault(require("./utils/dates"));
var _helpers = require("./utils/helpers");
var _selection = require("./utils/selection");
var _Selection = _interopRequireWildcard(require("./Selection"));
var BackgroundCells =
/*#__PURE__*/
function (_React$Component) {
(0, _inheritsLoose2.default)(BackgroundCells, _React$Component);
function BackgroundCells(props, context) {
var _this;
_this = _React$Component.call(this, props, context) || this;
_this.state = {
selecting: false
};
return _this;
}
var _proto = BackgroundCells.prototype;
_proto.componentDidMount = function componentDidMount() {
this.props.selectable && this._selectable();
};
_proto.componentWillUnmount = function componentWillUnmount() {
this._teardownSelectable();
};
_proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
if (nextProps.selectable && !this.props.selectable) this._selectable();
if (!nextProps.selectable && this.props.selectable) this._teardownSelectable();
};
_proto.render = function render() {
var _this$props = this.props,
range = _this$props.range,
getNow = _this$props.getNow,
getters = _this$props.getters,
currentDate = _this$props.date,
Wrapper = _this$props.components.dateCellWrapper;
var _this$state = this.state,
selecting = _this$state.selecting,
startIdx = _this$state.startIdx,
endIdx = _this$state.endIdx;
var current = getNow();
return _react.default.createElement("div", {
className: "rbc-row-bg"
}, range.map(function (date, index) {
var selected = selecting && index >= startIdx && index <= endIdx;
var _getters$dayProp = getters.dayProp(date),
className = _getters$dayProp.className,
style = _getters$dayProp.style;
return _react.default.createElement(Wrapper, {
key: index,
value: date,
range: range
}, _react.default.createElement("div", {
style: style,
className: (0, _classnames.default)('rbc-day-bg', className, selected && 'rbc-selected-cell', _dates.default.eq(date, current, 'day') && 'rbc-today', currentDate && _dates.default.month(currentDate) !== _dates.default.month(date) && 'rbc-off-range-bg')
}));
}));
};
_proto._selectable = function _selectable() {
var _this2 = this;
var node = (0, _reactDom.findDOMNode)(this);
var selector = this._selector = new _Selection.default(this.props.container, {
longPressThreshold: this.props.longPressThreshold
});
var selectorClicksHandler = function selectorClicksHandler(point, actionType) {
if (!(0, _Selection.isEvent)((0, _reactDom.findDOMNode)(_this2), point)) {
var rowBox = (0, _Selection.getBoundsForNode)(node);
var _this2$props = _this2.props,
range = _this2$props.range,
rtl = _this2$props.rtl;
if ((0, _selection.pointInBox)(rowBox, point)) {
var currentCell = (0, _selection.getSlotAtX)(rowBox, point.x, rtl, range.length);
_this2._selectSlot({
startIdx: currentCell,
endIdx: currentCell,
action: actionType,
box: point
});
}
}
_this2._initial = {};
_this2.setState({
selecting: false
});
};
selector.on('selecting', function (box) {
var _this2$props2 = _this2.props,
range = _this2$props2.range,
rtl = _this2$props2.rtl;
var startIdx = -1;
var endIdx = -1;
if (!_this2.state.selecting) {
(0, _helpers.notify)(_this2.props.onSelectStart, [box]);
_this2._initial = {
x: box.x,
y: box.y
};
}
if (selector.isSelected(node)) {
var nodeBox = (0, _Selection.getBoundsForNode)(node);
var _dateCellSelection = (0, _selection.dateCellSelection)(_this2._initial, nodeBox, box, range.length, rtl);
startIdx = _dateCellSelection.startIdx;
endIdx = _dateCellSelection.endIdx;
}
_this2.setState({
selecting: true,
startIdx: startIdx,
endIdx: endIdx
});
});
selector.on('beforeSelect', function (box) {
if (_this2.props.selectable !== 'ignoreEvents') return;
return !(0, _Selection.isEvent)((0, _reactDom.findDOMNode)(_this2), box);
});
selector.on('click', function (point) {
return selectorClicksHandler(point, 'click');
});
selector.on('doubleClick', function (point) {
return selectorClicksHandler(point, 'doubleClick');
});
selector.on('select', function (bounds) {
_this2._selectSlot((0, _extends2.default)({}, _this2.state, {
action: 'select',
bounds: bounds
}));
_this2._initial = {};
_this2.setState({
selecting: false
});
(0, _helpers.notify)(_this2.props.onSelectEnd, [_this2.state]);
});
};
_proto._teardownSelectable = function _teardownSelectable() {
if (!this._selector) return;
this._selector.teardown();
this._selector = null;
};
_proto._selectSlot = function _selectSlot(_ref) {
var endIdx = _ref.endIdx,
startIdx = _ref.startIdx,
action = _ref.action,
bounds = _ref.bounds,
box = _ref.box;
if (endIdx !== -1 && startIdx !== -1) this.props.onSelectSlot && this.props.onSelectSlot({
start: startIdx,
end: endIdx,
action: action,
bounds: bounds,
box: box
});
};
return BackgroundCells;
}(_react.default.Component);
BackgroundCells.propTypes = {
date: _propTypes.default.instanceOf(Date),
getNow: _propTypes.default.func.isRequired,
getters: _propTypes.default.object.isRequired,
components: _propTypes.default.object.isRequired,
container: _propTypes.default.func,
dayPropGetter: _propTypes.default.func,
selectable: _propTypes.default.oneOf([true, false, 'ignoreEvents']),
longPressThreshold: _propTypes.default.number,
onSelectSlot: _propTypes.default.func.isRequired,
onSelectEnd: _propTypes.default.func,
onSelectStart: _propTypes.default.func,
range: _propTypes.default.arrayOf(_propTypes.default.instanceOf(Date)),
rtl: _propTypes.default.bool,
type: _propTypes.default.string
};
var _default = BackgroundCells;
exports.default = _default;
module.exports = exports["default"];