Я бы не рекомендовал использовать виджет: в конечном итоге он исчезнет в рамках модернизации ядра.
То же самое касается api.addToHeaderIcons: теперь он устарел в пользу api.headerIcons.add.
Вот несколько рекомендаций:
-
Я рекомендую использовать GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes · GitHub в качестве справочника при создании компонента темы. В нём содержатся актуальные файлы конфигурации. Это полезно для линтинга/форматирования кода, а наличие стандартной структуры — хорошая практика.
-
При использовании синтаксиса
<template>переименуйте файл в.gjs(Glimmer JS); в противном случае он может не работать. -
В моём примере вы можете переместить шаблон в отдельный файл, например:
/javascripts/discourse/components/logout-header-button.gjs
import DButton from "discourse/components/d-button";
import routeAction from "discourse/helpers/route-action";
const LogoutHeaderButton = <template>
<li class="logout">
<DButton
@action={{routeAction "logout"}}
class="btn-flat icon"
@icon="sign-out-alt"
@title="user.log_out"
@label="user.log_out"
/>
</li>
</template>;
export default LogoutHeaderButton;
Затем в инициализаторе импортируйте компонент и используйте его как параметр в headerIcons:
import LogoutHeaderButton from "../components/logout-header-button";
export default apiInitializer("1.28.0", (api) => {
if (api.getCurrentUser()) {
api.headerIcons.add("logout", LogoutHeaderButton, { before: "auth" });
}
});
- Расположение кнопки можно настроить. Вы можете ознакомиться с документацией:
Дайте знать, если возникнут вопросы. Если понадобится пример, я всегда могу отправить pull request. ![]()