Cómo agregar acción para botón en plugin

Quiero crear un plugin para mostrar un botón y realizar una acción. El botón ya puede mostrarse en la ubicación deseada, pero no sé cómo crear una acción personalizada para él. La estructura de archivos es la siguiente:

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"}}

¿Es correcto crear mi acción personalizada así en actions.js.es6? El error es “had no action handler for: submitContent”, pero ¿cómo puedo solucionarlo?

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

Estuviste muy cerca :+1:

Solo necesitas cambiar el nombre del archivo. Tanto el archivo .hbs como el js.es6 en tu clase de conector deben tener el mismo nombre. Así que, si cambias

actions.js.es6

por

button.js.es6

debería funcionar. Puedes leer más sobre las clases de conector aquí

¡Gracias, Joe, funciona de maravilla!