Componente de Tema do Botão de Logout do Menu Superior

Vou empacotar e postar um Componente de Tema no GitHub para adicionar um botão de Logout ao menu superior se alguém puder me informar como atualizar o código do @pfaffman aqui…

:pray: :pray: :pray:

(No momento, seguir essas instruções e habilitar o componente faz com que todo o Menu Superior desapareça :crying_cat_face: )

1 curtida

Algo assim. Sinta-se à vontade para ajustar às suas necessidades.

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 curtidas

OK, eu implementei, mas agradeceria qualquer teste antes de enviar para o Meta…

(Acabei usando o Central Theme Header User Icons - #4 by carson do Carson como ponto de partida)

2 curtidas

Não recomendo o uso de um widget; ele eventualmente desaparecerá como parte da modernização principal.

O mesmo vale para api.addToHeaderIcons; agora está obsoleto em favor de api.headerIcons.add.

Aqui estão algumas sugestões:

  • Encorajo você a usar o GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes como referência ao criar um componente de tema. Ele contém os arquivos de configuração mais recentes. É útil para linting/prettifying de código e uma boa prática ter uma estrutura padrão.

  • Ao usar a sintaxe \u003ctemplate\u003e, renomeie o arquivo com .gjs (glimmer JS); caso contrário, pode não funcionar.

  • No meu exemplo, você poderia mover o template para seu próprio arquivo, por exemplo:
    /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;

Em seguida, no inicializador, importe o componente e use-o como parâmetro em 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" });
  }
});

  • A localização do botão pode ser ajustada. Você pode ler a documentação:

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

Me avise se tiver dúvidas. Posso sempre criar um PR mais tarde se precisar de um exemplo. :+1:

3 curtidas

Simplesmente incrível. Muito obrigado por dedicar tempo para me guiar!

1 curtida

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