Chiama un'azione di widget da un altro widget

Ciao,

Vorrei chiamare l’azione toggleSearchMenu da un widget pulsante personalizzato che apra il menu di ricerca facendo clic su di esso.

Ho provato:

  click() {
    this.sendWidgetAction('toggleSearchMenu').then(() => console.log("SENDWIDGETACTION"));
  }

Ma facendo clic sul mio pulsante, viene visualizzato toggleSearchMenu not found nella console.

Ho provato altri modi non funzionanti come puoi vedere qui:

import { createWidget } from "discourse/widgets/widget";
import { iconNode } from "discourse-common/lib/icon-library";
import { h } from 'virtual-dom';

export default createWidget("search-btn-widget", {
  tagName: "div.search-btn-widget",
  buildKey: () => "search-btn-widget",

  html(args) {
    let search_button_helper = "button#search-btn";
    let search_button_class;
    let search_title = "Chercher un sujet";
    let search_text = "Chercher un sujet";
    let search_icon = "ri-small-recherche";
    let search_label_helper = "span.d-button-label";

    if (args == "default") {
      search_button_class = "btn btn-default btn btn-icon-text";
    } else if (args == "primary") {
      search_button_class = "btn btn-primary btn btn-icon-text";
    } else {
      return;
    }

    const toggleSearch = function() {
      this.sendWidgetAction("toggleSearchMenu");
    };

    return h(
      search_button_helper,
      {
        className: search_button_class,
        title: search_title,
        // action: "toggleSearchMenu" => Non funziona
        // onclick: "toggleSearchMenu" => Non funziona
        onclick: toggleSearch
      },
      [iconNode(search_icon), h(search_label_helper, search_text)]
    )
  },
  // click() {
  //   this.sendWidgetAction('toggleSearchMenu').then(() => console.log("SENDWIDGETACTION"));
  // } => Non funziona
});

Hai qualche idea su come potrei chiamare questa azione del widget all’interno del mio widget, se è possibile?

Grazie mille :pray:

Trovata una soluzione, usando createWidgetFrom e importando il widget header:

import {
  default as header
} from "discourse/widgets/header";

Ciò mi ha permesso di accedere all’ambito del metodo di azione toggleSearchMenu.

1 Mi Piace

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