@atlaskit/editor-plugin-table
Version:
Table plugin for the @atlaskit/editor
115 lines (114 loc) • 5.86 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _adapter = require("@atlaskit/pragmatic-drag-and-drop/element/adapter");
var _columnControls = require("../../pm-plugins/utils/column-controls");
var _nodes = require("../../pm-plugins/utils/nodes");
var _rowControls = require("../../pm-plugins/utils/row-controls");
var _types = require("../../types");
var _ColumnControls = require("./ColumnControls");
var _ColumnDropTargets = require("./ColumnDropTargets");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var TableFloatingColumnControls = function TableFloatingColumnControls(_ref) {
var editorView = _ref.editorView,
tableRef = _ref.tableRef,
getNode = _ref.getNode,
tableActive = _ref.tableActive,
hasHeaderRow = _ref.hasHeaderRow,
hoveredCell = _ref.hoveredCell,
isResizing = _ref.isResizing,
stickyHeader = _ref.stickyHeader,
selection = _ref.selection,
isInDanger = _ref.isInDanger,
isTableHovered = _ref.isTableHovered,
tableContainerWidth = _ref.tableContainerWidth,
isNumberColumnEnabled = _ref.isNumberColumnEnabled,
getScrollOffset = _ref.getScrollOffset,
tableWrapperHeight = _ref.tableWrapperHeight,
api = _ref.api,
isChromelessEditor = _ref.isChromelessEditor;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isDragging = _useState2[0],
setIsDragging = _useState2[1];
var containerRef = (0, _react.useRef)(null);
var node = getNode();
var currentNodeLocalId = node === null || node === void 0 ? void 0 : node.attrs.localId;
var hasHeaderColumn = (0, _nodes.containsHeaderColumn)(node);
var stickyTop = stickyHeader && stickyHeader.sticky && hasHeaderRow ? stickyHeader.top : undefined;
(0, _react.useEffect)(function () {
return (0, _adapter.monitorForElements)({
canMonitor: function canMonitor(_ref2) {
var source = _ref2.source;
var _ref3 = source.data,
type = _ref3.type,
localId = _ref3.localId,
indexes = _ref3.indexes;
return type === 'table-column' && !!(indexes !== null && indexes !== void 0 && indexes.length) && localId === currentNodeLocalId;
},
onDragStart: function onDragStart() {
setIsDragging(true);
},
onDrop: function onDrop() {
setIsDragging(false);
}
});
}, [editorView, currentNodeLocalId]);
var rowHeights = (0, _react.useMemo)(function () {
// NOTE: we don't care so much as to what tableHeight is, we only care that it changed and is a sane value.
if (tableRef && !!tableWrapperHeight) {
return (0, _rowControls.getRowHeights)(tableRef);
}
return [0];
}, [tableRef, tableWrapperHeight]);
if (!tableRef || !tableActive || isResizing) {
return null;
}
var colWidths = (0, _columnControls.getColumnsWidths)(editorView);
if (stickyTop) {
var _containerRef$current;
var columnControlTopOffsetFromParent = '-12px';
containerRef === null || containerRef === void 0 || (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 || _containerRef$current.style.setProperty('top', columnControlTopOffsetFromParent);
} else {
var _containerRef$current2;
containerRef === null || containerRef === void 0 || (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 || _containerRef$current2.style.removeProperty('top');
}
return /*#__PURE__*/_react.default.createElement("div", {
ref: containerRef
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
,
className: _types.TableCssClassName.DRAG_COLUMN_CONTROLS_WRAPPER + (isChromelessEditor ? ' ' + _types.TableCssClassName.TABLE_CHROMELESS : ''),
"data-testid": "table-floating-column-controls-wrapper"
}, /*#__PURE__*/_react.default.createElement(_ColumnControls.ColumnControls, {
editorView: editorView,
hoveredCell: hoveredCell,
tableRef: tableRef,
tableActive: tableActive,
isTableHovered: isTableHovered,
stickyTop: tableActive ? stickyTop : undefined,
localId: currentNodeLocalId,
isInDanger: isInDanger,
rowHeights: rowHeights,
colWidths: colWidths,
hasHeaderColumn: hasHeaderColumn,
tableContainerWidth: tableContainerWidth,
isNumberColumnEnabled: isNumberColumnEnabled,
isDragging: isDragging,
getScrollOffset: getScrollOffset,
api: api
}), isDragging && /*#__PURE__*/_react.default.createElement(_ColumnDropTargets.ColumnDropTargets, {
tableRef: tableRef,
isHeaderSticky: (stickyHeader === null || stickyHeader === void 0 ? void 0 : stickyHeader.sticky) && hasHeaderRow,
tableHeight: tableWrapperHeight,
localId: currentNodeLocalId,
colWidths: colWidths,
getScrollOffset: getScrollOffset
}));
};
var _default = exports.default = TableFloatingColumnControls;