GJSコンポーネントがモーダルサービス経由で表示されると「undefined helper」エラーが発生する (Discourse 3.5.0)

こんにちは。

この問題について、ご提案いただいた通り minimal-modal-test プラグインを作成しました。

  • 成功: テストプラグインのモーダルコンポーネント(minimal-modal.gjs)に基本的な要素(<p>、<textarea>、コアの <DModal>、<DButton>、条件付きブロックに使用される #if のような組み込みヘルパー、送信ボタンのアイコンに使用される if など)のみが含まれていた場合、post-menu-buttons 値トランスフォーマー経由で追加されたボタンコンポーネントからトリガーされる modal.show() によって開かれたときに、エラーなく正しくレンダリングされました。これは、私の環境(Discourse v3.5.0.beta3-dev)で、基本的なモーダルサービス、コンポーネントレンダリング、値トランスフォーマー、および組み込みヘルパーが単独で機能していることを確認するものです。

  • 失敗: モーダルのテンプレート(minimal-modal.gjs または feedback-form-modal.gjs)に子コンポーネント <StarRatingInput> を再度追加した瞬間に、エラー(TypeError: userProvidedCallback is undefined / 以前は Attempted to use a value as a helper... undefined)が一貫して再発します。

StarRatingInput コンポーネント自体には、以前特定された回避策(dIcon ヘルパーの代わりにインライン SVG、this コンテキストを修正するための starClass のようなメソッドのアロー関数、range ヘルパーの代わりに標準の JavaScript Array.from)を使用していることを確認しました。StarRatingInput の内部コードは、現在正しいように見えます。

これは、この特定のレンダリングコンテキスト内で、親モーダルコンポーネント内にネストされた <StarRatingInput> コンポーネント(#each ループ、動的なクラスバインディング、イベントハンドラーが含まれています)をレンダリングすることによってエラーがトリガーされていることを示唆しています。

再現手順

  1. 最新の Discourse 開発環境バージョンを実行している。

  2. 任意のユーザーとしてログインする。

  3. 任意のトピックに移動し、最初の投稿を表示する。

  4. 投稿メニューに追加された 「Test Failing Modal」 ボタンをクリックする。

  5. ブラウザの開発者コンソールを開く。

期待される結果

シンプルなモーダルダイアログに、スターレーティング入力が表示される。

実際の結果

モーダルが完全にレンダリングされず失敗する。ブラウザコンソールにエラーが表示される。