From f1df810385acb24cbd80ae4b9504f4012fd532ae Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 14 Apr 2022 15:45:03 +0200 Subject: [PATCH] Refactor PasteComponents --- src/commands/view/PasteComponent.js | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/commands/view/PasteComponent.js b/src/commands/view/PasteComponent.js index 67fcf0f16..8f4cbca6a 100644 --- a/src/commands/view/PasteComponent.js +++ b/src/commands/view/PasteComponent.js @@ -4,25 +4,23 @@ export default { run(ed, s, opts = {}) { const em = ed.getModel(); const clp = em.get('clipboard'); - const selected = ed.getSelected(); + const lastSelected = ed.getSelected(); - if (clp && selected) { - ed.getSelectedAll().forEach(comp => { - if (!comp) return; - - const coll = comp.collection; - if (!coll) return; + if (clp && lastSelected) { + ed.getSelectedAll().forEach(selected => { + const { collection } = selected; + if (!collection) return; let added; - const at = coll.indexOf(comp) + 1; + const at = selected.index() + 1; const addOpts = { at, action: opts.action || 'paste-component' }; - const copyable = clp.filter(cop => cop.get('copyable')); - const pasteable = copyable.filter(cop => ed.Components.canMove(comp.parent(), cop).result); - if (contains(clp, comp) && comp.get('copyable')) { - added = coll.add(comp.clone(), addOpts); + if (contains(clp, selected) && selected.get('copyable')) { + added = collection.add(selected.clone(), addOpts); } else { - added = coll.add( + const copyable = clp.filter(cop => cop.get('copyable')); + const pasteable = copyable.filter(cop => ed.Components.canMove(selected.parent(), cop).result); + added = collection.add( pasteable.map(cop => cop.clone()), addOpts ); @@ -32,7 +30,7 @@ export default { added.forEach(add => ed.trigger('component:paste', add)); }); - selected.emitUpdate(); + lastSelected.emitUpdate(); } }, };