Lien de chat manquant dans le widget d'événement de publication après Rollup

Bonjour :waving_hand:

Nous avons rencontré un petit bug avec la fonctionnalité de chat du plugin discourse-calendar, où le lien :speech_balloon: vers le canal de chat a soudainement disparu dans le widget d’événement d’un message.

Il est fort probable que cela ait été cassé par le récent changement dans le cœur de Discourse visant à déplacer le système de construction vers Rollup :

  • af3385baba — Introduction du compilateur Rollup (désactivé par défaut)
  • 74d532c559 — Activation du compilateur Rollup par défaut

Je peux le corriger et fournir une PR à ce sujet :technologist: .

Comportement attendu

Lors de l’ajout d’un événement à un sujet et de l’activation de l’Intégration Chat (“Créer et gérer un canal de chat spécifique à l’événement”), le widget d’événement sur le message devrait inclure une icône :speech_balloon: avec un lien vers le canal de chat associé à l’événement :

Comportement actuel

Actuellement, sur la branche main actuelle, cette section du widget d’événement d’un message n’est tout simplement pas rendue :

Correction / Solution

Le problème semble être que l’aide à la optionalRequire paresseuse ne fonctionne plus comme initialement prévu avec Rollup. À ma connaissance, Rollup appelle optionalRequire trop tôt, alors que d’autres modules ne sont pas encore enregistrés, ce qui fait qu’il renvoie toujours false.

Ce qui résout le problème, c’est de déplacer les appels optionalRequire dans le constructeur du composant, afin qu’ils soient effectivement évalués de manière paresseuse.

Pour le fichier de modèle, cela ressemblerait par exemple à ceci :

diff --git a/plugins/discourse-calendar/assets/javascripts/discourse/models/discourse-post-event-event.js b/plugins/discourse-calendar/assets/javascripts/discourse/models/discourse-post-event-event.js
index 742cc35a84..f687b956aa 100644
--- a/plugins/discourse-calendar/assets/javascripts/discourse/models/discourse-post-event-event.js
+++ b/plugins/discourse-calendar/assets/javascripts/discourse/models/discourse-post-event-event.js
@@ -7,10 +7,6 @@ import User from "discourse/models/user";
 import DiscoursePostEventEventStats from "./discourse-post-event-event-stats";
 import DiscoursePostEventInvitee from "./discourse-post-event-invitee";
 
-const ChatChannel = optionalRequire(
-  "discourse/plugins/chat/discourse/models/chat-channel"
-);
-
 const DEFAULT_REMINDER = {
   type: "notification",
   value: 15,
@@ -62,6 +58,8 @@ export default class DiscoursePostEventEvent {
   @tracked _reminders;
 
   constructor(args = {}) {
+    const ChatChannel = optionalRequire( "discourse/plugins/chat/discourse/models/chat-channel");
+
     this.id = args.id;
     this.rrule = args.rrule;
     this.name = args.name;

Et de même pour le composant qui rend le lien réel :

diff --git a/plugins/discourse-calendar/assets/javascripts/discourse/components/discourse-post-event/chat-channel.gjs b/plugins/discourse-calendar/assets/javascripts/discourse/components/discourse-post-event/chat-channel.gjs
index f673ee8a9f..a988b341e6 100644
--- a/plugins/discourse-calendar/assets/javascripts/discourse/components/discourse-post-event/chat-channel.gjs
+++ b/plugins/discourse-calendar/assets/javascripts/discourse/components/discourse-post-event/chat-channel.gjs
@@ -1,24 +1,27 @@
+import Component from "@glimmer/component";
 import { LinkTo } from "@ember/routing";
 import { optionalRequire } from "discourse/lib/utilities";
 import { and } from "discourse/truth-helpers";
 
-const ChannelTitle = optionalRequire(
-  "discourse/plugins/chat/discourse/components/channel-title"
-);
+export default class DiscoursePostEventChatChannel extends Component {
+  get channelTitle() {
+    return optionalRequire(
+      "discourse/plugins/chat/discourse/components/channel-title"
+    );
+  }
 
-const DiscoursePostEventChatChannel = <template>
-  {{#if (and @event.channel ChannelTitle)}}
-    <section class="event__section event-chat-channel">
-      <span></span>
-      <LinkTo
-        @route="chat.channel"
-        @models={{@event.channel.routeModels}}
-        class="chat-channel-link"
-      >
-        <ChannelTitle @channel={{@event.channel}} />
-      </LinkTo>
-    </section>
-  {{/if}}
-</template>;
-
-export default DiscoursePostEventChatChannel;
+  <template>
+    {{#if (and @event.channel this.channelTitle)}}
+      <section class="event__section event-chat-channel">
+        <span></span>
+        <LinkTo
+          @route="chat.channel"
+          @models={{@event.channel.routeModels}}
+          class="chat-channel-link"
+        >
+          <this.channelTitle @channel={{@event.channel}} />
+        </LinkTo>
+      </section>
+    {{/if}}
+  </template>
+}

(Note : Je dois le convertir en composant de classe, c’est pourquoi le diff est plus grand)

Je fournirai une PR avec ma correction sur GitHub, afin que les gens puissent l’essayer et exprimer leurs opinions à ce sujet.

2 « J'aime »

Merci @klappradla. Ta correction proposée me semble bonne — poste un lien vers la PR dès qu’elle est prête :rocket:

Voilà → https://github.com/discourse/discourse/pull/39287

1 « J'aime »