Como adicionar ação para botão no plugin

Quero criar um plugin para exibir um botão e executar alguma ação. O botão já pode ser exibido no local desejado, mas não sei como criar uma ação personalizada para ele. A estrutura de arquivos é a seguinte:

plugins/discourse-my-plugin
├── assets
│   ├── javascripts
│   │   └── discourse
│   │       ├── initializers
│   │       │   └── my-plugin.js.es6
│   │       └── templates
│   │           └── connectors
│   │               └── user-messages-nav
│   │                   ├── actions.js.es6
│   │                   └── button.hbs
├── config
└── plugin.rb

initializers/my-plugin.js.es6

import { withPluginApi } from "discourse/lib/plugin-api";

function initializeButton(api) {
  api.decoratePluginOutlet('user-messages-nav', (elem, args) => {
    ...
  });
}
export default {
  name: "my-button",
  initialize() {
    withPluginApi("0.8.31", initializeButton);
  }
};

button.hbs

{{d-button class="btn-primary" action="submitContent" label="submit_content"}}

Está correto criar minha ação personalizada assim em actions.js.es6? O erro é “had no action handler for: submitContent”, mas como posso corrigi-lo?

export default {
  actions: {
    submitContent() {
      ...
    }
  }
};
2 curtidas

Você ficou muito perto :+1:

Você só precisa alterar o nome do arquivo. Tanto o arquivo .hbs quanto o js.es6 na sua classe de conector devem ter o mesmo nome. Então, se você mudar

actions.js.es6

para

button.js.es6

deve funcionar. Você pode ler mais sobre classes de conector aqui

7 curtidas

Obrigado, Joe, funcionou perfeitamente!

3 curtidas