From 45d331ec0c77a4934a485d2499fc7c5133e45fa4 Mon Sep 17 00:00:00 2001 From: Ruchika Sinha Date: Mon, 3 Aug 2026 18:43:08 -0700 Subject: [PATCH] make client location query param value authorable --- .../workflow-acrobat/action-binder.test.js | 22 +++++++++++++++++++ .../workflow-acrobat/action-binder.js | 1 + unitylibs/core/workflow/workflow.js | 3 +++ 3 files changed, 26 insertions(+) diff --git a/test/core/workflow/workflow-acrobat/action-binder.test.js b/test/core/workflow/workflow-acrobat/action-binder.test.js index af40b563..9047f6c6 100644 --- a/test/core/workflow/workflow-acrobat/action-binder.test.js +++ b/test/core/workflow/workflow-acrobat/action-binder.test.js @@ -1075,6 +1075,28 @@ describe('ActionBinder', () => { expect(result).to.be.true; }); + it('should set referrer to the authored referrer when present', async () => { + actionBinder.workflowCfg.referrer = 'file-compressor'; + const cOpts = { payload: { verb: 'compress-pdf' } }; + const filesData = { test: 'data' }; + const result = await actionBinder.handleRedirect(cOpts, filesData); + + expect(cOpts.payload.referrer).to.equal('file-compressor'); + expect(actionBinder.getRedirectUrl.calledWith(cOpts)).to.be.true; + expect(result).to.be.true; + }); + + it('should fall back referrer to the verb when no referrer is authored', async () => { + actionBinder.workflowCfg.referrer = ''; + const cOpts = { payload: { verb: 'compress-pdf' } }; + const filesData = { test: 'data' }; + const result = await actionBinder.handleRedirect(cOpts, filesData); + + expect(cOpts.payload.referrer).to.equal('compress-pdf'); + expect(actionBinder.getRedirectUrl.calledWith(cOpts)).to.be.true; + expect(result).to.be.true; + }); + it('should handle redirect with feedback for multi-file validation failure', async () => { actionBinder.multiFileValidationFailure = true; const cOpts = { payload: {} }; diff --git a/unitylibs/core/workflow/workflow-acrobat/action-binder.js b/unitylibs/core/workflow/workflow-acrobat/action-binder.js index 6d6e0bd1..c801dc6d 100644 --- a/unitylibs/core/workflow/workflow-acrobat/action-binder.js +++ b/unitylibs/core/workflow/workflow-acrobat/action-binder.js @@ -531,6 +531,7 @@ export default class ActionBinder { } async handleRedirect(cOpts, filesData) { + cOpts.payload.referrer = this.workflowCfg.referrer || cOpts.payload.verb; try { cOpts.payload.newUser = !localStorage.getItem('unity.user'); const numAttempts = parseInt(localStorage.getItem(`${this.workflowCfg.enabledFeatures[0]}_attempts`), 10) || 0; diff --git a/unitylibs/core/workflow/workflow.js b/unitylibs/core/workflow/workflow.js index dd891bc1..9351427f 100644 --- a/unitylibs/core/workflow/workflow.js +++ b/unitylibs/core/workflow/workflow.js @@ -209,11 +209,13 @@ class WfInitiator { let product = ''; let feature = ''; let psw = ''; + let referrer = ''; [...this.el.classList].forEach((cn) => { if (cn.match('workflow-')) wfName = cn; if (cn.match('product-')) product = cn.replace('product-', ''); if (cn.match('feature-')) feature = cn.replace('feature-', ''); if (cn.match('psw-enabled')) psw = cn; + if (cn.startsWith('referrer-')) referrer = cn.replace('referrer-', ''); }); const workflowCfg = { 'workflow-photoshop': { @@ -301,6 +303,7 @@ class WfInitiator { errors: {}, supportedTexts: workflowCfg[wfName]?.stList ?? null, pswFeature: !!psw, + referrer, }; }