Appeler une action de widget depuis un autre widget

Bonjour,

Je voudrais appeler l’action toggleSearchMenu depuis un widget de bouton personnalisé qui ouvrirait le menu de recherche en cliquant dessus.

J’ai essayé :

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

Mais en cliquant sur mon bouton, le message toggleSearchMenu not found s’affiche dans la console.

J’ai essayé d’autres méthodes qui ne fonctionnent pas, comme vous pouvez le voir ici :

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" => Ne fonctionne pas
        // onclick: "toggleSearchMenu" => Ne fonctionne pas
        onclick: toggleSearch
      },
      [iconNode(search_icon), h(search_label_helper, search_text)]
    )
  },
  // click() {
  //   this.sendWidgetAction('toggleSearchMenu').then(() => console.log("SENDWIDGETACTION"));
  // } => Ne fonctionne pas
});

Avez-vous une idée sur la façon dont je pourrais appeler cette action de widget à l’intérieur de mon widget si cela est possible ?

Merci beaucoup :pray:

J’ai trouvé une solution, en utilisant createWidgetFrom et en important le widget d’en-tête :

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

Cela m’a permis d’accéder à la méthode d’action toggleSearchMenu de la portée.

1 « J'aime »

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