From 71f3511ffc3cb6eab2ef2d6fd9f1abae18c2f3e4 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Wed, 6 Apr 2022 11:48:15 +0200 Subject: [PATCH] fix: solve circular dependency to TreeMode in the Transform modal --- src/lib/components/JSONEditor.svelte | 66 +++++++-- src/lib/components/modals/TransformModal.scss | 6 +- .../components/modals/TransformModal.svelte | 34 ++++- .../components/modes/codemode/CodeMode.svelte | 113 +++++---------- .../components/modes/treemode/TreeMode.svelte | 132 ++++++------------ 5 files changed, 169 insertions(+), 182 deletions(-) diff --git a/src/lib/components/JSONEditor.svelte b/src/lib/components/JSONEditor.svelte index 37facede..cdb12b05 100644 --- a/src/lib/components/JSONEditor.svelte +++ b/src/lib/components/JSONEditor.svelte @@ -4,7 +4,7 @@ import { faCode } from '@fortawesome/free-solid-svg-icons' import { createDebug } from '../utils/debug' import Modal from 'svelte-simple-modal' - import { MODE } from '../constants.js' + import { MODE, SORT_MODAL_OPTIONS, TRANSFORM_MODAL_OPTIONS } from '../constants.js' import { uniqueId } from '../utils/uniqueId.js' import { isTextContent, validateContentType } from '../utils/jsonUtils' import AbsolutePopup from './modals/popup/AbsolutePopup.svelte' @@ -13,6 +13,8 @@ import { javascriptQueryLanguage } from '../plugins/query/javascriptQueryLanguage.js' import { renderValue } from '$lib/plugins/value/renderValue' import { tick } from 'svelte' + import TransformModal from './modals/TransformModal.svelte' + import SortModal from './modals/SortModal.svelte' // TODO: document how to enable debugging in the readme: localStorage.debug="jsoneditor:*", then reload const debug = createDebug('jsoneditor:Main') @@ -288,6 +290,57 @@ queryLanguageId = newQueryLanguageId onChangeQueryLanguage(newQueryLanguageId) } + + // The onTransformModal method is located in JSONEditor to prevent circular references: + // TreeMode -> TransformModal -> TreeMode + // And `open` is passed along as parameter because we cannot define it in JSONEditor itself + export function onTransformModal({ id, json, selectedPath, onTransform, onClose, open }) { + if (readOnly) { + return + } + + open( + TransformModal, + { + id, + json, + selectedPath, + escapeControlCharacters, + escapeUnicodeCharacters, + queryLanguages, + queryLanguageId, + onChangeQueryLanguage: handleChangeQueryLanguage, + onRenderValue, + onClassName, + onTransform + }, + TRANSFORM_MODAL_OPTIONS, + { + onClose + } + ) + } + + // The onSortModal is positioned here for consistency with TransformModal + export function onSortModal({ id, json, selectedPath, onSort, onClose, open }) { + if (readOnly) { + return + } + + open( + SortModal, + { + id, + json, + selectedPath, + onSort + }, + SORT_MODAL_OPTIONS, + { + onClose + } + ) + } @@ -303,16 +356,14 @@ {mainMenuBar} {escapeUnicodeCharacters} {validator} - {queryLanguages} - {queryLanguageId} - {onRenderValue} - onChangeQueryLanguage={handleChangeQueryLanguage} onChange={handleChangeText} onSwitchToTreeMode={handleSwitchToTreeMode} {onError} onFocus={handleFocus} onBlur={handleBlur} onRenderMenu={handleRenderMenu} + {onSortModal} + {onTransformModal} /> {:else} @@ -326,9 +377,6 @@ {escapeControlCharacters} {escapeUnicodeCharacters} {validator} - {queryLanguages} - {queryLanguageId} - onChangeQueryLanguage={handleChangeQueryLanguage} {onError} onChange={handleChange} onRequestRepair={handleRequestRepair} @@ -337,6 +385,8 @@ onFocus={handleFocus} onBlur={handleBlur} onRenderMenu={handleRenderMenu} + {onSortModal} + {onTransformModal} /> {/if} {/key} diff --git a/src/lib/components/modals/TransformModal.scss b/src/lib/components/modals/TransformModal.scss index 4ffb901a..27074e24 100644 --- a/src/lib/components/modals/TransformModal.scss +++ b/src/lib/components/modals/TransformModal.scss @@ -121,7 +121,7 @@ } .data-contents { - :global(.jsoneditor-main) { + :global(.tree-mode) { height: 300px; flex: none; } @@ -148,7 +148,7 @@ } } - :global(.jsoneditor-main) { + :global(.tree-mode) { flex: 1; border: 1px solid $background-gray; box-shadow: none; @@ -156,7 +156,7 @@ min-height: 300px; } - :global(.jsoneditor-main.focus) { + :global(.tree-mode.focus) { border: 1px solid $theme-color; } diff --git a/src/lib/components/modals/TransformModal.svelte b/src/lib/components/modals/TransformModal.svelte index 1a9c9198..db3962bd 100644 --- a/src/lib/components/modals/TransformModal.svelte +++ b/src/lib/components/modals/TransformModal.svelte @@ -3,7 +3,7 @@