From 3e40b41fc55bef9fdc185be3c798d0e0dfeb2092 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Tue, 21 Apr 2026 22:22:32 -0400 Subject: [PATCH 1/4] FOUR-30726 REGRESSION >> Public files are not displayed on screens Description: Issue: multiple uploads were sending the same data_name, causing incorrect values in media custom properties. Related tickets: https://processmaker.atlassian.net/browse/FOUR-30726 --- src/components/renderer/file-upload.vue | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/renderer/file-upload.vue b/src/components/renderer/file-upload.vue index db4bda736..9d2b91fc4 100644 --- a/src/components/renderer/file-upload.vue +++ b/src/components/renderer/file-upload.vue @@ -154,6 +154,24 @@ export default { components: { ...uploader, RequiredAsterisk }, mixins: [uniqIdsMixin], props: ['label', 'error', 'helper', 'name', 'value', 'controlClass', 'endpoint', 'accept', 'validation', 'parent', 'config', 'multipleUpload', 'screenType'], + created() { + const vm = this; + // After merge with chunk getParams(), query includes `filename` for this chunk's file — fix + // data_name per request without replacing opts.query with a function or serializing uploads. + this.options.processParams = (params, file) => { + if (!vm.name) { + params.data_name = params.filename || file.name; + } else if ( + vm.multipleUpload + && (_.has(window, 'PM4ConfigOverrides.postFileEndpoint') + || (typeof vm.endpoint === 'string' + && /file-manager|package-files|public-files/i.test(vm.endpoint))) + ) { + params.data_name = params.filename || file.name; + } + return params; + }; + }, updated() { this.removeDefaultClasses(); }, @@ -573,9 +591,6 @@ export default { } } file.ignored = false; - if (!this.name) { - this.options.query.data_name = file.name; - } return true; }, removeDefaultClasses() { From 17d5b8454982911366304c7c6d05ea8bb5e62018 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Thu, 23 Apr 2026 14:45:05 -0400 Subject: [PATCH 2/4] Improvements to conditions for public files and multiple uploads. --- src/components/renderer/file-upload.vue | 29 +++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/components/renderer/file-upload.vue b/src/components/renderer/file-upload.vue index 9d2b91fc4..1ed24c84a 100644 --- a/src/components/renderer/file-upload.vue +++ b/src/components/renderer/file-upload.vue @@ -156,19 +156,13 @@ export default { props: ['label', 'error', 'helper', 'name', 'value', 'controlClass', 'endpoint', 'accept', 'validation', 'parent', 'config', 'multipleUpload', 'screenType'], created() { const vm = this; - // After merge with chunk getParams(), query includes `filename` for this chunk's file — fix - // data_name per request without replacing opts.query with a function or serializing uploads. + // File Manager > Public + multi: see isFileManagerPublicInterface(); processParams fixes + // data_name per chunk (processParams runs after getParams merges `filename` for this chunk). this.options.processParams = (params, file) => { - if (!vm.name) { - params.data_name = params.filename || file.name; - } else if ( - vm.multipleUpload - && (_.has(window, 'PM4ConfigOverrides.postFileEndpoint') - || (typeof vm.endpoint === 'string' - && /file-manager|package-files|public-files/i.test(vm.endpoint))) - ) { - params.data_name = params.filename || file.name; + if (!vm.isFileManagerPublicInterface() || !vm.multipleUpload) { + return params; } + params.data_name = params.filename || file.name; return params; }; }, @@ -391,6 +385,16 @@ export default { }; }, methods: { + isFileManagerPublicInterface() { + try { + const p = String(window.location.pathname || ''); + const h = String(window.location.hash || ''); + return p.includes('/file-manager/public') + || (/\/file-manager\/?$/i.test(p) && /^#\/public(\/|$)/i.test(h)); + } catch (e) { + return false; + } + }, clearFiles() { this.showComponent = false; this.$nextTick(() => { @@ -591,6 +595,9 @@ export default { } } file.ignored = false; + if (!this.name && !(this.isFileManagerPublicInterface() && this.multipleUpload)) { + this.options.query.data_name = file.name; + } return true; }, removeDefaultClasses() { From f67ddbb91a657c8ae764eb2cf761aaaa06f39651 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Fri, 24 Apr 2026 15:56:12 -0400 Subject: [PATCH 3/4] Improvements for sonarquebe. --- src/components/renderer/file-upload.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/renderer/file-upload.vue b/src/components/renderer/file-upload.vue index 1ed24c84a..77887a962 100644 --- a/src/components/renderer/file-upload.vue +++ b/src/components/renderer/file-upload.vue @@ -392,8 +392,8 @@ export default { return p.includes('/file-manager/public') || (/\/file-manager\/?$/i.test(p) && /^#\/public(\/|$)/i.test(h)); } catch (e) { - return false; } + return false; }, clearFiles() { this.showComponent = false; From 63203c664c7063b4e954c5a766c2228b0ede62c5 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Mon, 27 Apr 2026 11:45:32 -0400 Subject: [PATCH 4/4] Fix SonarQube issues. --- src/components/renderer/file-upload.vue | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/components/renderer/file-upload.vue b/src/components/renderer/file-upload.vue index 77887a962..6ddce58e8 100644 --- a/src/components/renderer/file-upload.vue +++ b/src/components/renderer/file-upload.vue @@ -386,14 +386,13 @@ export default { }, methods: { isFileManagerPublicInterface() { - try { - const p = String(window.location.pathname || ''); - const h = String(window.location.hash || ''); - return p.includes('/file-manager/public') - || (/\/file-manager\/?$/i.test(p) && /^#\/public(\/|$)/i.test(h)); - } catch (e) { + if (typeof window === 'undefined' || !window.location) { + return false; } - return false; + const p = String(window.location.pathname || ''); + const h = String(window.location.hash || ''); + return p.includes('/file-manager/public') + || (/\/file-manager\/?$/i.test(p) && /^#\/public(\/|$)/i.test(h)); }, clearFiles() { this.showComponent = false;