megadraft
Version:
Rich Text editor built on top of draft.js
123 lines (99 loc) • 4.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.swapDataDown = exports.swapDataUp = void 0;
var _draftJs = require("draft-js");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var swapBlocks = function swapBlocks(_ref) {
var currentKey = _ref.currentKey,
targetKey = _ref.targetKey,
editorState = _ref.editorState;
var contentState = editorState.getCurrentContent();
var selectionState = editorState.getSelection();
var blockMap = contentState.getBlockMap();
var keySeq = blockMap.keySeq();
var getIndex = function getIndex(key) {
return keySeq.findIndex(function (k) {
return k === key;
});
};
var insertBlock = function insertBlock(target, key, val) {
var swapEntries = function swapEntries(map, targetKey, key, val) {
return map.mapEntries(function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
return k === targetKey ? [key, val] : k === key ? [targetKey, map.get(targetKey)] : [k, v];
});
};
var getListItemKeys = function getListItemKeys(startItemKey) {
var listItemKeys = [];
var startIndex = getIndex(startItemKey);
var currentIndex = getIndex(key);
var modifier = currentIndex < startIndex ? 1 : -1;
for (var i = startIndex, itemKey = target; itemKey && blockMap.get(itemKey).get("type").includes("-list-item"); i += modifier, itemKey = keySeq.get(i)) {
listItemKeys.push(itemKey);
}
return listItemKeys;
};
if (target) {
if (val.get("type").includes("-list-item")) {
var temp = key;
key = target;
val = blockMap.get(target);
target = temp;
}
var targets = blockMap.get(target).get("type").includes("-list-item") ? getListItemKeys(target) : [target];
return targets.reduce(function (newBlockMap, targetKey) {
return swapEntries(newBlockMap, targetKey, key, val);
}, blockMap);
}
return blockMap;
};
var newBlocks = insertBlock(targetKey, currentKey, contentState.getBlockForKey(currentKey));
var newContentState = contentState.merge({
blockMap: newBlocks,
selectionAfter: selectionState.merge({
hasFocus: true
})
});
return _draftJs.EditorState.push(editorState, newContentState, "move-block");
};
var swap = function swap(_ref4) {
var getTargetKeyFn = _ref4.getTargetKeyFn,
editorState = _ref4.editorState,
currentKey = _ref4.currentKey;
var contentState = editorState.getCurrentContent();
var targetKey = contentState[getTargetKeyFn](currentKey);
return swapBlocks({
currentKey: currentKey,
targetKey: targetKey,
editorState: editorState
});
};
var swapDataUp = function swapDataUp(_ref5) {
var editorState = _ref5.editorState,
currentKey = _ref5.currentKey;
return swap({
getTargetKeyFn: "getKeyBefore",
editorState: editorState,
currentKey: currentKey
});
};
exports.swapDataUp = swapDataUp;
var swapDataDown = function swapDataDown(_ref6) {
var editorState = _ref6.editorState,
currentKey = _ref6.currentKey;
return swap({
getTargetKeyFn: "getKeyAfter",
editorState: editorState,
currentKey: currentKey
});
};
exports.swapDataDown = swapDataDown;