UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

179 lines (177 loc) 10.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.DragAndDropInsertButton = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _classnames2 = _interopRequireDefault(require("classnames")); var _reactIntlNext = require("react-intl-next"); var _keymaps = require("@atlaskit/editor-common/keymaps"); var _messages = require("@atlaskit/editor-common/messages"); var _styles = require("@atlaskit/editor-common/styles"); var _utils = require("@atlaskit/editor-common/utils"); var _editorSharedStyles = require("@atlaskit/editor-shared-styles"); var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals"); var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip")); var _types = require("../../types"); var _consts = require("../consts"); /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */ var getInsertLineHeight = function getInsertLineHeight(tableRef, hasStickyHeaders, isDragAndDropEnabled) { // The line gets height 100% from the table, // but since we have an overflow on the left, // we should add an offset to make up for it. var LINE_OFFSET = 3; var ADDITIONAL_HEIGHT = hasStickyHeaders ? tableRef.getBoundingClientRect().top - _styles.tableMarginTop * (isDragAndDropEnabled ? 3 : 4) - LINE_OFFSET : _consts.tableToolbarSize + LINE_OFFSET; return tableRef.offsetHeight + ADDITIONAL_HEIGHT; }; var getToolbarSize = function getToolbarSize(tableRef) { var parent = (0, _utils.closestElement)(tableRef, ".".concat(_types.TableCssClassName.TABLE_CONTAINER)); if (parent) { return parent.querySelector(".".concat(_types.TableCssClassName.NUMBERED_COLUMN)) ? _consts.tableToolbarSize + _editorSharedStyles.akEditorTableNumberColumnWidth - 1 : _consts.tableToolbarSize; } return _consts.tableToolbarSize; }; var getNumberColumnWidth = function getNumberColumnWidth(tableRef, isDragAndDropEnabled) { var parent = (0, _utils.closestElement)(tableRef, ".".concat(_types.TableCssClassName.TABLE_CONTAINER)); if (parent && isDragAndDropEnabled) { return parent.querySelector(".".concat(_types.TableCssClassName.NUMBERED_COLUMN)) ? _editorSharedStyles.akEditorTableNumberColumnWidth - 1 : 0; } return 0; }; var getInsertLineWidth = function getInsertLineWidth(tableRef, isDragAndDropEnabled, isChromelessEditor) { // The line gets width 100% from the table, // but since we have an overflow on the left, // we should add an offset to make up for it. var LINE_OFFSET = 4; var DRAG_LINE_OFFSET = isChromelessEditor ? 14 : 6; var parentElement = tableRef.parentElement, offsetWidth = tableRef.offsetWidth; // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var parentOffsetWidth = parentElement.offsetWidth; // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var _ref = parentElement, scrollLeft = _ref.scrollLeft; var diff = offsetWidth - parentOffsetWidth; var toolbarSize = isDragAndDropEnabled ? 0 : getToolbarSize(tableRef); var lineOffset = isDragAndDropEnabled ? DRAG_LINE_OFFSET : LINE_OFFSET; return Math.min(offsetWidth + toolbarSize, parentOffsetWidth + toolbarSize - Math.max(scrollLeft - diff, 0)) + lineOffset + getNumberColumnWidth(tableRef, isDragAndDropEnabled); }; var tooltipMessageByType = function tooltipMessageByType(type) { return type === 'row' ? _messages.tableMessages.insertRow : _messages.tableMessages.insertColumn; }; var InsertButtonForDragAndDrop = function InsertButtonForDragAndDrop(_ref2) { var onMouseDown = _ref2.onMouseDown, tableRef = _ref2.tableRef, type = _ref2.type, formatMessage = _ref2.intl.formatMessage, hasStickyHeaders = _ref2.hasStickyHeaders, isChromelessEditor = _ref2.isChromelessEditor; var isRow = type === 'row'; var content = /*#__PURE__*/_react.default.createElement(_tooltip.default, { content: /*#__PURE__*/_react.default.createElement(_keymaps.ToolTipContent, { description: formatMessage(isRow ? _messages.tableMessages.insertRowDrag : _messages.tableMessages.insertColumnDrag), keymap: isRow ? _keymaps.addRowAfter : _keymaps.addColumnAfter }), position: "top" }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: (0, _classnames2.default)(_types.TableCssClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _types.TableCssClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_ROW, isRow && !isChromelessEditor), _types.TableCssClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_COLUMN, !isRow), _types.TableCssClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_ROW_CHROMELESS, isRow && isChromelessEditor)) }, /*#__PURE__*/_react.default.createElement("button", { type: "button" // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 , className: _types.TableCssClassName.DRAG_CONTROLS_INSERT_BUTTON, onMouseDown: onMouseDown }, /*#__PURE__*/_react.default.createElement("svg", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: _types.TableCssClassName.CONTROLS_BUTTON_ICON, width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react.default.createElement("path", { d: "M8 4C7.44771 4 7 4.44771 7 5V7H5C4.44771 7 4 7.44771 4 8C4 8.55229 4.44771 9 5 9H7V11C7 11.5523 7.44771 12 8 12C8.55229 12 9 11.5523 9 11V9H11C11.5523 9 12 8.55229 12 8C12 7.44771 11.5523 7 11 7H9V5C9 4.44771 8.55229 4 8 4Z", fill: "currentColor" })))), /*#__PURE__*/_react.default.createElement("div", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: _types.TableCssClassName.CONTROLS_INSERT_LINE // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 , style: type === 'row' ? { width: getInsertLineWidth(tableRef, true, isChromelessEditor), left: "var(--ds-space-150, 12px)" } : { height: getInsertLineHeight(tableRef, hasStickyHeaders, true) - 8, // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage/preview top: '-3px' } }))); var floatingButtonClassName = isRow ? _types.TableCssClassName.CONTROLS_FLOATING_BUTTON_ROW : _types.TableCssClassName.CONTROLS_FLOATING_BUTTON_COLUMN; return ( /*#__PURE__*/ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 _react.default.createElement("div", { className: floatingButtonClassName }, /*#__PURE__*/_react.default.createElement("div", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: "".concat(_types.TableCssClassName.DRAG_CONTROLS_INSERT_BUTTON_WRAP, " ").concat(_types.TableCssClassName.CONTROLS_INSERT_ROW) }, content)) ); }; var DragAndDropInsertButton = exports.DragAndDropInsertButton = (0, _reactIntlNext.injectIntl)(InsertButtonForDragAndDrop); var InsertButton = function InsertButton(_ref3) { var onMouseDown = _ref3.onMouseDown, tableRef = _ref3.tableRef, type = _ref3.type, formatMessage = _ref3.intl.formatMessage, hasStickyHeaders = _ref3.hasStickyHeaders; var content = /*#__PURE__*/_react.default.createElement(_tooltip.default, { content: /*#__PURE__*/_react.default.createElement(_keymaps.ToolTipContent, { description: formatMessage(tooltipMessageByType(type)), keymap: type === 'row' ? _keymaps.addRowAfter : _keymaps.addColumnAfter }), position: "top" }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { className: _types.TableCssClassName.CONTROLS_INSERT_BUTTON_INNER }, /*#__PURE__*/_react.default.createElement("button", { type: "button" // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 , className: _types.TableCssClassName.CONTROLS_INSERT_BUTTON, onMouseDown: onMouseDown, "aria-label": (0, _expValEquals.expValEquals)('platform_editor_fix_button_name_violation_in_table', 'isEnabled', true) ? formatMessage(tooltipMessageByType(type)) : undefined }, /*#__PURE__*/_react.default.createElement("svg", { className: _types.TableCssClassName.CONTROLS_BUTTON_ICON }, /*#__PURE__*/_react.default.createElement("path", { d: "M10 4a1 1 0 0 1 1 1v4h4a1 1 0 0 1 0 2h-4v4a1 1 0 0 1-2 0v-4H5a1 1 0 1 1 0-2h4V5a1 1 0 0 1 1-1z", fill: "currentColor", fillRule: "evenodd" })))), /*#__PURE__*/_react.default.createElement("div", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: _types.TableCssClassName.CONTROLS_INSERT_LINE // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 , style: type === 'row' ? { width: getInsertLineWidth(tableRef) } : { height: getInsertLineHeight(tableRef, hasStickyHeaders) } }))); var floatingButtonClassName = type === 'column' ? _types.TableCssClassName.CONTROLS_FLOATING_BUTTON_COLUMN : _types.TableCssClassName.CONTROLS_FLOATING_BUTTON_ROW; return ( /*#__PURE__*/ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 _react.default.createElement("div", { className: floatingButtonClassName }, /*#__PURE__*/_react.default.createElement("div", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: "".concat(_types.TableCssClassName.CONTROLS_INSERT_BUTTON_WRAP, " ").concat(_types.TableCssClassName.CONTROLS_INSERT_ROW) }, content)) ); }; var _default = exports.default = (0, _reactIntlNext.injectIntl)(InsertButton);