@atlaskit/editor-plugin-table
Version:
Table plugin for the @atlaskit/editor
126 lines (122 loc) • 5.08 kB
JavaScript
;
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
};
};