82 lines
2.7 KiB
JavaScript
82 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.dateCellSelection = dateCellSelection;
|
|
exports.getSlotAtX = getSlotAtX;
|
|
exports.isSelected = isSelected;
|
|
exports.pointInBox = pointInBox;
|
|
exports.slotWidth = slotWidth;
|
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
function isSelected(event, selected) {
|
|
if (!event || selected == null) return false;
|
|
return (0, _isEqual.default)(event, selected);
|
|
}
|
|
function slotWidth(rowBox, slots) {
|
|
var rowWidth = rowBox.right - rowBox.left;
|
|
var cellWidth = rowWidth / slots;
|
|
return cellWidth;
|
|
}
|
|
function getSlotAtX(rowBox, x, rtl, slots) {
|
|
var cellWidth = slotWidth(rowBox, slots);
|
|
return rtl ? slots - 1 - Math.floor((x - rowBox.left) / cellWidth) : Math.floor((x - rowBox.left) / cellWidth);
|
|
}
|
|
function pointInBox(box, _ref) {
|
|
var x = _ref.x,
|
|
y = _ref.y;
|
|
return y >= box.top && y <= box.bottom && x >= box.left && x <= box.right;
|
|
}
|
|
function dateCellSelection(start, rowBox, box, slots, rtl) {
|
|
var startIdx = -1;
|
|
var endIdx = -1;
|
|
var lastSlotIdx = slots - 1;
|
|
var cellWidth = slotWidth(rowBox, slots);
|
|
|
|
// cell under the mouse
|
|
var currentSlot = getSlotAtX(rowBox, box.x, rtl, slots);
|
|
|
|
// Identify row as either the initial row
|
|
// or the row under the current mouse point
|
|
var isCurrentRow = rowBox.top < box.y && rowBox.bottom > box.y;
|
|
var isStartRow = rowBox.top < start.y && rowBox.bottom > start.y;
|
|
|
|
// this row's position relative to the start point
|
|
var isAboveStart = start.y > rowBox.bottom;
|
|
var isBelowStart = rowBox.top > start.y;
|
|
var isBetween = box.top < rowBox.top && box.bottom > rowBox.bottom;
|
|
|
|
// this row is between the current and start rows, so entirely selected
|
|
if (isBetween) {
|
|
startIdx = 0;
|
|
endIdx = lastSlotIdx;
|
|
}
|
|
if (isCurrentRow) {
|
|
if (isBelowStart) {
|
|
startIdx = 0;
|
|
endIdx = currentSlot;
|
|
} else if (isAboveStart) {
|
|
startIdx = currentSlot;
|
|
endIdx = lastSlotIdx;
|
|
}
|
|
}
|
|
if (isStartRow) {
|
|
// select the cell under the initial point
|
|
startIdx = endIdx = rtl ? lastSlotIdx - Math.floor((start.x - rowBox.left) / cellWidth) : Math.floor((start.x - rowBox.left) / cellWidth);
|
|
if (isCurrentRow) {
|
|
if (currentSlot < startIdx) startIdx = currentSlot;else endIdx = currentSlot; //select current range
|
|
} else if (start.y < box.y) {
|
|
// the current row is below start row
|
|
// select cells to the right of the start cell
|
|
endIdx = lastSlotIdx;
|
|
} else {
|
|
// select cells to the left of the start cell
|
|
startIdx = 0;
|
|
}
|
|
}
|
|
return {
|
|
startIdx: startIdx,
|
|
endIdx: endIdx
|
|
};
|
|
} |