Browse Source

Bugfix/5650 inserting text uses model data not current view (#5651)

* #5650 - Fix inserting component using text from the view rather than the model

* #5650 - Updated code to be better based on PR feedback

* #5650 - Made the content replacement controlled by property on the options object

---------

Co-authored-by: Wayne Mather <wayne_mather@technologyonecorp.com>
pull/5694/head
Wayne Mather 2 years ago
committed by GitHub
parent
commit
9ee52e62cb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 9
      src/dom_components/view/ComponentTextView.ts

9
src/dom_components/view/ComponentTextView.ts

@ -171,7 +171,7 @@ export default class ComponentTextView extends ComponentView<ComponentText> {
}
}
insertComponent(content: ComponentDefinition, opts = {}) {
insertComponent(content: ComponentDefinition, opts: any = {}) {
const { model, el } = this;
const doc = el.ownerDocument;
const selection = doc.getSelection();
@ -182,13 +182,16 @@ export default class ComponentTextView extends ComponentView<ComponentText> {
const offset = range.startOffset;
const textModel = getComponentModel(textNode);
const newCmps: (ComponentDefinition | Component)[] = [];
const data = textNode.textContent || '';
if (textModel && textModel.is?.('textnode')) {
const cmps = textModel.collection;
cmps.forEach(cmp => {
if (cmp === textModel) {
const type = 'textnode';
const cnt = cmp.content;
let cnt = cmp.content;
if ('useDomContent' in opts && opts.useDomContent) {
cnt = data || cmp.content;
}
newCmps.push({ type, content: cnt.slice(0, offset) });
newCmps.push(content);
newCmps.push({ type, content: cnt.slice(offset) });

Loading…
Cancel
Save