UNPKG

@light-sheet/react

Version:

FortuneSheet is a drop-in javascript spreadsheet library that provides rich features like Excel and Google Sheets

249 lines 10.9 kB
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } import { locale, deleteSheet, api } from "@light-sheet/core"; import _ from "lodash"; import React, { useContext, useRef, useState, useLayoutEffect, useCallback } from "react"; import WorkbookContext from "../../context"; import { useAlert } from "../../hooks/useAlert"; import { useOutsideClick } from "../../hooks/useOutsideClick"; import { ChangeColor } from "../ChangeColor"; import SVGIcon from "../SVGIcon"; import Divider from "./Divider"; import "./index.css"; import Menu from "./Menu"; var SheetTabContextMenu = function SheetTabContextMenu() { var _settings$sheetTabCon; var _useContext = useContext(WorkbookContext), context = _useContext.context, setContext = _useContext.setContext, settings = _useContext.settings; var _context$sheetTabCont = context.sheetTabContextMenu, x = _context$sheetTabCont.x, y = _context$sheetTabCont.y, sheet = _context$sheetTabCont.sheet, onRename = _context$sheetTabCont.onRename; var _locale = locale(context), sheetconfig = _locale.sheetconfig; var _useState = useState({ x: -1, y: -1 }), _useState2 = _slicedToArray(_useState, 2), position = _useState2[0], setPosition = _useState2[1]; var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), isShowChangeColor = _useState4[0], setIsShowChangeColor = _useState4[1]; var _useState5 = useState(false), _useState6 = _slicedToArray(_useState5, 2), isShowInputColor = _useState6[0], setIsShowInputColor = _useState6[1]; var _useAlert = useAlert(), showAlert = _useAlert.showAlert, hideAlert = _useAlert.hideAlert; var containerRef = useRef(null); var close = useCallback(function () { setContext(function (ctx) { ctx.sheetTabContextMenu = {}; }); }, [setContext]); useLayoutEffect(function () { var _containerRef$current; var rect = (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.getBoundingClientRect(); if (rect && x != null && y != null) { setPosition({ x: x, y: y - rect.height }); } }, [x, y]); useOutsideClick(containerRef, close, [close]); var moveSheet = useCallback(function (delta) { if (context.allowEdit === false) return; if (!sheet) return; setContext(function (ctx) { var currentOrder = -1; _.sortBy(ctx.luckysheetfile, ["order"]).forEach(function (_sheet, i) { _sheet.order = i; if (_sheet.id === sheet.id) { currentOrder = i; } }); api.setSheetOrder(ctx, _defineProperty({}, sheet.id, currentOrder + delta)); }); }, [context.allowEdit, setContext, sheet]); var hideSheet = useCallback(function () { if (context.allowEdit === false) return; if (!sheet) return; setContext(function (ctx) { var shownSheets = ctx.luckysheetfile.filter(function (oneSheet) { return _.isUndefined(oneSheet.hide) || (oneSheet === null || oneSheet === void 0 ? void 0 : oneSheet.hide) !== 1; }); if (shownSheets.length > 1) { api.hideSheet(ctx, sheet.id); } else { showAlert(sheetconfig.noMoreSheet, "ok"); } }); }, [context.allowEdit, setContext, sheet, showAlert, sheetconfig]); var copySheet = useCallback(function () { if (context.allowEdit === false) return; if (!(sheet !== null && sheet !== void 0 && sheet.id)) return; setContext(function (ctx) { api.copySheet(ctx, sheet.id); }, { addSheetOp: true }); }, [context.allowEdit, setContext, sheet === null || sheet === void 0 ? void 0 : sheet.id]); var updateShowInputColor = useCallback(function (state) { setIsShowInputColor(state); }, []); var focusSheet = useCallback(function () { if (context.allowEdit === false) return; if (!(sheet !== null && sheet !== void 0 && sheet.id)) return; setContext(function (ctx) { _.forEach(ctx.luckysheetfile, function (sheetfile) { sheetfile.status = sheet.id === sheetfile.id ? 1 : 0; }); }); }, [context.allowEdit, setContext, sheet === null || sheet === void 0 ? void 0 : sheet.id]); if (!sheet || x == null || y == null) return null; return /*#__PURE__*/React.createElement("div", { className: "fortune-context-menu luckysheet-cols-menu", onContextMenu: function onContextMenu(e) { return e.stopPropagation(); }, style: { left: position.x, top: position.y, overflow: "visible" }, ref: containerRef }, (_settings$sheetTabCon = settings.sheetTabContextMenu) === null || _settings$sheetTabCon === void 0 ? void 0 : _settings$sheetTabCon.map(function (cellItem, i) { if (Array.isArray(cellItem)) { return cellItem.map(function (item) { return /*#__PURE__*/React.createElement(Menu, { key: item.label, onClick: function onClick() { item.onClick(); setContext(function (draftCtx) { draftCtx.contextMenu = {}; }); } }, item.label); }); } if (cellItem === "delete") { return /*#__PURE__*/React.createElement(Menu, { key: cellItem, onClick: function onClick() { var shownSheets = context.luckysheetfile.filter(function (singleSheet) { return _.isUndefined(singleSheet.hide) || singleSheet.hide !== 1; }); if (context.luckysheetfile.length > 1 && shownSheets.length > 1) { showAlert(sheetconfig.confirmDelete, "yesno", function () { setContext(function (ctx) { deleteSheet(ctx, sheet.id); }, { deleteSheetOp: { id: sheet.id } }); hideAlert(); }); } else { showAlert(sheetconfig.noMoreSheet, "ok"); } close(); } }, sheetconfig.delete); } if (cellItem === "rename") { return /*#__PURE__*/React.createElement(Menu, { key: cellItem, onClick: function onClick() { onRename === null || onRename === void 0 || onRename(); close(); } }, sheetconfig.rename); } if (cellItem === "move") { return /*#__PURE__*/React.createElement(React.Fragment, { key: cellItem }, /*#__PURE__*/React.createElement(Menu, { onClick: function onClick() { moveSheet(-1.5); close(); } }, sheetconfig.moveLeft), /*#__PURE__*/React.createElement(Menu, { onClick: function onClick() { moveSheet(1.5); close(); } }, sheetconfig.moveRight)); } if (cellItem === "hide") { return /*#__PURE__*/React.createElement(Menu, { key: cellItem, onClick: function onClick() { hideSheet(); close(); } }, sheetconfig.hide); } if (cellItem === "copy") { return /*#__PURE__*/React.createElement(Menu, { key: cellItem, onClick: function onClick() { copySheet(); close(); } }, sheetconfig.copy); } if (cellItem === "color") { return /*#__PURE__*/React.createElement(Menu, { key: cellItem, onMouseEnter: function onMouseEnter() { setIsShowChangeColor(true); }, onMouseLeave: function onMouseLeave() { if (!isShowInputColor) { setIsShowChangeColor(false); } } }, sheetconfig.changeColor, /*#__PURE__*/React.createElement("span", { className: "change-color-triangle" }, /*#__PURE__*/React.createElement(SVGIcon, { name: "rightArrow", width: 18 })), isShowChangeColor && context.allowEdit && /*#__PURE__*/React.createElement(ChangeColor, { triggerParentUpdate: updateShowInputColor })); } if (cellItem === "focus") { return /*#__PURE__*/React.createElement(Menu, { key: cellItem, onClick: function onClick() { focusSheet(); close(); } }, sheetconfig.focus); } if (cellItem === "|") { return /*#__PURE__*/React.createElement(Divider, { key: "divide-".concat(i) }); } return null; })); }; export default SheetTabContextMenu;