From cc8866a84ec2b36b77ff8e979dbcc66ebbacbc87 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Tue, 24 Jun 2025 19:52:44 +0530 Subject: [PATCH] feat: Sync Popular Articles locale with widget locale (#11754) # Pull Request Template ## Description This PR includes the following improvements: * **Popular Articles Locale Selection based on Widget Locale** * Implements priority-based locale matching: * Exact locale match (e.g., "fr" === "fr") * Base language match (e.g., "fr" when selected is "fr_CA") * Variant match (e.g., "fr_BE" when selected is "fr") * Removes default locale fallback - if no locale match is found, popular articles section is hidden. * Fixed **API** filter issue where the locale parameter was previously ignored * Hides Popular Articles section completely when no locale match is found and Only shows relevant articles in the user's language * **RTL Direction Handling Improvements** * Now directly reads the `lang` attribute from HTML element `` instead of relying on `.locale-switcher` and sets direction attribute based on language. * Adds `data-dir-applied` attribute to prevent overlapping direction settings between global helpers and components (eg case: Insert article in editor dashboard) * Update `IframeLoader.vue` to Composition API and improve the **dir** logic Fixes 1. [CW-4505](https://linear.app/chatwoot/issue/CW-4505/popular-articles-not-displayed-based-on-user-locale-in-live-chat), https://github.com/chatwoot/chatwoot/issues/11745 2. RTL direction is not working in widget article view after merging this PR https://github.com/chatwoot/chatwoot/pull/11692 ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? ### Loom video **Popular Articles** https://www.loom.com/share/7cecbaaa77eb48e19263398b6ba8ddef?sid=a2452b8e-7d7e-46a3-b5c8-aed5ab5bc801 **RTL improvements** https://www.loom.com/share/3ccad77174a0412097e802641df5f3e0?sid=e10ac57f-5c49-4084-84d3-5ad58aee54fa ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Muhsin Keloth --- .../api/v1/portals/articles_controller.rb | 4 + .../components/ArticleSearch/ArticleView.vue | 5 +- app/javascript/portal/portalHelpers.js | 11 +- .../shared/components/IframeLoader.vue | 105 ++++++++---------- app/javascript/shared/helpers/portalHelper.js | 40 +++++++ .../shared/helpers/specs/portalHelper.spec.js | 28 +++++ .../Home/Article/ArticleContainer.vue | 18 +-- .../widget/store/modules/articles.js | 1 + app/javascript/widget/views/ArticleViewer.vue | 10 +- .../v1/portals/articles_controller_spec.rb | 8 ++ 10 files changed, 148 insertions(+), 82 deletions(-) create mode 100644 app/javascript/shared/helpers/portalHelper.js create mode 100644 app/javascript/shared/helpers/specs/portalHelper.spec.js diff --git a/app/controllers/public/api/v1/portals/articles_controller.rb b/app/controllers/public/api/v1/portals/articles_controller.rb index 32a147d34..02023559b 100644 --- a/app/controllers/public/api/v1/portals/articles_controller.rb +++ b/app/controllers/public/api/v1/portals/articles_controller.rb @@ -7,7 +7,11 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B def index @articles = @portal.articles.published.includes(:category, :author) + + @articles = @articles.where(locale: permitted_params[:locale]) if permitted_params[:locale].present? + @articles_count = @articles.count + search_articles order_by_sort_param limit_results diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/ArticleView.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/ArticleView.vue index f2a2ab4d6..7c7dd0040 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/ArticleView.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/ArticleView.vue @@ -1,6 +1,7 @@ @@ -66,6 +58,7 @@ export default {