From bc19b409f7d88a72abf1c08d019f66808ddeb052 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Tue, 20 May 2025 18:44:25 +0100 Subject: [PATCH 1/7] PERF: Introduce lazyHash and update PluginOutlet calls to use it This is a more efficient version of `{{hash`, where the values are only evaluated when they're actually accessed --- .../addon/components/admin-badges-show.gjs | 3 +- .../admin-config-areas/webhooks-form.gjs | 3 +- .../components/admin-plugins-list-item.gjs | 9 ++--- .../components/admin-user-fields-form.gjs | 3 +- .../addon/components/themes-list-item.gjs | 3 +- .../admin/addon/components/version-checks.gjs | 3 +- .../addon/templates/customize-themes-show.gjs | 7 ++-- .../addon/templates/dashboard_general.gjs | 3 +- .../addon/templates/dashboard_moderation.gjs | 3 +- .../admin/addon/templates/embedding-index.gjs | 3 +- .../admin/addon/templates/plugins-index.gjs | 3 +- .../admin/addon/templates/user-badges.gjs | 5 +-- .../admin/addon/templates/user-index.gjs | 9 ++--- .../admin/addon/templates/users-list-show.gjs | 10 ++++-- .../discourse/app/components/about-page.gjs | 7 ++-- .../discourse/app/components/badge-card.gjs | 3 +- .../app/components/bookmark-list.gjs | 3 +- .../discourse/app/components/bread-crumbs.gjs | 5 +-- .../categories-boxes-with-topics.gjs | 3 +- .../app/components/categories-boxes.gjs | 11 ++++--- .../app/components/categories-only.gjs | 10 ++++-- .../app/components/category-name-fields.gjs | 3 +- .../app/components/category-title-before.gjs | 3 +- .../app/components/composer-container.gjs | 29 +++++++++------- .../app/components/composer-editor.gjs | 6 +++- .../app/components/composer-title.gjs | 3 +- .../conditional-loading-spinner.gjs | 3 +- .../discourse/app/components/d-navigation.gjs | 7 ++-- .../discovery/categories-display.gjs | 3 +- .../discovery/filter-navigation.gjs | 3 +- .../app/components/discovery/layout.gjs | 17 +++++----- .../app/components/discovery/navigation.gjs | 9 ++--- .../app/components/discovery/topics.gjs | 7 ++-- .../app/components/edit-category-general.gjs | 3 +- .../app/components/edit-category-security.gjs | 3 +- .../app/components/edit-category-settings.gjs | 5 +-- .../app/components/emoji-picker/content.gjs | 3 +- .../discourse/app/components/fast-edit.gjs | 3 +- .../app/components/google-search.gjs | 3 +- .../discourse/app/components/group-card.gjs | 3 +- .../discourse/app/components/group-info.gjs | 3 +- .../app/components/group-navigation.gjs | 3 +- .../groups-form-interaction-fields.gjs | 5 +-- .../groups-form-membership-fields.gjs | 3 +- .../components/groups-form-profile-fields.gjs | 3 +- .../discourse/app/components/header.gjs | 3 +- .../app/components/header/contents.gjs | 9 ++--- .../app/components/header/home-logo.gjs | 8 +++-- .../app/components/header/topic/info.gjs | 9 ++--- .../discourse/app/components/modal/flag.gjs | 5 +-- .../app/components/modal/history/revision.gjs | 3 +- .../components/modal/history/revisions.gjs | 3 +- .../app/components/modal/move-to-topic.gjs | 7 ++-- .../app/components/modal/share-topic.gjs | 3 +- .../app/components/navigation-bar.gjs | 7 ++-- .../app/components/notifications-tracking.gjs | 3 +- .../app/components/parent-category-row.gjs | 24 ++++++++------ .../app/components/post-list/item/details.gjs | 5 +-- .../post-text-selection-toolbar.gjs | 7 ++-- .../components/post-translation-editor.gjs | 6 +++- .../discourse/app/components/post/avatar.gjs | 3 +- .../discourse/app/components/post/menu.gjs | 3 +- .../components/post/meta-data/poster-name.gjs | 11 +++++-- .../components/reviewable-created-by-name.gjs | 3 +- .../components/reviewable-flagged-post.gjs | 3 +- .../app/components/reviewable-item.gjs | 3 +- .../components/search-advanced-options.gjs | 5 +-- .../discourse/app/components/search-menu.gjs | 3 +- .../app/components/search-menu/results.gjs | 7 ++-- .../search-menu/results/assistant.gjs | 3 +- .../search-menu/results/initial-options.gjs | 3 +- .../search-menu/results/type/topic.gjs | 3 +- .../components/search-menu/results/types.gjs | 3 +- .../app/components/search-result-entry.gjs | 11 ++++--- .../components/sidebar/hamburger-dropdown.gjs | 3 +- .../subcategories-with-featured-topics.gjs | 5 +-- .../discourse/app/components/tag-info.gjs | 3 +- .../app/components/topic-category.gjs | 3 +- .../app/components/topic-footer-buttons.gjs | 7 ++-- .../topic-list/header/sortable-column.gjs | 3 +- .../app/components/topic-list/item.gjs | 25 +++++++------- .../topic-list/item/activity-cell.gjs | 3 +- .../topic-list/item/replies-cell.gjs | 3 +- .../components/topic-list/item/topic-cell.gjs | 19 ++++++----- .../components/topic-list/item/views-cell.gjs | 3 +- .../topic-list/latest-topic-list-item.gjs | 15 +++++---- .../app/components/topic-list/list.gjs | 7 ++-- .../app/components/topic-list/topic-link.gjs | 3 +- .../app/components/topic-map/index.gjs | 5 +-- .../topic-map/topic-map-summary.gjs | 3 +- .../topic-map/topic-participant.gjs | 3 +- .../discourse/app/components/topic-status.gjs | 3 +- .../components/topic-timeline/container.gjs | 5 +-- .../discourse/app/components/topic-title.gjs | 3 +- .../app/components/user-card-contents.gjs | 27 +++++++-------- .../discourse/app/components/user-info.gjs | 5 +-- .../app/components/user-menu/items-list.gjs | 9 ++--- .../app/components/user-menu/menu.gjs | 3 +- .../discourse/app/components/user-nav.gjs | 3 +- .../user-preferences/categories.gjs | 5 +-- .../app/components/user-preferences/tags.gjs | 5 +-- .../app/components/user-profile-avatar.gjs | 7 ++-- .../app/components/user-stream-item.gjs | 5 +-- .../discourse/app/components/user-stream.gjs | 5 +-- .../app/components/user-summary-topic.gjs | 3 +- .../discourse/app/helpers/lazy-hash.js | 14 ++++++++ .../wizard/components/fields/checkbox.gjs | 5 +-- .../static/wizard/components/fields/radio.gjs | 5 +-- .../static/wizard/components/wizard-field.gjs | 5 +-- .../discourse/app/templates/about.gjs | 3 +- .../discourse/app/templates/application.gjs | 17 ++++++---- .../discourse/app/templates/badges/show.gjs | 3 +- .../app/templates/discovery/categories.gjs | 3 +- .../templates/discovery/login-required.gjs | 7 ++-- .../app/templates/full-page-search.gjs | 11 ++++--- .../discourse/app/templates/group-index.gjs | 5 +-- .../discourse/app/templates/group.gjs | 5 +-- .../app/templates/group/manage/tags.gjs | 3 +- .../discourse/app/templates/login.gjs | 9 +++-- .../discourse/app/templates/preferences.gjs | 7 ++-- .../app/templates/preferences/account.gjs | 5 +-- .../app/templates/preferences/apps.gjs | 3 +- .../app/templates/preferences/emails.gjs | 7 ++-- .../app/templates/preferences/interface.gjs | 7 ++-- .../templates/preferences/notifications.gjs | 10 ++++-- .../app/templates/preferences/profile.gjs | 7 ++-- .../app/templates/preferences/security.gjs | 5 +-- .../app/templates/preferences/tracking.gjs | 3 +- .../app/templates/preferences/users.gjs | 3 +- .../discourse/app/templates/review-index.gjs | 3 +- .../discourse/app/templates/signup.gjs | 9 ++--- .../discourse/app/templates/tags/index.gjs | 3 +- .../discourse/app/templates/topic.gjs | 33 ++++++++++--------- .../discourse/app/templates/user.gjs | 17 +++++----- .../discourse/app/templates/user/activity.gjs | 3 +- .../discourse/app/templates/user/badges.gjs | 5 +-- .../app/templates/user/collapsed-info.gjs | 5 +-- .../discourse/app/templates/user/messages.gjs | 5 +-- .../templates/user/notifications-index.gjs | 5 +-- .../app/templates/user/notifications.gjs | 3 +- .../discourse/app/templates/user/summary.gjs | 14 +++++--- .../discourse/app/templates/users.gjs | 5 +-- .../plugin-outlet-decorator-test.gjs | 3 +- .../components/plugin-outlet-test.gjs | 31 ++++++++--------- .../components/channel-name/index.gjs | 3 +- .../components/channels-list-direct.gjs | 3 +- .../components/channels-list-public.gjs | 3 +- .../discourse/components/chat-composer.gjs | 3 +- .../discourse/components/chat-drawer.gjs | 3 +- .../toggle-channel-membership-button.gjs | 3 +- 150 files changed, 562 insertions(+), 361 deletions(-) create mode 100644 app/assets/javascripts/discourse/app/helpers/lazy-hash.js diff --git a/app/assets/javascripts/admin/addon/components/admin-badges-show.gjs b/app/assets/javascripts/admin/addon/components/admin-badges-show.gjs index ff2c31cb6cfed..1936cd7a59ec6 100644 --- a/app/assets/javascripts/admin/addon/components/admin-badges-show.gjs +++ b/app/assets/javascripts/admin/addon/components/admin-badges-show.gjs @@ -8,6 +8,7 @@ import Form from "discourse/components/form"; import PluginOutlet from "discourse/components/plugin-outlet"; import icon from "discourse/helpers/d-icon"; import iconOrImage from "discourse/helpers/icon-or-image"; +import lazyHash from "discourse/helpers/lazy-hash"; import routeAction from "discourse/helpers/route-action"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; @@ -555,7 +556,7 @@ export default class AdminBadgesShow extends Component { diff --git a/app/assets/javascripts/admin/addon/components/admin-config-areas/webhooks-form.gjs b/app/assets/javascripts/admin/addon/components/admin-config-areas/webhooks-form.gjs index 7d19f2b8f8529..a9d9e3654ee63 100644 --- a/app/assets/javascripts/admin/addon/components/admin-config-areas/webhooks-form.gjs +++ b/app/assets/javascripts/admin/addon/components/admin-config-areas/webhooks-form.gjs @@ -9,6 +9,7 @@ import ConditionalLoadingSection from "discourse/components/conditional-loading- import Form from "discourse/components/form"; import GroupSelector from "discourse/components/group-selector"; import PluginOutlet from "discourse/components/plugin-outlet"; +import lazyHash from "discourse/helpers/lazy-hash"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { i18n } from "discourse-i18n"; import WebhookEventChooser from "admin/components/webhook-event-chooser"; @@ -260,7 +261,7 @@ export default class AdminConfigAreasWebhookForm extends Component {
@@ -109,7 +110,7 @@ export default class AdminPluginsListItem extends Component {
{{@plugin.version}}
@@ -122,7 +123,7 @@ export default class AdminPluginsListItem extends Component {
{{#if @plugin.enabledSetting}} {{#if this.showPluginSettingsButton}} {{#if @plugin.useNewShowRoute}} diff --git a/app/assets/javascripts/admin/addon/components/admin-user-fields-form.gjs b/app/assets/javascripts/admin/addon/components/admin-user-fields-form.gjs index 0695499ba493e..811425317bce9 100644 --- a/app/assets/javascripts/admin/addon/components/admin-user-fields-form.gjs +++ b/app/assets/javascripts/admin/addon/components/admin-user-fields-form.gjs @@ -8,6 +8,7 @@ import { service } from "@ember/service"; import { eq, or } from "truth-helpers"; import Form from "discourse/components/form"; import PluginOutlet from "discourse/components/plugin-outlet"; +import lazyHash from "discourse/helpers/lazy-hash"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { i18n } from "discourse-i18n"; import ValueList from "admin/components/value-list"; @@ -250,7 +251,7 @@ export default class AdminUserFieldsForm extends Component { diff --git a/app/assets/javascripts/admin/addon/components/themes-list-item.gjs b/app/assets/javascripts/admin/addon/components/themes-list-item.gjs index ef7adbd18e05f..6157180e7b135 100644 --- a/app/assets/javascripts/admin/addon/components/themes-list-item.gjs +++ b/app/assets/javascripts/admin/addon/components/themes-list-item.gjs @@ -8,6 +8,7 @@ import { htmlSafe } from "@ember/template"; import PluginOutlet from "discourse/components/plugin-outlet"; import concatClass from "discourse/helpers/concat-class"; import icon from "discourse/helpers/d-icon"; +import lazyHash from "discourse/helpers/lazy-hash"; import escape from "discourse/lib/escape"; import { iconHTML } from "discourse/lib/icon-library"; import { i18n } from "discourse-i18n"; @@ -88,7 +89,7 @@ export default class ThemesListItem extends Component { diff --git a/app/assets/javascripts/admin/addon/components/version-checks.gjs b/app/assets/javascripts/admin/addon/components/version-checks.gjs index ad947d9b079ad..59e6eb1035329 100644 --- a/app/assets/javascripts/admin/addon/components/version-checks.gjs +++ b/app/assets/javascripts/admin/addon/components/version-checks.gjs @@ -4,6 +4,7 @@ import CustomHtml from "discourse/components/custom-html"; import PluginOutlet from "discourse/components/plugin-outlet"; import icon from "discourse/helpers/d-icon"; import dashIfEmpty from "discourse/helpers/dash-if-empty"; +import lazyHash from "discourse/helpers/lazy-hash"; import { i18n } from "discourse-i18n"; export default class VersionChecks extends Component { @@ -150,7 +151,7 @@ export default class VersionChecks extends Component {
diff --git a/app/assets/javascripts/admin/addon/templates/customize-themes-show.gjs b/app/assets/javascripts/admin/addon/templates/customize-themes-show.gjs index 09a15d52664b2..caeec2b6e93ad 100644 --- a/app/assets/javascripts/admin/addon/templates/customize-themes-show.gjs +++ b/app/assets/javascripts/admin/addon/templates/customize-themes-show.gjs @@ -12,6 +12,7 @@ import icon from "discourse/helpers/d-icon"; import formatDate from "discourse/helpers/format-date"; import formatUsername from "discourse/helpers/format-username"; import htmlSafe from "discourse/helpers/html-safe"; +import lazyHash from "discourse/helpers/lazy-hash"; import { i18n } from "discourse-i18n"; import InlineEditCheckbox from "admin/components/inline-edit-checkbox"; import ThemeSettingEditor from "admin/components/theme-setting-editor"; @@ -55,7 +56,7 @@ export default RouteTemplate( @@ -84,7 +85,7 @@ export default RouteTemplate( {{#each @controller.model.errors as |error|}} @@ -564,7 +565,7 @@ export default RouteTemplate( diff --git a/app/assets/javascripts/admin/addon/templates/embedding-index.gjs b/app/assets/javascripts/admin/addon/templates/embedding-index.gjs index 4f2c5c9cf11b7..fb1e18f01c7fa 100644 --- a/app/assets/javascripts/admin/addon/templates/embedding-index.gjs +++ b/app/assets/javascripts/admin/addon/templates/embedding-index.gjs @@ -2,6 +2,7 @@ import { hash } from "@ember/helper"; import RouteTemplate from "ember-route-template"; import PluginOutlet from "discourse/components/plugin-outlet"; import htmlSafe from "discourse/helpers/html-safe"; +import lazyHash from "discourse/helpers/lazy-hash"; import { i18n } from "discourse-i18n"; import AdminConfigAreaCard from "admin/components/admin-config-area-card"; import AdminConfigAreaEmptyList from "admin/components/admin-config-area-empty-list"; @@ -60,7 +61,7 @@ export default RouteTemplate( ); diff --git a/app/assets/javascripts/admin/addon/templates/plugins-index.gjs b/app/assets/javascripts/admin/addon/templates/plugins-index.gjs index a48660cb2317e..4c6c6e60c9c1c 100644 --- a/app/assets/javascripts/admin/addon/templates/plugins-index.gjs +++ b/app/assets/javascripts/admin/addon/templates/plugins-index.gjs @@ -5,6 +5,7 @@ import DPageHeader from "discourse/components/d-page-header"; import NavItem from "discourse/components/nav-item"; import PluginOutlet from "discourse/components/plugin-outlet"; import icon from "discourse/helpers/d-icon"; +import lazyHash from "discourse/helpers/lazy-hash"; import { i18n } from "discourse-i18n"; import AdminPluginsList from "admin/components/admin-plugins-list"; @@ -64,7 +65,7 @@ export default RouteTemplate( diff --git a/app/assets/javascripts/admin/addon/templates/user-badges.gjs b/app/assets/javascripts/admin/addon/templates/user-badges.gjs index 633b36d91f9e8..18fdd5a319e7b 100644 --- a/app/assets/javascripts/admin/addon/templates/user-badges.gjs +++ b/app/assets/javascripts/admin/addon/templates/user-badges.gjs @@ -9,6 +9,7 @@ import UserBadge from "discourse/components/user-badge"; import ageWithTooltip from "discourse/helpers/age-with-tooltip"; import avatar from "discourse/helpers/avatar"; import icon from "discourse/helpers/d-icon"; +import lazyHash from "discourse/helpers/lazy-hash"; import { i18n } from "discourse-i18n"; import ComboBox from "select-kit/components/combo-box"; @@ -34,7 +35,7 @@ export default RouteTemplate( {{else}} @@ -80,7 +81,7 @@ export default RouteTemplate( {{#if @controller.canCheckEmails}} @@ -319,7 +320,7 @@ export default RouteTemplate( @@ -940,7 +941,7 @@ export default RouteTemplate( diff --git a/app/assets/javascripts/admin/addon/templates/users-list-show.gjs b/app/assets/javascripts/admin/addon/templates/users-list-show.gjs index 25f6e09c0ee28..fa1a8fd1574f7 100644 --- a/app/assets/javascripts/admin/addon/templates/users-list-show.gjs +++ b/app/assets/javascripts/admin/addon/templates/users-list-show.gjs @@ -17,6 +17,7 @@ import icon from "discourse/helpers/d-icon"; import formatDuration from "discourse/helpers/format-duration"; import htmlSafe from "discourse/helpers/html-safe"; import i18nYesNo from "discourse/helpers/i18n-yes-no"; +import lazyHash from "discourse/helpers/lazy-hash"; import number from "discourse/helpers/number"; import rawDate from "discourse/helpers/raw-date"; import { i18n } from "discourse-i18n"; @@ -195,7 +196,10 @@ export default RouteTemplate( {{/if}} {{#if @controller.siteSettings.must_approve_users}} @@ -370,7 +374,7 @@ export default RouteTemplate( {{#if @controller.siteSettings.must_approve_users}} @@ -415,7 +419,7 @@ export default RouteTemplate( diff --git a/app/assets/javascripts/discourse/app/components/about-page.gjs b/app/assets/javascripts/discourse/app/components/about-page.gjs index bcbd56f3621ab..20449734d5e1c 100644 --- a/app/assets/javascripts/discourse/app/components/about-page.gjs +++ b/app/assets/javascripts/discourse/app/components/about-page.gjs @@ -8,6 +8,7 @@ import AboutPageExtraGroups from "discourse/components/about-page-extra-groups"; import AboutPageUsers from "discourse/components/about-page-users"; import PluginOutlet from "discourse/components/plugin-outlet"; import icon from "discourse/helpers/d-icon"; +import lazyHash from "discourse/helpers/lazy-hash"; import escape from "discourse/lib/escape"; import { number } from "discourse/lib/formatter"; import I18n, { i18n } from "discourse-i18n"; @@ -259,7 +260,7 @@ export default class AboutPage extends Component {
@@ -289,7 +290,7 @@ export default class AboutPage extends Component { {{#if @model.moderators.length}} @@ -301,7 +302,7 @@ export default class AboutPage extends Component { {{#if this.showExtraGroups}} diff --git a/app/assets/javascripts/discourse/app/components/badge-card.gjs b/app/assets/javascripts/discourse/app/components/badge-card.gjs index 2005210a77805..0d5e4af6ffb07 100644 --- a/app/assets/javascripts/discourse/app/components/badge-card.gjs +++ b/app/assets/javascripts/discourse/app/components/badge-card.gjs @@ -7,6 +7,7 @@ import { eq, not } from "truth-helpers"; import DButton from "discourse/components/d-button"; import icon from "discourse/helpers/d-icon"; import iconOrImage from "discourse/helpers/icon-or-image"; +import lazyHash from "discourse/helpers/lazy-hash"; import number from "discourse/helpers/number"; import { emojiUnescape, sanitize } from "discourse/lib/text"; import { i18n } from "discourse-i18n"; @@ -52,7 +53,7 @@ export default class BadgeCard extends Component {
diff --git a/app/assets/javascripts/discourse/app/components/bread-crumbs.gjs b/app/assets/javascripts/discourse/app/components/bread-crumbs.gjs index decf0bc3c7115..f5b887ab88628 100644 --- a/app/assets/javascripts/discourse/app/components/bread-crumbs.gjs +++ b/app/assets/javascripts/discourse/app/components/bread-crumbs.gjs @@ -5,6 +5,7 @@ import { classNameBindings, tagName } from "@ember-decorators/component"; // A breadcrumb including category drop downs import PluginOutlet from "discourse/components/plugin-outlet"; import categoryVariables from "discourse/helpers/category-variables"; +import lazyHash from "discourse/helpers/lazy-hash"; import discourseComputed from "discourse/lib/decorators"; import deprecated from "discourse/lib/deprecated"; import CategoryDrop from "select-kit/components/category-drop"; @@ -134,7 +135,7 @@ export default class BreadCrumbs extends Component {
diff --git a/app/assets/javascripts/discourse/app/components/categories-boxes.gjs b/app/assets/javascripts/discourse/app/components/categories-boxes.gjs index 1d793eee4e6e0..6f611822ad73a 100644 --- a/app/assets/javascripts/discourse/app/components/categories-boxes.gjs +++ b/app/assets/javascripts/discourse/app/components/categories-boxes.gjs @@ -12,6 +12,7 @@ import categoryColorVariable from "discourse/helpers/category-color-variable"; import categoryLink, { categoryBadgeHTML, } from "discourse/helpers/category-link"; +import lazyHash from "discourse/helpers/lazy-hash"; import discourseComputed from "discourse/lib/decorators"; @tagName("section") @@ -43,12 +44,12 @@ export default class CategoriesBoxes extends Component { } diff --git a/app/assets/javascripts/discourse/app/components/categories-only.gjs b/app/assets/javascripts/discourse/app/components/categories-only.gjs index 59d7b58f0cfbc..fb23fcf302473 100644 --- a/app/assets/javascripts/discourse/app/components/categories-only.gjs +++ b/app/assets/javascripts/discourse/app/components/categories-only.gjs @@ -6,6 +6,7 @@ import { tagName } from "@ember-decorators/component"; import ParentCategoryRow from "discourse/components/parent-category-row"; import PluginOutlet from "discourse/components/plugin-outlet"; import icon from "discourse/helpers/d-icon"; +import lazyHash from "discourse/helpers/lazy-hash"; import discourseComputed from "discourse/lib/decorators"; import { i18n } from "discourse-i18n"; @@ -63,7 +64,7 @@ export default class CategoriesOnly extends Component { } diff --git a/app/assets/javascripts/discourse/app/components/category-name-fields.gjs b/app/assets/javascripts/discourse/app/components/category-name-fields.gjs index 906a01fad59e8..f148c87c963cf 100644 --- a/app/assets/javascripts/discourse/app/components/category-name-fields.gjs +++ b/app/assets/javascripts/discourse/app/components/category-name-fields.gjs @@ -2,13 +2,14 @@ import Component from "@ember/component"; import { hash } from "@ember/helper"; import PluginOutlet from "discourse/components/plugin-outlet"; import TextField from "discourse/components/text-field"; +import lazyHash from "discourse/helpers/lazy-hash"; import { i18n } from "discourse-i18n"; export default class CategoryNameFields extends Component { diff --git a/app/assets/javascripts/discourse/app/components/topic-list/item.gjs b/app/assets/javascripts/discourse/app/components/topic-list/item.gjs index 6d8b064b24e42..e41cc313c99b3 100644 --- a/app/assets/javascripts/discourse/app/components/topic-list/item.gjs +++ b/app/assets/javascripts/discourse/app/components/topic-list/item.gjs @@ -17,6 +17,7 @@ import categoryLink from "discourse/helpers/category-link"; import concatClass from "discourse/helpers/concat-class"; import discourseTags from "discourse/helpers/discourse-tags"; import formatDate from "discourse/helpers/format-date"; +import lazyHash from "discourse/helpers/lazy-hash"; import topicFeaturedLink from "discourse/helpers/topic-featured-link"; import { wantsNewWindow } from "discourse/lib/intercept-click"; import { @@ -260,13 +261,13 @@ export default class Item extends Component { > {{! Do not include @columns as argument to the wrapper outlet below ~}} {{! We don't want it to be able to override core behavior just copy/pasting the code ~}}