From 93a8713e6c1bae15adcc9dfee310a3c1805ec038 Mon Sep 17 00:00:00 2001 From: ArnoldSmith86 <73538315+ArnoldSmith86@users.noreply.github.com> Date: Sun, 18 Aug 2024 16:51:03 +0200 Subject: [PATCH] fixed crash after renaming a widget (#2216) --- client/js/editor/sidebar/json.js | 6 ++++-- client/js/jsonedit.js | 3 +++ tests/testcafe/functions.js | 2 -- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/client/js/editor/sidebar/json.js b/client/js/editor/sidebar/json.js index 95f1c364..3ede286e 100644 --- a/client/js/editor/sidebar/json.js +++ b/client/js/editor/sidebar/json.js @@ -35,7 +35,8 @@ class JsonModule extends SidebarModule { } else { jeEmpty(); } - $('#jeText').blur(); + if(!jeDeltaIsOurs) + $('#jeText').blur(); } renderModule(target) { @@ -70,7 +71,8 @@ class TreeModule extends SidebarModule { jeEmpty(); jeCenterSelection(); } - $('#jeText').blur(); + if(!jeDeltaIsOurs) + $('#jeText').blur(); } onStateReceivedWhileActive() { diff --git a/client/js/jsonedit.js b/client/js/jsonedit.js index fee58ade..4bf69c98 100644 --- a/client/js/jsonedit.js +++ b/client/js/jsonedit.js @@ -1483,12 +1483,15 @@ async function jeApplyChanges() { const currentState = JSON.stringify(jePostProcessObject(completeState)); if(currentStateRaw != jeStateBeforeRaw || jeKeyIsDownDeltas.length) { + const idChanged = JSON.parse(currentState).id != JSON.parse(jeStateBefore).id; jeDeltaIsOurs = true; await jeApplyExternalChanges(completeState); jeStateBeforeRaw = currentStateRaw; const oldState = jeStateBefore; jeStateBefore = currentState; await updateWidget(currentState, oldState); // in editmode.js + if(idChanged) + setSelection([ widgets.get(JSON.parse(currentState).id) ]); jeDeltaIsOurs = false; } } diff --git a/tests/testcafe/functions.js b/tests/testcafe/functions.js index 0834f88d..0924a7d2 100644 --- a/tests/testcafe/functions.js +++ b/tests/testcafe/functions.js @@ -150,11 +150,9 @@ test('Dynamic expressions', async t => { .click('#editButton') .click('#editorToolbar > div > [icon=add]') .click('#addBasicWidget') - .click('#room',{offsetX: 1, offsetY: 1, modifiers:{ctrl:true}}) .click(Selector('button').withAttribute('icon', 'data_object')) .typeText('#jeText', button, { replace: true, paste: true }) .rightClick('#w_jyo6') - .rightClick('#w_jyo6') .click(Selector('button').withAttribute('icon', 'pest_control')) const log = await Selector('#jeLog').textContent for (let i=0; i