From 81b603e3237a1776be53fa008d9045a74a922935 Mon Sep 17 00:00:00 2001 From: StanZGenchev Date: Fri, 3 Apr 2026 12:39:05 +0300 Subject: [PATCH] Fixed #5831 Signed-off-by: StanZGenchev --- .github/workflows/build.yml | 10 ++-- .github/workflows/codeql.yml | 2 +- .github/workflows/pull-request.yml | 10 ++-- .github/workflows/release.yml | 6 +-- .../ui/controller.js.template | 51 ++++++++++++------- 5 files changed, 48 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3d7b000a37..9ad0948b87 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,7 +58,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Maven Build run: mvn clean install -P quick-build @@ -151,7 +151,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Maven Build run: mvn clean install -P unit-tests @@ -183,7 +183,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Install ttyd (prebuilt) run: | @@ -256,7 +256,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Install ttyd (prebuilt) run: | @@ -326,7 +326,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Install ttyd (prebuilt) run: | diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 614eb7d456..6db93e7715 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -47,7 +47,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Initialize CodeQL uses: github/codeql-action/init@v3 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 35ae1b702b..b42dbb39a3 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -55,7 +55,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Maven Build run: mvn clean install -P unit-tests -U @@ -87,7 +87,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Maven Build run: mvn clean install -P quick-build @@ -129,7 +129,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Install ttyd (prebuilt) run: | @@ -201,7 +201,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Install ttyd (prebuilt) run: | @@ -271,7 +271,7 @@ jobs: node-version: 22.x - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Install ttyd (prebuilt) run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 834adb848c..1ed89c944f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -62,7 +62,7 @@ jobs: registry-url: 'https://registry.npmjs.org' - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -171,7 +171,7 @@ jobs: run: npm install -g npm@latest - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: "Configure Git" run: | @@ -349,7 +349,7 @@ jobs: - name: Install TypeScript and esbuild - run: npm install -g typescript esbuild + run: npm install -g typescript@5.9.3 esbuild - name: Initialize CodeQL uses: github/codeql-action/init@v3 diff --git a/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template b/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template index dfe5231b95..5a3d5c0009 100644 --- a/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template +++ b/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template @@ -25,6 +25,23 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform })).constant('Dialogs', new DialogHub()).controller('FormController', ($scope, $http, Dialogs, LocaleService, ViewParameters) => { $scope._is_view = ViewParameters.get().container !== undefined; $scope._stepIndicators = {}; + ${dollar}scope._setDeepModel = (path, value) => { + const keys = path.split('.'); + let current = $scope.model; + + keys.forEach((key, index) => { + if (index === keys.length - 1) { + current[key] = value; + } else { + if (current[key] === null || current[key] === undefined) { + current[key] = {}; + } else if (typeof current[key] !== 'object') { + throw new Error(`${key} is not an object! Cannot set inner keys.`); + } + current = current[key]; + } + }); + }; ${dollar}scope._selectFromDocuments = (modelKey, multiple, uploadEnabled) => { Dialogs.showWindow({id: 'documentStorage', params: { readOnly: !uploadEnabled, multiple: multiple, topic: '${projectName}.doc.select' } }); const docSelectListener = Dialogs.addMessageListener({ @@ -39,13 +56,13 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform } }); }; - $scope.forms = { + ${dollar}scope.forms = { form: {} }; #if($metadata.url) - $scope._submit = () => { + ${dollar}scope._submit = () => { const payload = {}; - angular.forEach($scope.forms.form, (control, name) => { + angular.forEach(${dollar}scope.forms.form, (control, name) => { if (name[0] === '$') return; payload[name] = control.$modelValue; }); @@ -79,7 +96,7 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform }; #end - $scope.model = {}; + ${dollar}scope.model = {}; #macro(formWidgets $elements) #foreach($element in $elements) #if($element.controlId == "stepIndicator" && $element.staticData) @@ -103,22 +120,22 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform ); }); #elseif($element.controlId == "input-number") - $scope.model.$element.model = 0; + ${dollar}scope._setDeepModel('$element.model', 0); #elseif($element.controlId == "input-checkbox") - $scope.model.$element.model = false; + ${dollar}scope._setDeepModel('$element.model', false); #elseif($element.controlId == "input-radio") #set ($hasDefault = false) #if ($element.staticOptions) #foreach($radio in $element.staticOptions) #if ($radio.isDefault == true) #set ($hasDefault = true) - $scope.model.$element.model = '$radio.value'; + ${dollar}scope._setDeepModel('$element.model', '$radio.value'); #break #end #end #end #if (!$hasDefault) - $scope.model.$element.model = ''; + ${dollar}scope._setDeepModel('$element.model', ''); #end #elseif($element.controlId == "input-select") #set ($hasDefault = false) @@ -126,21 +143,21 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform #foreach($select in $element.staticOptions) #if ($select.isDefault == true) #set ($hasDefault = true) - $scope.model.$element.model = '$select.value'; + ${dollar}scope._setDeepModel('$element.model', '$select.value'); #break #end #end #end #if (!$hasDefault) - $scope.model.$element.model = ''; + ${dollar}scope._setDeepModel('$element.model', ''); #end #elseif($element.controlId == "input-color") - $scope.model.$element.model = '#ffbe6f'; + ${dollar}scope._setDeepModel('$element.model', '#ffbe6f'); #elseif($element.controlId == "paragraph") #if($element.model && $element.text) - $scope.model.$element.model = `$element.text`; + ${dollar}scope._setDeepModel('$element.model', `$element.text`); #elseif($element.model) - $scope.model.$element.model = null; + ${dollar}scope._setDeepModel('$element.model', null); #end #end #if($element.children) @@ -158,15 +175,15 @@ $code ${dollar}http.get(`$feed.url`).then(response => { #if($feed.func) #if($feed.name == 'model') - Object.assign($scope.model, ${feed.func}(response.data)); + Object.assign(${dollar}scope.model, ${feed.func}(response.data)); #else - $scope.$feed.name = ${feed.func}(response.data); + ${dollar}scope.$feed.name = ${feed.func}(response.data); #end #else #if($feed.name == 'model') - Object.assign($scope.model, response.data); + Object.assign(${dollar}scope.model, response.data); #else - $scope.$feed.name = response.data; + ${dollar}scope.$feed.name = response.data; #end #end }, error => {