UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

126 lines (122 loc) 5.08 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.unsort = exports.toggleSort = exports.getTableElements = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _types = require("@atlaskit/editor-common/types"); var _utils = require("@atlaskit/editor-common/utils"); var _consts = require("./consts"); var unsort = exports.unsort = function unsort(oldOrder, tableElement) { var tbody = tableElement.querySelector(":scope > tbody"); var rows = tableElement.querySelectorAll(":scope > tbody > tr"); var sortedOrder = (0, _toConsumableArray2.default)(oldOrder).sort(function (a, b) { return a.value - b.value; }); sortedOrder.forEach(function (item) { tbody === null || tbody === void 0 || tbody.appendChild(rows[item.index + 1]); }); }; var getSortOrderFromTable = function getSortOrderFromTable(tableNode, sortIndex, direction) { var tableArray = (0, _utils.convertProsemirrorTableNodeToArrayOfRows)(tableNode); tableArray.shift(); // remove header row // Keep track of the origin row index var tableArrayWithIndex = tableArray.map(function (node, index) { return { node: node, originalIndex: index }; }); var compareNodesInOrder = (0, _utils.createCompareNodes)({ // TODO: ED-26961 - add inline card support getInlineCardTextFromStore: function getInlineCardTextFromStore() { return null; } }, direction); var order = tableArrayWithIndex.sort(function (a, b) { return compareNodesInOrder(a.node[sortIndex], b.node[sortIndex]); }).map(function (tableRow, index) { return { value: tableRow.originalIndex, index: index }; }); return [ // Ensures the first tr is always first in the order { value: -1, index: -1 }].concat((0, _toConsumableArray2.default)(order)); }; var toggleSort = exports.toggleSort = function toggleSort(view, event, pluginState) { var _target$closest, _tableNode$type; var target = event.target; if (!(target instanceof HTMLElement)) { return; } var widget = target.closest(".".concat(_consts.SORTING_ICON_CLASS_NAME)); if (widget !== null && widget !== void 0 && widget.classList.contains(_consts.IS_DISABLED_CLASS_NAME) || !widget) { return; } var dataSortIndex = target === null || target === void 0 || (_target$closest = target.closest('.ProseMirror-widget')) === null || _target$closest === void 0 ? void 0 : _target$closest.getAttribute(_consts.SORT_INDEX_DATA_ATTRIBUTE); var tr = view.state.tr; var tableElement = target.closest('table'); if (!tableElement || !dataSortIndex) { return; } var tablePos = view.posAtDOM(tableElement, 0); var tableNode = view.state.doc.nodeAt(tablePos - 1); var tableId = tableNode === null || tableNode === void 0 ? void 0 : tableNode.attrs.localId; if (!tableId || !tableNode || (tableNode === null || tableNode === void 0 || (_tableNode$type = tableNode.type) === null || _tableNode$type === void 0 ? void 0 : _tableNode$type.name) !== 'table') { return; } // Ignored via go/ees005 // eslint-disable-next-line prefer-const var _ref = (pluginState === null || pluginState === void 0 ? void 0 : pluginState[tableId]) || {}, index = _ref.index, direction = _ref.direction, oldOrder = _ref.order; // Unsort if there was already a sort if (direction !== _types.SortOrder.NO_ORDER && oldOrder !== undefined) { unsort(oldOrder, tableElement); } var sortIndex = parseInt(dataSortIndex); if (sortIndex === index) { switch (direction) { case _types.SortOrder.NO_ORDER: direction = _types.SortOrder.ASC; break; case _types.SortOrder.ASC: direction = _types.SortOrder.DESC; break; case _types.SortOrder.DESC: direction = _types.SortOrder.NO_ORDER; break; } } else { direction = _types.SortOrder.ASC; // default direction when a new index is clicked } var order = getSortOrderFromTable(tableNode, sortIndex, direction); if (direction === _types.SortOrder.NO_ORDER) { tr.setMeta('tableSortMeta', (0, _defineProperty2.default)({}, tableId, {})); } else { tr.setMeta('tableSortMeta', (0, _defineProperty2.default)({}, tableId, { index: sortIndex, direction: direction, order: order, tableElement: tableElement })); } view.dispatch(tr); }; var getTableElements = exports.getTableElements = function getTableElements(tableId) { var tableElement = document.querySelector("table[data-table-local-id=\"".concat(tableId, "\"]")); var tbody = tableElement === null || tableElement === void 0 ? void 0 : tableElement.querySelector(':scope > tbody'); var rows = tableElement === null || tableElement === void 0 ? void 0 : tableElement.querySelectorAll(':scope > tbody > tr'); return { tbody: tbody, rows: rows }; };