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