UNPKG

react-spreadsheet

Version:

Simple, customizable yet performant spreadsheet for React

98 lines (88 loc) 3.08 kB
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); };