UNPKG

@20minutes/draft-convert

Version:

Extensibly serialize & deserialize Draft.js ContentState

80 lines (79 loc) 3.46 kB
"use strict"; 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; };