diff --git a/app/javascript/widget/helpers/specs/urlParamsHelper.spec.js b/app/javascript/widget/helpers/specs/urlParamsHelper.spec.js index 826c35e99..87588616b 100644 --- a/app/javascript/widget/helpers/specs/urlParamsHelper.spec.js +++ b/app/javascript/widget/helpers/specs/urlParamsHelper.spec.js @@ -31,7 +31,7 @@ describe('#getLocale', () => { expect(getLocale('?test=1&cw_conv=2&website_token=3&locale=fr')).toEqual( 'fr' ); - expect(getLocale('')).toEqual(undefined); + expect(getLocale('')).toEqual(null); }); }); diff --git a/app/javascript/widget/helpers/urlParamsHelper.js b/app/javascript/widget/helpers/urlParamsHelper.js index ad7f896d1..1736c092e 100644 --- a/app/javascript/widget/helpers/urlParamsHelper.js +++ b/app/javascript/widget/helpers/urlParamsHelper.js @@ -1,22 +1,13 @@ export const buildSearchParamsWithLocale = search => { const locale = window.WOOT_WIDGET.$root.$i18n.locale; - if (search) { - search = `${search}&locale=${locale}`; - } else { - search = `?locale=${locale}`; - } - return search; + const params = new URLSearchParams(search); + params.append('locale', locale); + + return `?${params}`; }; export const getLocale = (search = '') => { - const searchParamKeyValuePairs = search.split('&'); - return searchParamKeyValuePairs.reduce((acc, keyValuePair) => { - const [key, value] = keyValuePair.split('='); - if (key === 'locale') { - return value; - } - return acc; - }, undefined); + return new URLSearchParams(search).get('locale'); }; export const buildPopoutURL = ({ @@ -25,5 +16,10 @@ export const buildPopoutURL = ({ websiteToken, locale, }) => { - return `${origin}/widget?cw_conversation=${conversationCookie}&website_token=${websiteToken}&locale=${locale}`; + const popoutUrl = new URL('/widget', origin); + popoutUrl.searchParams.append('cw_conversation', conversationCookie); + popoutUrl.searchParams.append('website_token', websiteToken); + popoutUrl.searchParams.append('locale', locale); + + return popoutUrl.toString(); };