Конечно, вы можете попробовать что-то вроде этого во вкладке «Header» вашей темы или компонента. Я оставил несколько комментариев в сниппете, чтобы вы могли следить за процессом. Вы можете удалить их, когда будете готовы использовать код.
Действуют те же правила. Если пользователь является участником группы и у группы есть сообщения, Discourse перенаправит его в входящие сообщения группы. В противном случае пользователь попадёт в каталог участников.
<script type="text/discourse-plugin" version="0.8">
// Часть 1: изменение пути для ссылок в карточках групп. Это гарантирует, что
// заголовок ссылки отражает её назначение, а также обрабатывает открытие ссылки в новой вкладке.
const discourseComputed = require("discourse-common/utils/decorators").default;
api.modifyClass("component:group-card-contents", {
// Свойство groupPath используется для генерации href для ссылок на группы
// в карточке группы. Давайте изменим его
@discourseComputed("group")
groupPath(group) {
// получаем значение по умолчанию из ядра
let groupURL = this._super(...arguments);
// если пользователь соответствует нашим требованиям, изменяем URL, чтобы он вел в входящие
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// возвращаем либо значение по умолчанию, либо изменённое
return groupURL;
}
});
// Часть 2: изменение маршрутизации внутри приложения. Это гарантирует, что обычная навигация
// внутри приложения обрабатывается корректно и направляет пользователя в входящие сообщения группы,
// если он соответствует требованиям
const DiscourseURL = require("discourse/lib/url").default;
const { groupPath } = require("discourse/lib/url");
const { action } = require("@ember/object");
api.modifyClass("controller:user-card", {
// showGroup здесь — это действие, принадлежащее контроллеру user-card.
// Именно оно вызывается при клике на имя группы / аватарку внутри карточек групп
@action
showGroup(group) {
// вызываем super, чтобы убедиться, что код из ядра загружен первым
this._super(...arguments);
// groupPath — это встроенная функция-помощник URL в Discourse
let groupURL = groupPath(group.name);
// если пользователь соответствует требованиям, изменяем URL
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// вызываем routeTo() с либо значением по умолчанию, либо изменённым groupURL
DiscourseURL.routeTo(groupURL);
}
});
</script>