From c12c18cddef28dde536589e37b13a978e7379cb5 Mon Sep 17 00:00:00 2001 From: stefan-hoehn Date: Fri, 6 Jun 2025 19:02:15 +0200 Subject: [PATCH] [blockly] Fix typed var not working for dictionary (#3210) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #3038. Signed-off-by: Stefan Höhn --- .../web/src/assets/definitions/blockly/blocks-dicts.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js index 9a0c0a09f..148f57d7c 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js @@ -4,6 +4,7 @@ import Blockly from 'blockly' import { javascriptGenerator } from 'blockly/javascript.js' +import { blockGetCheckedInputType } from '@/assets/definitions/blockly/utils.js' export default function (f7) { Blockly.Blocks['dicts_create_with'] = { @@ -190,7 +191,7 @@ export default function (f7) { .setCheck('String') this.appendValueInput('varName') .appendField('from dictionary') - .setCheck('String') + .setCheck(['Dictionary', 'String']) this.setInputsInline(true) this.setOutput(true, 'String') this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-standard-ext.html#get-value-of-key-from-dictionary') @@ -205,7 +206,12 @@ export default function (f7) { */ javascriptGenerator.forBlock['dicts_get'] = function (block) { const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) - const varName = javascriptGenerator.valueToCode(block, 'varName', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + // note: even though the dict can be directly used without a variable, we need to keep the variable name as "varName" for backwards compatibility + let varName = javascriptGenerator.valueToCode(block, 'varName', javascriptGenerator.ORDER_ATOMIC) + const varNameType = blockGetCheckedInputType(block, 'varName') + if (varNameType !== 'Dictionary') { + varName = varName.replace(/'/g, '') + } let code = `${varName}[${key}]` return [code, 0] }