Bonjour ![]()
Nous avons rencontré un petit bug avec la fonctionnalité de chat du plugin discourse-calendar, où le lien
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
.
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
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.

