다른 위젯에서 위젯 동작 호출하기

안녕하세요,

커스텀 버튼 위젯에서 toggleSearchMenu 액션을 호출하여 버튼을 클릭했을 때 검색 메뉴가 열리도록 하려고 합니다.

다음과 같이 시도해 보았습니다:

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

하지만 버튼을 클릭하면 콘솔에 toggleSearchMenu not found라는 메시지가 표시됩니다.

아래 코드에서 볼 수 있듯이 다른 방법들도 시도해 보았지만 작동하지 않았습니다:

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

이것이 가능한 것이라면, 내 위젯 안에서 이 위젯 액션을 호출하는 방법에 대해 혹시 아이디어가 있으신가요?

감사합니다 :pray:

createWidgetFrom를 사용하고 헤더 위젯을 가져오는 방식으로 해결했습니다:

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

이렇게 하면 toggleSearchMenu 액션 메서드의 스코프에 접근할 수 있게 되었습니다.