I’m legitimately freaking out. I am trying to render a .gjs component, but that doesn’t show up. I tried rendering in template tags <h1>Hi</h1>
, but even that won’t show up. What is going on?
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
api.renderInOutlet("above-main-container", <template><h1>Hi</h1></template>);
});
I’ve omitted the component import because it doesn’t render with/without it.
I honestly don’t know what I’m doing wrong.
I am incredibly blind. The file was in api_initializers, not api-initializers .
إعجابَين (2)
Great… now my component isn’t rendering…
Does anyone have any ideas?
My api-initializers file:
import { apiInitializer } from "discourse/lib/api";
import CategoryHeader from "../components/category-header";
export default apiInitializer((api) => {
api.renderInOutlet("above-category-heading", CategoryHeader);
});
And my component (.gjs) file:
import icon from "discourse/helpers/d-icon";
import Component from "@glimmer/component";
import { inject as service } from "@ember/service";
export default class CategoryHeader extends Component {
@service siteSettings;
get ifParentCategory() {
if (this.args.category.parentCategory) {
return true;
}
}
get catDesc() {
if (settings.show_category_description) {
return true;
}
}
get logoImg() {
if (settings.show_category_logo && this.args.category.uploaded_logo) {
return this.args.category.uploaded_logo.url;
} else if (settings.show_category_logo && settings.show_parent_category_logo && this.args.category.parentCategory && this.args.category.parentCategory.uploaded_logo) {
return this.args.category.parentCategory.uploaded_logo.url;
} else if (settings.show_site_logo && this.siteSettings.logo_small) {
return this.siteSettings.logo_small;
}
}
get ifParentProtected() {
if (this.args.category.parentCategory && this.args.category.parentCategory.read_restricted) {
return true;
}
}
get ifProtected() {
if (this.args.category.read_restricted) {
return true;
}
}
get lockIcon() {
return settings.category_lock_icon || 'lock';
}
get showHeader() {
console.log(this.args.category);
const isException = this.args.category && settings.hide_category_exceptions.split("|").includes(this.args.category.name);
const hideMobile = !settings.show_mobile && this.site.mobileView;
const subCat = !settings.show_subcategory_header && this.args.category.parentCategory;
const noDesc = !settings.hide_if_no_category_description && !this.args.category.description_text;
const path = window.location.pathname;
return (/^\/c\//.test(path)
&& !isException
&& !noDesc
&& !subCat
&& !hideMobile
);
}
get getHeaderStyle() {
let headerStyle = "";
if (settings.header_style == "box") {
headerStyle += "border-left: 6px solid #" + this.args.category.color + ";"
}
if (settings.header_style == "banner") {
headerStyle += "background-color: #" + this.args.category.color + "; color: #" + this.args.category.text_color + ";"
}
if (this.args.category.uploaded_background) {
if (settings.header_background_image != "outside"){
headerStyle += "background-image: url(" + this.args.category.uploaded_background.url + ");"
}
}
return headerStyle;
}
get aboutTopicUrl() {
if (settings.show_read_more_link && this.args.category.topic_url) {
return settings.read_more_link_text;
}
}
<template>
{{#if this.showHeader}}
<div class="category-title-header category-banner-{{this.args.category.slug}}" style="{{this.getHeaderStyle}}">
<div class="category-title-contents">
<div class="category-logo aspect-image">
<img src="{{this.logoImg}}">
</div>
<div class="category-title-name">
{{#if this.ifParentProtected}}
{{icon this.lockIcon}}
{{/if}}
{{#if this.ifParentCategory}}
<a class="parent-box-link" href="{{this.args.category.parentCategory.url}}">
<h1>{{this.args.category.parentCategory.name}}: </h1>
</a>
{{/if}}
{{#if this.ifProtected}}
{{icon this.lockIcon}}
{{/if}}
<h1>{{this.args.category.name}}</h1>
</div>
<div class="category-title-description">
{{#if this.catDesc}}
<div class="cooked">
{{this.args.category.description}}
</div>
{{/if}}
</div>
</div>
<div class="category-about-url">
<a href="{{this.args.category.topic_url}}">{{this.aboutTopicUrl}}</a>
</div>
</div>
{{/if}}
</template>
}
Everything looks technically correct, so why doesn’t it render ..?
This may look familiar… yes, I’m trying to switch widgets for Glimmer components.
nolo
(Manuel)
27 يونيو 2025، 9:39ص
4
How do you conclude that it looks correct, did you follow basic steps?
Check eslint errors and warnings and resolve them
Check console errors and warnings and resolve them
إعجابَين (2)
Didn’t see any so I skipped the first one.
Turns out
إعجاب واحد (1)
@nolo So I’ve fixed everything (except for some vague Prettier errors:
) but nothing renders. Still no error in the browser console, except for a warning about
, but I don’t think that could be the cause?
Any ideas?
Alteras
(Steven Chang)
27 يونيو 2025، 4:34م
7
I’m not sure what your current code is after your fixes, but seeing the warning you’re getting, the .category-title-header
div should at least be rendering in the DOM.
I recommend inspecting the page in your browser. Also, try tossing in a bunch of console.log
to see where the application reaches the code. Alternatively, there is a the Ember Inspector browser extension available for Chrome and Firefox that will let you read the component tree.
إعجاب واحد (1)
nolo
(Manuel)
27 يونيو 2025، 5:44م
8
NateDhaliwal:
Any ideas?
If you can, the easiest way to get feedback on this would be to share your repo. The files you shared above are not stand-alone and require a settings file as well.
Yes, sorry for not including that earlier. That would be:
(The fix-compatibility-issues-new-new
branch.)
Steven Chang:
I recommend inspecting the page in your browser. Also, try tossing in a bunch of console.log
to see where the application reaches the code. Alternatively, there is a the Ember Inspector browser extension available for Chrome and Firefox that will let you read the component tree.
Thanks, I’ll take a closer look into that.
@Alteras It’s actually there, but not showing for some reason. Adding display: block !important
made it appear, but the styling is now quite different
EDIT: Got the CSS fixed, and the headers are now displaying. Thanks so much @merefield @Alteras @nolo !
إعجابَين (2)
nolo
(Manuel)
28 يونيو 2025، 9:24ص
11
Seems to work fine now
I still get some undefined errors in the console. You should use optional chaining with the ?.
operator when looking up nested structures. For example:
this.args.category.description?.replace
I also just saw that error when there is no category description. Thanks for the suggestion!
إعجاب واحد (1)