Hola ![]()
Nos encontramos con un pequeño error en la función de chat del plugin discourse-calendar, donde el enlace
al canal de chat desapareció repentinamente en el widget de eventos de la publicación.
Es muy probable que se haya roto con el cambio reciente en el núcleo de Discourse para mover el sistema de compilación a Rollup:
- af3385baba — Introducción del compilador Rollup (desactivado por defecto)
- 74d532c559 — Activación del compilador Rollup como predeterminado
Puedo solucionarlo y proporcionar una PR al respecto
.
Comportamiento esperado
Al agregar un evento a un tema y habilitar la Integración de chat (“Crear y gestionar canales de chat específicos para eventos”), el widget de eventos en la publicación debería incluir un icono
con un enlace al canal de chat asociado al evento:
Comportamiento actual
Por el momento, en la rama main actual, esta sección del widget de eventos de la publicación simplemente no se renderiza en absoluto:
Solución
Parece que el problema es que el helper perezoso optionalRequire ya no funciona como se pretendía inicialmente con Rollup. Por lo que entiendo, Rollup llama a optionalRequire demasiado pronto, cuando otros módulos aún no están registrados, por lo que siempre devuelve false.
Lo que soluciona el problema es mover las llamadas a optionalRequire dentro del constructor del componente, para que realmente se evalúen de forma perezosa.
Para el archivo del modelo, por ejemplo, se vería así:
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;
Y respectivamente para el componente que renderiza el enlace real:
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>
+}
(Nota: Necesito convertirlo a un componente de clase, por eso el diff es más grande)
Proporcionaré una PR con mi solución en GitHub, para que la gente pueda probarla y expresar sus opiniones al respecto.

