Help centers using the documentation layout now render correctly in two cases that previously fell back to the wrong output. Opening a portal at its custom-domain root (e.g. docs.example.com/ ) now shows the full documentation home in place instead of the classic layout, and portals whose locale is a region variant that Chatwoot doesn't ship a translation for (e.g. th_TH , fr_ML ) now show their categories in the sidebar on article pages. Closes https://linear.app/chatwoot/issue/CW-7437/portal-layout-is-not-properly-working-in-custom-domain ## How to test 1. Create a portal with the documentation layout and a custom domain (e.g. example.chat.test ), with at least one category containing a published article. 2. Visit the custom-domain root ( http://example.chat.test:3000/ ) → it should show the full documentation home (sidebar, topbar), not the classic layout, with no redirect. 3. Set the portal's locale to a region variant Chatwoot doesn't translate, e.g. th_TH , with categories/articles under that locale. 4. Open an article → the sidebar should list the article's category and sibling articles. Before the fix the sidebar was empty for these locales. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
30 lines
1.0 KiB
Ruby
30 lines
1.0 KiB
Ruby
module PortalHomeData
|
|
extend ActiveSupport::Concern
|
|
|
|
private
|
|
|
|
def load_home_data
|
|
base_articles = @portal.articles.published.where(locale: @locale).includes(:author, :category)
|
|
@visible_categories = @portal.categories
|
|
.where(locale: @locale)
|
|
.joins(:articles).where(articles: { status: :published })
|
|
.order(position: :asc)
|
|
.group('categories.id')
|
|
@popular_topics = @visible_categories.first(3)
|
|
@featured = base_articles.order_by_views.limit(6)
|
|
@category_contributors = build_category_contributors(@visible_categories)
|
|
end
|
|
|
|
def build_category_contributors(categories)
|
|
category_ids = categories.map(&:id)
|
|
return {} if category_ids.empty?
|
|
|
|
@portal.articles
|
|
.published
|
|
.where(locale: @locale, category_id: category_ids)
|
|
.includes(:author)
|
|
.group_by(&:category_id)
|
|
.transform_values { |articles| articles.filter_map(&:author).uniq.first(3) }
|
|
end
|
|
end
|