From 5d9cdb93482c553dbd9f1c2fb7df5758f3495ef1 Mon Sep 17 00:00:00 2001 From: ilhan orhan <ilhan.myumyun@sap.com> Date: Wed, 21 Apr 2021 20:53:39 +0300 Subject: [PATCH] feat(framework): support sap-* config URL params (#3138) The change will assist broader UI technology co-existence by allowing the app developers use the older sap-* params in order to configure the theme, language, etc. There are use-cases where the sap-* is still the preferred param. In case both sap-ui-* and sap-* params are set, the sap-ui-* ones will take precedence - the same way UI5 handles it. FIXES: #3114 --- packages/base/hash.txt | 2 +- packages/base/src/InitialConfiguration.js | 27 ++++++++--- .../base/test/specs/ConfigurationURL.spec.js | 48 ++++++++++++++++++- 3 files changed, 68 insertions(+), 9 deletions(-) diff --git a/packages/base/hash.txt b/packages/base/hash.txt index 6b98d6d2f3fa..a4271ea795a1 100644 --- a/packages/base/hash.txt +++ b/packages/base/hash.txt @@ -1 +1 @@ -Ypwf1pcj/tFLkCFKDb5OPtwjd5A= \ No newline at end of file +KJ0tn0Kg8EEEQiQ6XKfqbAsP3eQ= \ No newline at end of file diff --git a/packages/base/src/InitialConfiguration.js b/packages/base/src/InitialConfiguration.js index 15d04d140b04..ec5493de8483 100644 --- a/packages/base/src/InitialConfiguration.js +++ b/packages/base/src/InitialConfiguration.js @@ -92,23 +92,36 @@ const parseConfigurationScript = () => { const parseURLParameters = () => { const params = new URLSearchParams(window.location.search); + // Process "sap-*" params first params.forEach((value, key) => { - if (!key.startsWith("sap-ui")) { + const parts = key.split("sap-").length; + if (parts === 0 || parts === key.split("sap-ui-").length) { return; } - const lowerCaseValue = value.toLowerCase(); - - const param = key.split("sap-ui-")[1]; + applyURLParam(key, value, "sap"); + }); - if (booleanMapping.has(value)) { - value = booleanMapping.get(lowerCaseValue); + // Process "sap-ui-*" params + params.forEach((value, key) => { + if (!key.startsWith("sap-ui")) { + return; } - initialConfig[param] = value; + applyURLParam(key, value, "sap-ui"); }); }; +const applyURLParam = (key, value, paramType) => { + const lowerCaseValue = value.toLowerCase(); + const param = key.split(`${paramType}-`)[1]; + + if (booleanMapping.has(value)) { + value = booleanMapping.get(lowerCaseValue); + } + initialConfig[param] = value; +}; + const applyOpenUI5Configuration = () => { const OpenUI5Support = getFeature("OpenUI5Support"); if (!OpenUI5Support || !OpenUI5Support.isLoaded()) { diff --git a/packages/base/test/specs/ConfigurationURL.spec.js b/packages/base/test/specs/ConfigurationURL.spec.js index d4202ee72043..3f98ef466540 100644 --- a/packages/base/test/specs/ConfigurationURL.spec.js +++ b/packages/base/test/specs/ConfigurationURL.spec.js @@ -1,6 +1,6 @@ const assert = require("chai").assert; -describe("Some settings can be set via URL params", () => { +describe("Some settings can be set via SAP UI URL params", () => { before(() => { browser.url("http://localhost:9191/test-resources/pages/Configuration.html?sap-ui-rtl=true&sap-ui-language=ja&sap-ui-calendarType=Japanese&sap-ui-theme=sap_belize_hcb&sap-ui-animationMode=basic"); }); @@ -45,3 +45,49 @@ describe("Some settings can be set via URL params", () => { assert.strictEqual(res, 'basic', "animationMode is basic"); }); }); + + +describe("Some settings can be set via SAP URL params", () => { + before(() => { + browser.url("http://localhost:9191/test-resources/pages/Configuration.html?sap-language=bg&sap-theme=sap_fiori_3_dark"); + }); + + it("Tests that language is applied", () => { + const res = browser.execute( () => { + const config = window['sap-ui-webcomponents-bundle'].configuration; + return config.getLanguage(); + }); + assert.strictEqual(res, 'bg', "language is bulgarian"); + }); + + it("Tests that theme is applied", () => { + const res = browser.execute( () => { + const config = window['sap-ui-webcomponents-bundle'].configuration; + return config.getTheme(); + }); + assert.strictEqual(res, 'sap_fiori_3_dark', "Thems is Fiori Dark"); + }); +}); + + +describe("SAP UI params take precedence over the SAP params", () => { + before(() => { + browser.url("http://localhost:9191/test-resources/pages/Configuration.html?sap-language=bg&sap-ui-language=de&sap-theme=sap_fiori_3_dark&sap-theme=sap_fiori_3_hcb"); + }); + + it("Tests that language is applied via sap-ui-language", () => { + const res = browser.execute( () => { + const config = window['sap-ui-webcomponents-bundle'].configuration; + return config.getLanguage(); + }); + assert.strictEqual(res, 'de', "language is german"); + }); + + it("Tests that theme is applied via sap-ui-theme", () => { + const res = browser.execute( () => { + const config = window['sap-ui-webcomponents-bundle'].configuration; + return config.getTheme(); + }); + assert.strictEqual(res, 'sap_fiori_3_hcb', "Thems is Fiori HCB"); + }); +}); \ No newline at end of file