From a108865897e3356f7cd490478de7c726a27c585d Mon Sep 17 00:00:00 2001 From: irmerk Date: Fri, 30 Aug 2019 15:42:52 -0400 Subject: [PATCH 1/3] feat(src): pasting clause uses new uuid - I88 Signed-off-by: irmerk --- src/SlateAsInputEditor/index.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/SlateAsInputEditor/index.js b/src/SlateAsInputEditor/index.js index c64f371..fc2e7ac 100644 --- a/src/SlateAsInputEditor/index.js +++ b/src/SlateAsInputEditor/index.js @@ -367,7 +367,30 @@ const SlateAsInputEditor = React.forwardRef((props, ref) => { const onPaste = (event, editor, next) => { if (isEditable(editor, 'paste')) { const transfer = getEventTransfer(event); - if (transfer.type !== 'html') return next(); + const mutableFragment = transfer.fragment.asMutable(); + const mutableNodes = mutableFragment.nodes.asMutable(); + + const isHeadingClause = node => node.type === 'clause'; + mutableNodes.map((node) => { + if (isHeadingClause(node)) { + const mutableNode = node.asMutable(); + const mutableDataMap = mutableNode.data.asMutable(); + const mutableAttributesMap = mutableDataMap.get('attributes'); + + mutableAttributesMap.clauseid = uuidv4(); // unique identifier for a clause instance + + mutableDataMap.set('attributes', mutableAttributesMap); + mutableNode.data = mutableDataMap.asImmutable(); + return mutableNode; + } + return node; + }); + mutableFragment.nodes = mutableNodes.asImmutable(); + transfer.fragment = mutableFragment.asImmutable(); + editor.insertFragment(transfer.fragment); + + if (transfer.type !== 'html') return undefined; + const pluginManager = new PluginManager(props.plugins); const fromHtml = new FromHTML(pluginManager); // @ts-ignore From 7bd2176a8814e27ffd27d3e5d7acf5a8f0b58392 Mon Sep 17 00:00:00 2001 From: irmerk Date: Fri, 30 Aug 2019 15:43:18 -0400 Subject: [PATCH 2/3] chore(package) Signed-off-by: irmerk --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38cfde9..9d7cb47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@accordproject/markdown-editor", - "version": "0.5.13", + "version": "0.5.14", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e17410b..6c56530 100644 --- a/package.json +++ b/package.json @@ -100,4 +100,4 @@ "slate-react": "^0.22.4", "style-loader": "^0.23.1" } -} \ No newline at end of file +} From 543229c54b59106b12f7984d7ad6a86cd5161df8 Mon Sep 17 00:00:00 2001 From: irmerk Date: Wed, 4 Sep 2019 11:34:52 -0400 Subject: [PATCH 3/3] refactor(src): abstract out clause paste functionality - I88 Signed-off-by: irmerk --- src/SlateAsInputEditor/index.js | 41 ++++++++------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/src/SlateAsInputEditor/index.js b/src/SlateAsInputEditor/index.js index fc2e7ac..cee645a 100644 --- a/src/SlateAsInputEditor/index.js +++ b/src/SlateAsInputEditor/index.js @@ -367,39 +367,16 @@ const SlateAsInputEditor = React.forwardRef((props, ref) => { const onPaste = (event, editor, next) => { if (isEditable(editor, 'paste')) { const transfer = getEventTransfer(event); - const mutableFragment = transfer.fragment.asMutable(); - const mutableNodes = mutableFragment.nodes.asMutable(); - - const isHeadingClause = node => node.type === 'clause'; - mutableNodes.map((node) => { - if (isHeadingClause(node)) { - const mutableNode = node.asMutable(); - const mutableDataMap = mutableNode.data.asMutable(); - const mutableAttributesMap = mutableDataMap.get('attributes'); - - mutableAttributesMap.clauseid = uuidv4(); // unique identifier for a clause instance - - mutableDataMap.set('attributes', mutableAttributesMap); - mutableNode.data = mutableDataMap.asImmutable(); - return mutableNode; - } - return node; - }); - mutableFragment.nodes = mutableNodes.asImmutable(); - transfer.fragment = mutableFragment.asImmutable(); - editor.insertFragment(transfer.fragment); - - if (transfer.type !== 'html') return undefined; - - const pluginManager = new PluginManager(props.plugins); - const fromHtml = new FromHTML(pluginManager); - // @ts-ignore - const { document } = fromHtml.convert(editor, transfer.html); - editor.insertFragment(document); - return undefined; + if (transfer.type === 'html') { + const pluginManager = new PluginManager(props.plugins); + const fromHtml = new FromHTML(pluginManager); + // @ts-ignore + const { document } = fromHtml.convert(editor, transfer.html); + editor.insertFragment(document); + return; + } } - - return false; + return next(); }; /**