diff --git a/app/javascript/shared/helpers/portalHelper.js b/app/javascript/shared/helpers/portalHelper.js index a9e92a92a..9b25248d5 100644 --- a/app/javascript/shared/helpers/portalHelper.js +++ b/app/javascript/shared/helpers/portalHelper.js @@ -38,3 +38,24 @@ export const getMatchingLocale = (selectedLocale = '', allowedLocales = []) => { // Return the first match that exists in the allowed list, or null return priorityMatches.find(l => l && allowedLocales.includes(l)) ?? null; }; + +/** + * Build the link consumed by the in-widget article viewer, appending the query + * params it expects (plain layout, theme and locale). + * + * @export + * @param {Object} options + * @param {string} options.link Relative article/portal path (e.g. `hc/slug/articles/foo`). + * @param {(string|null)} [options.locale] Resolved portal locale. + * @param {boolean} [options.prefersDarkMode] Whether the widget is in dark mode. + * @returns {string} The link with the article viewer query params appended. + */ +export const buildArticleViewerLink = ({ link, locale, prefersDarkMode }) => { + const params = new URLSearchParams({ + show_plain_layout: 'true', + theme: prefersDarkMode ? 'dark' : 'light', + ...(locale && { locale }), + }); + + return `${link}?${params.toString()}`; +}; diff --git a/app/javascript/widget/components/pageComponents/Home/Article/ArticleContainer.vue b/app/javascript/widget/components/pageComponents/Home/Article/ArticleContainer.vue index 6cfaf8fac..a0864c999 100644 --- a/app/javascript/widget/components/pageComponents/Home/Article/ArticleContainer.vue +++ b/app/javascript/widget/components/pageComponents/Home/Article/ArticleContainer.vue @@ -7,7 +7,10 @@ import { useRouter } from 'vue-router'; import { useStore } from 'dashboard/composables/store'; import { useMapGetter } from 'dashboard/composables/store.js'; import { useDarkMode } from 'widget/composables/useDarkMode'; -import { getMatchingLocale } from 'shared/helpers/portalHelper'; +import { + getMatchingLocale, + buildArticleViewerLink, +} from 'shared/helpers/portalHelper'; const store = useStore(); const router = useRouter(); @@ -38,14 +41,11 @@ const fetchArticles = () => { }; const openArticleInArticleViewer = link => { - const params = new URLSearchParams({ - show_plain_layout: 'true', - theme: prefersDarkMode.value ? 'dark' : 'light', - ...(locale.value && { locale: locale.value }), + const linkToOpen = buildArticleViewerLink({ + link, + locale: locale.value, + prefersDarkMode: prefersDarkMode.value, }); - - // Combine link with query parameters - const linkToOpen = `${link}?${params.toString()}`; router.push({ name: 'article-viewer', query: { link: linkToOpen } }); };