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

Publicaré un componente temático en GitHub para agregar un botón de cierre de sesión al menú superior si alguien pudiera informarme cómo actualizar el código de @pfaffman aquí…

:pray: :pray: :pray:

(Por el momento, seguir esas instrucciones y habilitar el componente solo hace que desaparezca todo el menú superior :crying_cat_face: )

1 me gusta

Algo así. Siéntete libre de ajustar según tus necesidades.

import DButton from "discourse/components/d-button";
import routeAction from "discourse/helpers/route-action";
import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("1.28.0", (api) => {
  if (api.getCurrentUser()) {
    api.headerIcons.add(
      "logout",
      `<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>`,
      { before: "auth" }
    );
  }
});
.d-header-icons .logout {
  margin-left: 1em;

  button.icon {
    width: auto;

    padding-left: 0.5em;
    padding-right: 0.5em;

    svg {
      margin-right: 0.2em;
      width: 1em;
    }
  }
}

image

3 Me gusta

OK, lo he implementado, pero agradecería cualquier prueba antes de enviarlo a Meta…

(Terminé usando el enlace de Carson Central Theme Header User Icons - #4 by carson como punto de partida)

2 Me gusta

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:

3 Me gusta

Simplemente increíble. ¡Muchas gracias por tomarte el tiempo de guiarme!

1 me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.