@atlaskit/editor-plugin-table
Version:
Table plugin for the @atlaskit/editor
231 lines (229 loc) • 16.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ContentComponent = void 0;
var _react = _interopRequireDefault(require("react"));
var _analytics = require("@atlaskit/editor-common/analytics");
var _errorBoundary = require("@atlaskit/editor-common/error-boundary");
var _getDomRefFromSelection = require("@atlaskit/editor-common/get-dom-ref-from-selection");
var _hooks = require("@atlaskit/editor-common/hooks");
var _resizer = require("@atlaskit/editor-common/resizer");
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
var _FloatingContextualButton = _interopRequireDefault(require("./FloatingContextualButton"));
var _FloatingContextualMenu = _interopRequireDefault(require("./FloatingContextualMenu"));
var _FloatingDeleteButton = _interopRequireDefault(require("./FloatingDeleteButton"));
var _FloatingDragMenu = _interopRequireDefault(require("./FloatingDragMenu"));
var _FloatingInsertButton = _interopRequireDefault(require("./FloatingInsertButton"));
var _FloatingToolbarLabel = require("./FloatingToolbarLabel/FloatingToolbarLabel");
var _globalStyles = require("./global-styles");
var _SizeSelector = require("./SizeSelector");
var _TableFullWidthLabel = require("./TableFullWidthLabel");
// Ignored via go/ees005
// eslint-disable-next-line import/no-named-as-default
var selector = function selector(states) {
var _states$tableState, _states$tableState2, _states$tableState3, _states$tableState4, _states$tableState5, _states$tableState6, _states$tableState7, _states$tableState8, _states$tableState9, _states$tableState0, _states$tableState1, _states$tableState10, _states$tableState11, _states$tableState12, _states$tableState13, _states$tableState14, _states$tableState15, _states$tableState16, _states$tableState17, _states$tableState18, _states$tableState19, _states$tableState20, _states$tableState21, _states$tableState22, _states$tableState23, _states$tableState24;
return {
resizingTableLocalId: (_states$tableState = states.tableState) === null || _states$tableState === void 0 ? void 0 : _states$tableState.resizingTableLocalId,
resizingTableRef: (_states$tableState2 = states.tableState) === null || _states$tableState2 === void 0 ? void 0 : _states$tableState2.resizingTableRef,
isTableResizing: (_states$tableState3 = states.tableState) === null || _states$tableState3 === void 0 ? void 0 : _states$tableState3.isTableResizing,
isResizing: (_states$tableState4 = states.tableState) === null || _states$tableState4 === void 0 ? void 0 : _states$tableState4.isResizing,
widthToWidest: (_states$tableState5 = states.tableState) === null || _states$tableState5 === void 0 ? void 0 : _states$tableState5.widthToWidest,
tableNode: (_states$tableState6 = states.tableState) === null || _states$tableState6 === void 0 ? void 0 : _states$tableState6.tableNode,
targetCellPosition: (_states$tableState7 = states.tableState) === null || _states$tableState7 === void 0 ? void 0 : _states$tableState7.targetCellPosition,
isContextualMenuOpen: (_states$tableState8 = states.tableState) === null || _states$tableState8 === void 0 ? void 0 : _states$tableState8.isContextualMenuOpen,
tableRef: (_states$tableState9 = states.tableState) === null || _states$tableState9 === void 0 ? void 0 : _states$tableState9.tableRef,
pluginConfig: (_states$tableState0 = states.tableState) === null || _states$tableState0 === void 0 ? void 0 : _states$tableState0.pluginConfig,
insertColumnButtonIndex: (_states$tableState1 = states.tableState) === null || _states$tableState1 === void 0 ? void 0 : _states$tableState1.insertColumnButtonIndex,
insertRowButtonIndex: (_states$tableState10 = states.tableState) === null || _states$tableState10 === void 0 ? void 0 : _states$tableState10.insertRowButtonIndex,
isHeaderColumnEnabled: (_states$tableState11 = states.tableState) === null || _states$tableState11 === void 0 ? void 0 : _states$tableState11.isHeaderColumnEnabled,
isHeaderRowEnabled: (_states$tableState12 = states.tableState) === null || _states$tableState12 === void 0 ? void 0 : _states$tableState12.isHeaderRowEnabled,
isDragAndDropEnabled: (_states$tableState13 = states.tableState) === null || _states$tableState13 === void 0 ? void 0 : _states$tableState13.isDragAndDropEnabled,
tableWrapperTarget: (_states$tableState14 = states.tableState) === null || _states$tableState14 === void 0 ? void 0 : _states$tableState14.tableWrapperTarget,
isCellMenuOpenByKeyboard: (_states$tableState15 = states.tableState) === null || _states$tableState15 === void 0 ? void 0 : _states$tableState15.isCellMenuOpenByKeyboard,
stickyHeader: (_states$tableState16 = states.tableState) === null || _states$tableState16 === void 0 ? void 0 : _states$tableState16.stickyHeader,
dragMenuDirection: (_states$tableState17 = states.tableState) === null || _states$tableState17 === void 0 ? void 0 : _states$tableState17.dragMenuDirection,
dragMenuIndex: (_states$tableState18 = states.tableState) === null || _states$tableState18 === void 0 ? void 0 : _states$tableState18.dragMenuIndex,
isDragMenuOpen: (_states$tableState19 = states.tableState) === null || _states$tableState19 === void 0 ? void 0 : _states$tableState19.isDragMenuOpen,
isSizeSelectorOpen: (_states$tableState20 = states.tableState) === null || _states$tableState20 === void 0 ? void 0 : _states$tableState20.isSizeSelectorOpen,
sizeSelectorTargetRef: (_states$tableState21 = states.tableState) === null || _states$tableState21 === void 0 ? void 0 : _states$tableState21.sizeSelectorTargetRef,
// IMPORTANT: hovered states are used by FloatingDragMenu component to render popup in the correct location
hoveredRows: (_states$tableState22 = states.tableState) === null || _states$tableState22 === void 0 ? void 0 : _states$tableState22.hoveredRows,
hoveredColumns: (_states$tableState23 = states.tableState) === null || _states$tableState23 === void 0 ? void 0 : _states$tableState23.hoveredColumns,
hoveredCell: (_states$tableState24 = states.tableState) === null || _states$tableState24 === void 0 ? void 0 : _states$tableState24.hoveredCell
};
};
var ContentComponentInternal = function ContentComponentInternal(_ref) {
var _api$analytics, _api$accessibilityUti, _api$analytics2;
var api = _ref.api,
editorView = _ref.editorView,
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
options = _ref.options,
popupsMountPoint = _ref.popupsMountPoint,
popupsBoundariesElement = _ref.popupsBoundariesElement,
popupsScrollableElement = _ref.popupsScrollableElement,
isTableSelectorEnabled = _ref.isTableSelectorEnabled,
defaultGetEditorContainerWidth = _ref.defaultGetEditorContainerWidth,
defaultGetEditorFeatureFlags = _ref.defaultGetEditorFeatureFlags;
var editorAnalyticsAPI = api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions;
var ariaNotifyPlugin = api === null || api === void 0 || (_api$accessibilityUti = api.accessibilityUtils) === null || _api$accessibilityUti === void 0 ? void 0 : _api$accessibilityUti.actions.ariaNotify;
var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['table'], selector),
resizingTableLocalId = _useSharedPluginState.resizingTableLocalId,
resizingTableRef = _useSharedPluginState.resizingTableRef,
isTableResizing = _useSharedPluginState.isTableResizing,
isResizing = _useSharedPluginState.isResizing,
widthToWidest = _useSharedPluginState.widthToWidest,
tableNode = _useSharedPluginState.tableNode,
targetCellPosition = _useSharedPluginState.targetCellPosition,
isContextualMenuOpen = _useSharedPluginState.isContextualMenuOpen,
tableRef = _useSharedPluginState.tableRef,
pluginConfig = _useSharedPluginState.pluginConfig,
insertColumnButtonIndex = _useSharedPluginState.insertColumnButtonIndex,
insertRowButtonIndex = _useSharedPluginState.insertRowButtonIndex,
isHeaderColumnEnabled = _useSharedPluginState.isHeaderColumnEnabled,
isHeaderRowEnabled = _useSharedPluginState.isHeaderRowEnabled,
isDragAndDropEnabled = _useSharedPluginState.isDragAndDropEnabled,
tableWrapperTarget = _useSharedPluginState.tableWrapperTarget,
isCellMenuOpenByKeyboard = _useSharedPluginState.isCellMenuOpenByKeyboard,
stickyHeader = _useSharedPluginState.stickyHeader,
dragMenuDirection = _useSharedPluginState.dragMenuDirection,
dragMenuIndex = _useSharedPluginState.dragMenuIndex,
isDragMenuOpen = _useSharedPluginState.isDragMenuOpen,
isSizeSelectorOpen = _useSharedPluginState.isSizeSelectorOpen,
sizeSelectorTargetRef = _useSharedPluginState.sizeSelectorTargetRef;
var _ref2 = pluginConfig !== null && pluginConfig !== void 0 ? pluginConfig : {},
allowControls = _ref2.allowControls;
if (!editorView) {
return null;
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, targetCellPosition && (tableRef || isCellMenuOpenByKeyboard) && !isResizing && options && options.allowContextualMenu && /*#__PURE__*/_react.default.createElement(_FloatingContextualButton.default, {
isNumberColumnEnabled: tableNode && tableNode.attrs.isNumberColumnEnabled,
editorView: editorView,
tableNode: tableNode,
mountPoint: popupsMountPoint,
targetCellPosition: targetCellPosition,
scrollableElement: popupsScrollableElement,
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
isContextualMenuOpen: isContextualMenuOpen,
stickyHeader: stickyHeader,
tableWrapper: tableWrapperTarget,
isCellMenuOpenByKeyboard: isCellMenuOpenByKeyboard
}), allowControls && /*#__PURE__*/_react.default.createElement(_FloatingInsertButton.default, {
tableNode: tableNode,
tableRef: tableRef,
insertColumnButtonIndex: insertColumnButtonIndex,
insertRowButtonIndex: insertRowButtonIndex,
isHeaderColumnEnabled: isHeaderColumnEnabled,
isHeaderRowEnabled: isHeaderRowEnabled,
isDragAndDropEnabled: isDragAndDropEnabled,
isTableScalingEnabled: options === null || options === void 0 ? void 0 : options.isTableScalingEnabled,
editorView: editorView,
mountPoint: popupsMountPoint,
boundariesElement: popupsBoundariesElement,
scrollableElement: popupsScrollableElement,
hasStickyHeaders: stickyHeader && stickyHeader.sticky,
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
editorAnalyticsAPI: editorAnalyticsAPI,
getEditorContainerWidth: defaultGetEditorContainerWidth,
getEditorFeatureFlags: (options === null || options === void 0 ? void 0 : options.getEditorFeatureFlags) || defaultGetEditorFeatureFlags,
isChromelessEditor: options === null || options === void 0 ? void 0 : options.isChromelessEditor,
api: api,
isCommentEditor: options === null || options === void 0 ? void 0 : options.isCommentEditor
}), (options === null || options === void 0 ? void 0 : options.allowContextualMenu) && /*#__PURE__*/_react.default.createElement(_FloatingContextualMenu.default, {
editorView: editorView,
mountPoint: popupsMountPoint,
boundariesElement: popupsBoundariesElement,
targetCellPosition: targetCellPosition,
isOpen: Boolean(isContextualMenuOpen) && !isResizing,
pluginConfig: pluginConfig,
editorAnalyticsAPI: editorAnalyticsAPI,
getEditorContainerWidth: defaultGetEditorContainerWidth,
getEditorFeatureFlags: (options === null || options === void 0 ? void 0 : options.getEditorFeatureFlags) || defaultGetEditorFeatureFlags,
isCellMenuOpenByKeyboard: isCellMenuOpenByKeyboard,
isCommentEditor: options === null || options === void 0 ? void 0 : options.isCommentEditor,
api: api
}), isDragAndDropEnabled && /*#__PURE__*/_react.default.createElement(_FloatingDragMenu.default, {
editorView: editorView,
mountPoint: popupsMountPoint,
boundariesElement: popupsBoundariesElement,
tableRef: tableRef,
tableNode: tableNode,
targetCellPosition: targetCellPosition,
direction: dragMenuDirection,
index: dragMenuIndex,
isOpen: !!isDragMenuOpen && !isResizing,
getEditorContainerWidth: defaultGetEditorContainerWidth,
editorAnalyticsAPI: editorAnalyticsAPI,
stickyHeaders: stickyHeader,
pluginConfig: pluginConfig,
isTableScalingEnabled: options === null || options === void 0 ? void 0 : options.isTableScalingEnabled,
getEditorFeatureFlags: (options === null || options === void 0 ? void 0 : options.getEditorFeatureFlags) || defaultGetEditorFeatureFlags,
ariaNotifyPlugin: ariaNotifyPlugin,
api: api,
isCommentEditor: options === null || options === void 0 ? void 0 : options.isCommentEditor
}), allowControls && !isDragAndDropEnabled && !isResizing && /*#__PURE__*/_react.default.createElement(_FloatingDeleteButton.default, {
editorView: editorView,
selection: editorView.state.selection,
tableRef: tableRef,
mountPoint: popupsMountPoint,
boundariesElement: popupsBoundariesElement,
scrollableElement: popupsScrollableElement,
stickyHeaders: stickyHeader,
isNumberColumnEnabled: tableNode && tableNode.attrs.isNumberColumnEnabled,
editorAnalyticsAPI: editorAnalyticsAPI,
api: api
}), ((options === null || options === void 0 ? void 0 : options.isTableScalingEnabled) || (options === null || options === void 0 ? void 0 : options.tableOptions.allowTableResizing) && options.isCommentEditor) && isTableResizing && widthToWidest && resizingTableLocalId && resizingTableRef && widthToWidest[resizingTableLocalId] && /*#__PURE__*/_react.default.createElement(_FloatingToolbarLabel.FloatingToolbarLabel, {
target: resizingTableRef,
content: (0, _experiments.editorExperiment)('single_column_layouts', true) ? /*#__PURE__*/_react.default.createElement(_resizer.ResizerBreakoutModeLabel, {
layout: "full-width"
}) : /*#__PURE__*/_react.default.createElement(_TableFullWidthLabel.FullWidthDisplay, null),
alignX: 'center',
alignY: 'bottom',
stick: true,
forcePlacement: true,
zIndex: _editorSharedStyles.akEditorFloatingPanelZIndex,
offset: [0, 10]
}), isTableSelectorEnabled && isSizeSelectorOpen && /*#__PURE__*/_react.default.createElement(_SizeSelector.SizeSelector, {
api: api,
isOpenedByKeyboard: false,
popupsMountPoint: popupsMountPoint,
target: sizeSelectorTargetRef !== null && sizeSelectorTargetRef !== void 0 ? sizeSelectorTargetRef : (0, _getDomRefFromSelection.getDomRefFromSelection)(editorView, _analytics.ACTION_SUBJECT_ID.PICKER_TABLE_SIZE, api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions),
popupsBoundariesElement: popupsBoundariesElement,
popupsScrollableElement: popupsScrollableElement
}));
};
var ContentComponent = exports.ContentComponent = function ContentComponent(_ref3) {
var _api$featureFlags;
var api = _ref3.api,
editorView = _ref3.editorView,
dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent,
options = _ref3.options,
popupsMountPoint = _ref3.popupsMountPoint,
popupsBoundariesElement = _ref3.popupsBoundariesElement,
popupsScrollableElement = _ref3.popupsScrollableElement,
isTableSelectorEnabled = _ref3.isTableSelectorEnabled,
defaultGetEditorContainerWidth = _ref3.defaultGetEditorContainerWidth,
defaultGetEditorFeatureFlags = _ref3.defaultGetEditorFeatureFlags;
return /*#__PURE__*/_react.default.createElement(_errorBoundary.ErrorBoundary, {
component: _analytics.ACTION_SUBJECT.TABLES_PLUGIN,
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
fallbackComponent: null
}, /*#__PURE__*/_react.default.createElement(_globalStyles.GlobalStylesWrapper, {
featureFlags: api === null || api === void 0 || (_api$featureFlags = api.featureFlags) === null || _api$featureFlags === void 0 ? void 0 : _api$featureFlags.sharedState.currentState(),
isDragAndDropEnabledOption: options === null || options === void 0 ? void 0 : options.dragAndDropEnabled,
api: api
}), /*#__PURE__*/_react.default.createElement(ContentComponentInternal, {
api: api,
editorView: editorView,
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
options: options,
popupsMountPoint: popupsMountPoint,
popupsBoundariesElement: popupsBoundariesElement,
popupsScrollableElement: popupsScrollableElement,
isTableSelectorEnabled: isTableSelectorEnabled,
defaultGetEditorContainerWidth: defaultGetEditorContainerWidth,
defaultGetEditorFeatureFlags: defaultGetEditorFeatureFlags
}));
};