Plugin: acceso a toolbarEvent desde modal

Mi plugin inserta un botón en la barra de herramientas del editor. Esta barra abre un modal, y cuando el modal se cierra, quiero agregar texto al post. Todo funciona perfectamente excepto el último paso, porque estoy teniendo dificultades para dar al modal acceso al editor.

Si coloco el botón bajo un menú en la barra de herramientas, todo funciona bien:

      api.modifyClass("controller:composer", {
        pluginId: "discourse-n8n-wf",
        actions: {
          showWfModal2() {
            showModal("discourse-n8n-wf").setProperties({"toolbarEvent": this.toolbarEvent});
          },
        },
      });
      api.addToolbarPopupMenuOptionsCallback(() => {
        return {
          action: "showWfModal2",
          icon: "network-wired",
          label: "n8n workflow"
        };
      });

Pero si lo coloco en el nivel superior, parece que no tengo acceso al toolbarEvent para pasarlo al modal

      Composer.reopen({
        actions: {
          showWfModal: function () {
            console.log(this.toolbarEvent); // undefined
            showModal('discourse-n8n-wf', {title:'Insert n8n workflow'});
          }
        }
      });

      api.onToolbarCreate(toolbar => {
        toolbar.addButton({
          id: 'discourse-n8n-wf',
          group: 'extras',
          icon: 'network-wired',
          action: 'showWfModal',
          title: 'Insert workflow'
        });
      });

¿Alguna sugerencia?

2 Me gusta

El toolbarEvent debería estar disponible en tu controlador de modales (discourse-n8n-wf), no es necesario que lo pases. También puedes ver cómo lo hacen otros modales, por ejemplo, consulta discourse-post-event-builder.js.es6 en el plugin de encuestas.

¡Gracias, Penar! Aunque aún no estoy del todo ahí:

Encontré el archivo que mencionaste en el plugin discourse-calendar (no pude hallarlo en el de encuestas), pero allí parece que toolbarEvent sí se está pasando en la acción (a través de setProperties())?

Solo me preguntaba si tenías más pensamientos al respecto, @pmusaraj.

Hola @sirdavidoff

No estoy seguro de si todavía estás atascado en esto, pero me he metido en el problema de intentar averiguar cómo acceder al evento de la barra de herramientas desde una ventana modal también, y descubrí que puedes pasar el evento como un parámetro de esta manera:

action: (event) =>

Así que lo usé de esta manera:

  const composerController = api.container.lookup('controller:composer');

  api.onToolbarCreate((toolbar) => {
    toolbar.addButton({
      id: 'math-editor',
      group: 'extras',
      icon: 'square-root-alt',
      sendAction: (event) => composerController.send('showMathEditor', event),
      title: themePrefix('insert_equation'),
    });
  });

y luego puedes usarlo en tu método action: {} de esta manera:

@action
showMathEditor(event) {
   showModal('matheditor-modal').set('toolbarEvent', event);
}

2 Me gusta

Quiero añadir mi experiencia, años después, tuve el mismo problema (no tenía acceso a toolbarEvent dentro de un modal) y esta solución también me funcionó.

      api.onToolbarCreate((toolbar) => {
        toolbar.addButton({
          ...
          sendAction: (event) =>
            toolbar.context.send("triggerMyModal", event),
          ...
        });
      });

      api.modifyClass("component:d-editor", {
        modal: service(),
        pluginId: "poll",
        actions: {
          triggerMyModal(toolbarEvent) {
            this.modal.show(MyCustomModal, {
              model: {
                toolbarEvent,
              },
            });
          },
        },
      });

Gracias por la ayuda, Keegan.

3 Me gusta