Claro, puedes probar algo como esto en la pestaña de encabezado de tu tema/componente. Dejé algunos comentarios en el fragmento si quieres seguirlo. Puedes eliminarlos una vez que estés listo para usarlo.
Se aplican las mismas reglas. Si el usuario es miembro del grupo y el grupo tiene mensajes, Discourse navegará a la bandeja de entrada del grupo. De lo contrario, el usuario aterrizará en el directorio de miembros.
<script type="text/discourse-plugin" version="0.8">
// Parte 1: modifica la ruta de los enlaces en las tarjetas de grupo. Esto asegura que el título del enlace
// refleje a dónde conduce y maneje la apertura del enlace en una nueva pestaña.
const discourseComputed = require("discourse-common/utils/decorators").default;
api.modifyClass("component:group-card-contents", {
// La propiedad groupPath se utiliza para generar el href para los enlaces de grupo
// en la tarjeta de grupo. Vamos a modificarla
@discourseComputed("group")
groupPath(group) {
// obtén el valor predeterminado del núcleo
let groupURL = this._super(...arguments);
// si el usuario coincide con nuestro requisito, modifica la url para que vaya a la bandeja de entrada
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// devuelve el valor predeterminado o modificado
return groupURL;
}
});
// Parte 2: modifica el enrutamiento dentro de la aplicación. Esto asegura que la navegación normal dentro de la aplicación
// se maneje correctamente y lleve al usuario a la bandeja de entrada del grupo si cumple los
// requisitos
const DiscourseURL = require("discourse/lib/url").default;
const { groupPath } = require("discourse/lib/url");
const { action } = require("@ember/object");
api.modifyClass("controller:user-card", {
// showGroup aquí es una acción que pertenece al controlador user-card.
// Esto es lo que se llama cuando haces clic en el nombre/avatar del grupo dentro de las tarjetas de grupo
@action
showGroup(group) {
// llama a super para asegurarte de que el código del núcleo se cargue primero
this._super(...arguments);
// group path es una función de ayuda de url de Discourse incorporada
let groupURL = groupPath(group.name);
// si el usuario cumple los requisitos, modifica la url
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// llama a routeTo() con la url de grupo predeterminada o modificada
DiscourseURL.routeTo(groupURL);
}
});
</script>