react-spreadsheet
Version:
Simple, customizable yet performant spreadsheet for React
98 lines (88 loc) • 3.08 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import * as Types from "./types";
export var moveCursorToEnd = function moveCursorToEnd(el) {
el.selectionStart = el.selectionEnd = el.value.length;
};
export function memoizeOne(fn) {
var lastArgument;
var lastResult;
return function (argument) {
if (lastArgument !== argument) {
lastArgument = argument;
lastResult = fn.call(this, argument);
}
return lastResult;
};
}
/**
* Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end. A step of -1 is used if a negative start is specified without an end or step. If end is not specified, it's set to start with start then set to 0.
* @param end
* @param start
* @param step
*/
export function range(end) {
var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
var array = [];
if (Math.sign(end - start) === -1) {
for (var element = start; element > end; element -= step) {
array.push(element);
}
return array;
}
for (var _element = start; _element < end; _element += step) {
array.push(_element);
}
return array;
}
export function updateData(data, cellDescriptor) {
var row = data[cellDescriptor.row];
var nextData = _toConsumableArray(data);
var nextRow = row ? _toConsumableArray(row) : [];
nextRow[cellDescriptor.column] = cellDescriptor.data;
nextData[cellDescriptor.row] = nextRow;
return nextData;
}
export function setCell(state, active, cell) {
return updateData(state.data, _objectSpread({}, active, {
data: cell
}));
}
export function isActive(active, _ref) {
var row = _ref.row,
column = _ref.column;
return Boolean(active && column === active.column && row === active.row);
}
export var getOffsetRect = function getOffsetRect(element) {
return {
width: element.offsetWidth,
height: element.offsetHeight,
left: element.offsetLeft,
top: element.offsetTop
};
};
export var writeTextToClipboard = function writeTextToClipboard(event, data) {
if (event.clipboardData) {
event.clipboardData.setData("text/plain", data);
}
};
export var readTextFromClipboard = function readTextFromClipboard(event) {
if (window.clipboardData && window.clipboardData.getData) {
return window.clipboardData.getData("Text");
}
if (event.clipboardData && event.clipboardData.getData) {
return event.clipboardData.getData("text/plain");
}
return "";
};
export function createEmptyMatrix(rows, columns) {
return range(rows).map(function () {
return Array(columns);
});
}
export var getCellDimensions = function getCellDimensions(point, state) {
var rowDimensions = state.rowDimensions[point.row];
var columnDimensions = state.columnDimensions[point.column];
return rowDimensions && columnDimensions && _objectSpread({}, rowDimensions, {}, columnDimensions);
};