De acuerdo, una redirección a una URL externa que contiene el nombre de usuario.
Aquí tienes un ejemplo básico de cómo puedes hacerlo, utilizando la nueva API:
import { apiInitializer } from "discourse/lib/api";
import DButton from "discourse/components/d-button";
export default apiInitializer("1.8.0", (api) => {
const currentUser = api.getCurrentUser();
if (!currentUser) {
return;
}
const url =
"https://example.com/?u=" + encodeURIComponent(currentUser.username);
const iconComponent = `<template>
<li class="calculator">
<DButton
@href={{url}}
@icon="calculator"
class="icon btn-flat"
title="Calculator"
target="_blank"
/>
</li>
</template>`;
api.headerIcons.add("calculator", iconComponent, { before: "search" });
});
calculatores un nombre únicoiconComponentse refiere a una plantillainline glimmercomo ves aquí, pero también puede referirse a un componente de clase glimmer que crees en el directoriocomponents.- Puedes elegir dónde colocar tu icono usando
beforeoafterseguido del nombre único del icono de la cabecera.

¡Siéntete libre de ajustar!
Nota:
-
La sintaxis de
inline glimmertemplateno funcionará usando la UI.Necesitarás crear un componente de tema con archivos separados. Para generar un TC rápidamente, puedes usar Discourse CLI y desarrollarlo muy fácilmente con tu editor de código. Lo recomiendo encarecidamente.
También puedes usar la plantilla en Github: GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes.
- Para usar un componente glimmer, la extensión del archivo debe ser
.gjs.
- Para usar un componente glimmer, la extensión del archivo debe ser
¡Avísame si necesitas más ayuda!