From 6a2c192d279ef37e236cdf3fc84be4be1b072cd1 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Wed, 10 Jul 2024 11:00:00 +0200 Subject: [PATCH 1/2] chore: refactor paste-as-json to invoke a callback instead of using `div.cancel()` (see #454) --- .../modes/tablemode/TableMode.svelte | 25 +++-------------- .../components/modes/treemode/TreeMode.svelte | 28 +++---------------- .../value/components/EditableValue.svelte | 22 +++++++++++++-- src/lib/types.ts | 8 ++++-- 4 files changed, 34 insertions(+), 49 deletions(-) diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index 38b5c079..31f0ac84 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -77,8 +77,7 @@ findParentWithNodeName, getDataPathFromTarget, getWindow, - isChildOf, - isEditableDivRef + isChildOf } from '$lib/utils/domUtils.js' import { createDebug } from '$lib/utils/debug.js' import { @@ -219,7 +218,7 @@ let text: string | undefined let parseError: ParseError | undefined = undefined - let pastedJson: PastedJson + let pastedJson: PastedJson | undefined let searchResultDetails: SearchResultDetails | undefined let searchResults: SearchResults | undefined @@ -1096,24 +1095,8 @@ return } - const { path, contents } = pastedJson - - // exit edit mode - const refEditableDiv = refContents?.querySelector('.jse-editable-div') ?? undefined - if (isEditableDivRef(refEditableDiv)) { - refEditableDiv.cancel() - } - - // replace the value with the JSON object/array - const operations: JSONPatchDocument = [ - { - op: 'replace', - path: compileJSONPointer(path), - value: contents - } - ] - - handlePatch(operations) + const { onPasteAsJson } = pastedJson + onPasteAsJson() // TODO: get rid of the setTimeout here setTimeout(focus) diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index e9eef6ef..e1cd9923 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -79,8 +79,7 @@ findParentWithNodeName, getWindow, isChildOf, - isChildOfNodeName, - isEditableDivRef + isChildOfNodeName } from '$lib/utils/domUtils.js' import { convertValue, @@ -264,7 +263,7 @@ $: debug('selection', selection) - let pastedJson: PastedJson + let pastedJson: PastedJson | undefined let searchResultDetails: SearchResultDetails | undefined let searchResults: SearchResults | undefined @@ -1770,29 +1769,10 @@ return } - const { path, contents } = pastedJson + const { onPasteAsJson } = pastedJson pastedJson = undefined - // exit edit mode - const refEditableDiv = refContents?.querySelector('.jse-editable-div') ?? undefined - if (isEditableDivRef(refEditableDiv)) { - refEditableDiv.cancel() - } - - // replace the value with the JSON object/array - const operations: JSONPatchDocument = [ - { - op: 'replace', - path: compileJSONPointer(path), - value: contents - } - ] - - handlePatch(operations, (patchedJson, patchedState) => { - return { - state: expandSmart(patchedJson, patchedState, path) - } - }) + onPasteAsJson() // TODO: get rid of the setTimeout here setTimeout(focus) diff --git a/src/lib/plugins/value/components/EditableValue.svelte b/src/lib/plugins/value/components/EditableValue.svelte index 285285b9..d1a3be81 100644 --- a/src/lib/plugins/value/components/EditableValue.svelte +++ b/src/lib/plugins/value/components/EditableValue.svelte @@ -1,7 +1,7 @@