@20minutes/draft-convert
Version:
Extensibly serialize & deserialize Draft.js ContentState
80 lines (79 loc) • 3.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _getElementHTML = /*#__PURE__*/ _interop_require_default(require("./util/getElementHTML.js"));
const _getElementTagLength = /*#__PURE__*/ _interop_require_default(require("./util/getElementTagLength.js"));
const _rangeSort = /*#__PURE__*/ _interop_require_default(require("./util/rangeSort.js"));
const _updateMutation = /*#__PURE__*/ _interop_require_default(require("./util/updateMutation.js"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
const converter = (_entity = {}, originalText = '')=>originalText;
const _default = (block, entityMap, entityConverter = converter)=>{
let resultText = [
...block.text
];
let getEntityHTML = entityConverter;
if (entityConverter.__isMiddleware) {
getEntityHTML = entityConverter(converter);
}
if (Object.hasOwn(block, 'entityRanges') && block.entityRanges.length > 0) {
let entities = block.entityRanges.sort(_rangeSort.default);
let styles = block.inlineStyleRanges;
for(let index = 0; index < entities.length; index += 1){
const entityRange = entities[index];
const entity = entityMap[entityRange.key];
const originalText = resultText.slice(entityRange.offset, entityRange.offset + entityRange.length).join('');
const entityHTML = getEntityHTML(entity, originalText);
const elementHTML = (0, _getElementHTML.default)(entityHTML, originalText);
let converted;
if (elementHTML || elementHTML === '') {
converted = [
...elementHTML
];
} else {
converted = originalText;
}
const prefixLength = (0, _getElementTagLength.default)(entityHTML, 'start');
const suffixLength = (0, _getElementTagLength.default)(entityHTML, 'end');
const updateLaterMutation = (mutation, mutationIndex)=>{
if (mutationIndex > index || Object.hasOwn(mutation, 'style')) {
return (0, _updateMutation.default)(mutation, entityRange.offset, entityRange.length, converted.length, prefixLength, suffixLength);
}
return mutation;
};
const updateLaterMutations = (mutationList)=>mutationList.reduce((acc, mutation, mutationIndex)=>{
const updatedMutation = updateLaterMutation(mutation, mutationIndex);
if (Array.isArray(updatedMutation)) {
return acc.concat(updatedMutation);
}
return acc.concat([
updatedMutation
]);
}, []);
entities = updateLaterMutations(entities);
styles = updateLaterMutations(styles);
resultText = [
...resultText.slice(0, entityRange.offset),
...converted,
...resultText.slice(entityRange.offset + entityRange.length)
];
}
return {
...block,
text: resultText.join(''),
inlineStyleRanges: styles,
entityRanges: entities
};
}
return block;
};