Componente de tema del botón de cierre de sesión del menú superior

No recomendaría usar un widget; eventualmente desaparecerá como parte de la modernización principal.

Lo mismo ocurre con api.addToHeaderIcons; ahora está obsoleto en favor de api.headerIcons.add.

Aquí hay algunas sugerencias:

  • Te animo a usar GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes como referencia al crear un componente de tema. Contiene los últimos archivos de configuración. Es útil para linting/prettifying código y una buena práctica tener una estructura estándar.

  • Al usar la sintaxis de \u003ctemplate\u003e, renombra el archivo con .gjs (glimmer JS); de lo contrario, puede que no funcione.

  • En mi ejemplo, podrías mover la plantilla a su archivo, por ejemplo:
    /javascripts/discourse/components/logout-header-button.gjs

import DButton from "discourse/components/d-button";
import routeAction from "discourse/helpers/route-action";

const LogoutHeaderButton = \u003ctemplate\u003e
  \u003cli class="logout"\u003e
    \u003cDButton
      @action={{routeAction "logout"}}
      class="btn-flat icon"
      @icon="sign-out-alt"
      @title="user.log_out"
      @label="user.log_out"
    /\u003e
  \u003c/li\u003e
\u003c/template\u003e;

export default LogoutHeaderButton;

Luego, en el inicializador, importas el componente y lo usas como parámetro en headerIcons:

import LogoutHeaderButton from "../components/logout-header-button";

export default apiInitializer("1.28.0", (api) =\u003e {
  if (api.getCurrentUser()) {
    api.headerIcons.add("logout", LogoutHeaderButton, { before: "auth" });
  }
});

  • La ubicación del botón se puede ajustar. Puedes leer la documentación:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.gjs#L1838-L1886

Avísame si tienes preguntas. Siempre puedo hacer un PR más tarde si necesitas un ejemplo. :+1: