From b19025e5780a4e24f0df5143721b6a0705537452 Mon Sep 17 00:00:00 2001 From: Zack Date: Tue, 12 May 2026 11:12:43 +0200 Subject: [PATCH] Refactor MJitsiWidgetEvent to shared view MVVM (#33457) * Refactor Jitsi widget event to shared view * Align Jitsi widget view model setters * Inline Jitsi widget icon color * Remove unused Jitsi timestamp setter * Tighten Jitsi widget subtitle type --- apps/web/res/css/_components.pcss | 1 - .../views/messages/_MJitsiWidgetEvent.pcss | 13 -- .../views/messages/MJitsiWidgetEvent.tsx | 78 -------- apps/web/src/events/EventTileFactory.tsx | 16 +- .../event-tile/MJitsiWidgetEventViewModel.ts | 154 +++++++++++++++ .../MJitsiWidgetEventViewModel-test.tsx | 180 ++++++++++++++++++ .../ended-auto.png | Bin 0 -> 20907 bytes .../hidden-auto.png | Bin 0 -> 16380 bytes .../started-auto.png | Bin 0 -> 24179 bytes .../updated-auto.png | Bin 0 -> 25812 bytes .../with-timestamp-auto.png | Bin 0 -> 25023 bytes packages/shared-components/src/index.ts | 1 + .../MJitsiWidgetEventView.stories.tsx | 73 +++++++ .../MJitsiWidgetEventView.test.tsx | 82 ++++++++ .../MJitsiWidgetEventView.tsx | 73 +++++++ .../MJitsiWidgetEventView.test.tsx.snap | 125 ++++++++++++ .../MJitsiWidgetEventView/index.ts | 13 ++ 17 files changed, 715 insertions(+), 94 deletions(-) delete mode 100644 apps/web/res/css/views/messages/_MJitsiWidgetEvent.pcss delete mode 100644 apps/web/src/components/views/messages/MJitsiWidgetEvent.tsx create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/MJitsiWidgetEventViewModel.ts create mode 100644 apps/web/test/viewmodels/event-tiles/MJitsiWidgetEventViewModel-test.tsx create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/ended-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/hidden-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/started-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/updated-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/with-timestamp-auto.png create mode 100644 packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.test.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/__snapshots__/MJitsiWidgetEventView.test.tsx.snap create mode 100644 packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/index.ts diff --git a/apps/web/res/css/_components.pcss b/apps/web/res/css/_components.pcss index 8f64e43de4..fc2f1be5ea 100644 --- a/apps/web/res/css/_components.pcss +++ b/apps/web/res/css/_components.pcss @@ -226,7 +226,6 @@ @import "./views/messages/_MFileBody.pcss"; @import "./views/messages/_MImageBody.pcss"; @import "./views/messages/_MImageReplyBody.pcss"; -@import "./views/messages/_MJitsiWidgetEvent.pcss"; @import "./views/messages/_MLocationBody.pcss"; @import "./views/messages/_MPollBody.pcss"; @import "./views/messages/_MStickerBody.pcss"; diff --git a/apps/web/res/css/views/messages/_MJitsiWidgetEvent.pcss b/apps/web/res/css/views/messages/_MJitsiWidgetEvent.pcss deleted file mode 100644 index 7813354366..0000000000 --- a/apps/web/res/css/views/messages/_MJitsiWidgetEvent.pcss +++ /dev/null @@ -1,13 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial -Please see LICENSE files in the repository root for full details. -*/ - -.mx_EventTileBubble.mx_MJitsiWidgetEvent { - svg { - color: $header-panel-text-primary-color; /* XXX: Variable abuse */ - } -} diff --git a/apps/web/src/components/views/messages/MJitsiWidgetEvent.tsx b/apps/web/src/components/views/messages/MJitsiWidgetEvent.tsx deleted file mode 100644 index dfed9d4378..0000000000 --- a/apps/web/src/components/views/messages/MJitsiWidgetEvent.tsx +++ /dev/null @@ -1,78 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial -Please see LICENSE files in the repository root for full details. -*/ - -import React, { type JSX } from "react"; -import { type MatrixEvent } from "matrix-js-sdk/src/matrix"; -import { VideoCallSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; -import { EventTileBubble } from "@element-hq/web-shared-components"; - -import { _t } from "../../../languageHandler"; -import WidgetStore from "../../../stores/WidgetStore"; -import { MatrixClientPeg } from "../../../MatrixClientPeg"; -import { WidgetLayoutStore } from "../../../stores/widgets/WidgetLayoutStore"; - -interface IProps { - mxEvent: MatrixEvent; - timestamp?: JSX.Element; -} - -export default class MJitsiWidgetEvent extends React.PureComponent { - public render(): React.ReactNode { - const url = this.props.mxEvent.getContent()["url"]; - const prevUrl = this.props.mxEvent.getPrevContent()["url"]; - const senderName = this.props.mxEvent.sender?.name || this.props.mxEvent.getSender(); - const room = MatrixClientPeg.safeGet().getRoom(this.props.mxEvent.getRoomId()); - if (!room) return null; - const widgetId = this.props.mxEvent.getStateKey(); - const widget = WidgetStore.instance.getRoom(room.roomId, true).widgets.find((w) => w.id === widgetId); - - let joinCopy: string | null = _t("timeline|m.widget|jitsi_join_top_prompt"); - if (widget && WidgetLayoutStore.instance.isInContainer(room, widget, "right")) { - joinCopy = _t("timeline|m.widget|jitsi_join_right_prompt"); - } else if (!widget) { - joinCopy = null; - } - - if (!url) { - // removed - return ( - } - className="mx_EventTileBubble mx_MJitsiWidgetEvent" - title={_t("timeline|m.widget|jitsi_ended", { senderName })} - > - {this.props.timestamp} - - ); - } else if (prevUrl) { - // modified - return ( - } - className="mx_EventTileBubble mx_MJitsiWidgetEvent" - title={_t("timeline|m.widget|jitsi_updated", { senderName })} - subtitle={joinCopy} - > - {this.props.timestamp} - - ); - } else { - // assume added - return ( - } - className="mx_EventTileBubble mx_MJitsiWidgetEvent" - title={_t("timeline|m.widget|jitsi_started", { senderName })} - subtitle={joinCopy} - > - {this.props.timestamp} - - ); - } - } -} diff --git a/apps/web/src/events/EventTileFactory.tsx b/apps/web/src/events/EventTileFactory.tsx index dadea9099e..e707ee9d61 100644 --- a/apps/web/src/events/EventTileFactory.tsx +++ b/apps/web/src/events/EventTileFactory.tsx @@ -21,6 +21,7 @@ import { CallStartedTileView, EncryptionEventView, HiddenBodyView, + MJitsiWidgetEventView, MKeyVerificationRequestView, RoomAvatarEventView, TextualEventView, @@ -41,7 +42,6 @@ import { ALL_RULE_TYPES } from "../mjolnir/BanList"; import { MatrixClientPeg } from "../MatrixClientPeg"; import { useMatrixClientContext } from "../contexts/MatrixClientContext"; import { WidgetType } from "../widgets/WidgetType"; -import MJitsiWidgetEvent from "../components/views/messages/MJitsiWidgetEvent"; import { hasText } from "../TextForEvent"; import { getMessageModerationState, MessageModerationState } from "../utils/EventUtils"; import ViewSourceEvent from "../components/views/messages/ViewSourceEvent"; @@ -49,6 +49,7 @@ import { shouldDisplayAsBeaconTile } from "../utils/beacon/timeline"; import { type IBodyProps } from "../components/views/messages/IBodyProps"; import { ModuleApi } from "../modules/Api"; import { EncryptionEventViewModel } from "../viewmodels/room/timeline/event-tile/EncryptionEventViewModel"; +import { MJitsiWidgetEventViewModel } from "../viewmodels/room/timeline/event-tile/MJitsiWidgetEventViewModel"; import { MKeyVerificationRequestViewModel } from "../viewmodels/room/timeline/event-tile/MKeyVerificationRequestViewModel"; import { RoomAvatarEventViewModel } from "../viewmodels/room/timeline/event-tile/RoomAvatarEventViewModel"; import { TextualEventViewModel } from "../viewmodels/room/timeline/event-tile/TextualEventViewModel"; @@ -126,6 +127,17 @@ function HiddenBodyWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { } const HiddenEventFactory: Factory = (ref, props) => ; +function MJitsiWidgetEventWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { + const cli = useMatrixClientContext(); + const vm = useCreateAutoDisposedViewModel(() => new MJitsiWidgetEventViewModel({ mxEvent, cli })); + + useEffect(() => { + vm.setEvent(mxEvent); + }, [mxEvent, vm]); + + return ; +} + function RoomAvatarEventWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { const cli = useMatrixClientContext() ?? MatrixClientPeg.safeGet(); const vm = useCreateAutoDisposedViewModel(() => new RoomAvatarEventViewModel({ mxEvent, cli })); @@ -166,7 +178,7 @@ export const CallStartedEventFactory: Factory = (ref, props) => { }; // These factories are exported for reference comparison against pickFactory() -export const JitsiEventFactory: Factory = (ref, props) => ; +export const JitsiEventFactory: Factory = (ref, props) => ; export const JSONEventFactory: Factory = (ref, props) => ; export const RoomCreateEventFactory: Factory = (_ref, props) => ; diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/MJitsiWidgetEventViewModel.ts b/apps/web/src/viewmodels/room/timeline/event-tile/MJitsiWidgetEventViewModel.ts new file mode 100644 index 0000000000..d622877af4 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/MJitsiWidgetEventViewModel.ts @@ -0,0 +1,154 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { type JSX } from "react"; +import { type MatrixClient, type MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { + BaseViewModel, + type MJitsiWidgetEventViewModel as MJitsiWidgetEventViewModelInterface, + type MJitsiWidgetEventViewSnapshot, +} from "@element-hq/web-shared-components"; + +import { _t } from "../../../../languageHandler"; +import WidgetStore, { type IApp } from "../../../../stores/WidgetStore"; +import { UPDATE_EVENT } from "../../../../stores/AsyncStore"; +import { WidgetLayoutStore } from "../../../../stores/widgets/WidgetLayoutStore"; + +export interface MJitsiWidgetEventViewModelProps { + /** + * Caller-provided client. + */ + cli: MatrixClient; + /** + * Jitsi widget state event to derive tile state from. + */ + mxEvent: MatrixEvent; + /** + * Optional timestamp element rendered in the tile footer slot. + */ + timestamp?: JSX.Element; + /** + * Widget store used to resolve the widget referenced by the state event. + */ + widgetStore?: WidgetStore; + /** + * Widget layout store used to resolve the current join prompt. + */ + widgetLayoutStore?: WidgetLayoutStore; +} + +type InternalProps = Required> & + Omit; + +/** + * ViewModel for Jitsi widget events. + */ +export class MJitsiWidgetEventViewModel + extends BaseViewModel + implements MJitsiWidgetEventViewModelInterface +{ + public constructor(props: MJitsiWidgetEventViewModelProps) { + const internalProps = { + ...props, + widgetStore: props.widgetStore ?? WidgetStore.instance, + widgetLayoutStore: props.widgetLayoutStore ?? WidgetLayoutStore.instance, + }; + + super(internalProps, MJitsiWidgetEventViewModel.computeSnapshot(internalProps)); + this.trackStoreUpdates(); + } + + public setEvent(mxEvent: MatrixEvent): void { + this.props = { ...this.props, mxEvent }; + this.updateSnapshotFromProps(); + } + + private trackStoreUpdates(): void { + const roomId = this.props.mxEvent.getRoomId(); + const room = roomId ? this.props.cli.getRoom(roomId) : null; + + this.disposables.trackListener(this.props.widgetStore, UPDATE_EVENT, (updatedRoomId?: unknown) => { + if (typeof updatedRoomId === "string" && updatedRoomId !== this.props.mxEvent.getRoomId()) return; + this.updateSnapshotFromProps(); + }); + + if (roomId) { + this.disposables.trackListener(this.props.widgetStore, roomId, () => this.updateSnapshotFromProps()); + } + + if (room) { + this.disposables.trackListener(this.props.widgetLayoutStore, WidgetLayoutStore.emissionForRoom(room), () => + this.updateSnapshotFromProps(), + ); + } + } + + private updateSnapshotFromProps(): void { + this.snapshot.merge(MJitsiWidgetEventViewModel.computeSnapshot(this.props)); + } + + private static computeSnapshot(props: InternalProps): MJitsiWidgetEventViewSnapshot { + const { mxEvent, timestamp } = props; + const roomId = mxEvent.getRoomId(); + const room = roomId ? props.cli.getRoom(roomId) : null; + + if (!room) { + return { + isVisible: false, + title: "", + subtitle: null, + timestamp, + }; + } + + const content = mxEvent.getContent<{ url?: string }>(); + const prevContent = mxEvent.getPrevContent() as { url?: string }; + const senderName = mxEvent.sender?.name || mxEvent.getSender() || ""; + const widget = MJitsiWidgetEventViewModel.getWidget(props); + let subtitle: string | null = null; + + if (content.url && widget) { + subtitle = props.widgetLayoutStore.isInContainer(room, widget, "right") + ? _t("timeline|m.widget|jitsi_join_right_prompt") + : _t("timeline|m.widget|jitsi_join_top_prompt"); + } + + if (!content.url) { + return { + isVisible: true, + title: _t("timeline|m.widget|jitsi_ended", { senderName }), + subtitle: null, + timestamp, + }; + } + + if (prevContent.url) { + return { + isVisible: true, + title: _t("timeline|m.widget|jitsi_updated", { senderName }), + subtitle, + timestamp, + }; + } + + return { + isVisible: true, + title: _t("timeline|m.widget|jitsi_started", { senderName }), + subtitle, + timestamp, + }; + } + + private static getWidget(props: InternalProps): IApp | undefined { + const roomId = props.mxEvent.getRoomId(); + const widgetId = props.mxEvent.getStateKey(); + + if (!roomId || widgetId === undefined) return undefined; + + return props.widgetStore.getRoom(roomId, true).widgets.find((widget) => widget.id === widgetId); + } +} diff --git a/apps/web/test/viewmodels/event-tiles/MJitsiWidgetEventViewModel-test.tsx b/apps/web/test/viewmodels/event-tiles/MJitsiWidgetEventViewModel-test.tsx new file mode 100644 index 0000000000..46c41d96a6 --- /dev/null +++ b/apps/web/test/viewmodels/event-tiles/MJitsiWidgetEventViewModel-test.tsx @@ -0,0 +1,180 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { EventEmitter } from "events"; +import { type MatrixClient, type Room } from "matrix-js-sdk/src/matrix"; + +import { MJitsiWidgetEventViewModel } from "../../../src/viewmodels/room/timeline/event-tile/MJitsiWidgetEventViewModel"; +import { UPDATE_EVENT } from "../../../src/stores/AsyncStore"; +import { WidgetLayoutStore } from "../../../src/stores/widgets/WidgetLayoutStore"; +import { mkEvent, stubClient } from "../../test-utils"; +import type WidgetStore from "../../../src/stores/WidgetStore"; +import type { IApp } from "../../../src/stores/WidgetStore"; + +describe("MJitsiWidgetEventViewModel", () => { + const roomId = "!room:example.com"; + const widgetId = "jitsi"; + let cli: MatrixClient; + let room: Room; + let widget: IApp; + let widgetStore: WidgetStore & EventEmitter; + let widgetLayoutStore: WidgetLayoutStore & EventEmitter; + + const createEvent = (content: { url?: string }, prevContent: { url?: string } = {}) => + mkEvent({ + event: true, + room: roomId, + user: "@alice:example.com", + skey: widgetId, + type: "im.vector.modular.widgets", + content, + prev_content: prevContent, + }); + + const createVm = ( + props: Partial[0]> = {}, + ): MJitsiWidgetEventViewModel => + new MJitsiWidgetEventViewModel({ + cli, + mxEvent: createEvent({ url: "https://jitsi.example.com/room" }), + widgetStore, + widgetLayoutStore, + ...props, + }); + + beforeEach(() => { + cli = stubClient(); + room = cli.getRoom(roomId)!; + widget = { + id: widgetId, + roomId, + type: "m.jitsi", + } as IApp; + widgetStore = Object.assign(new EventEmitter(), { + getRoom: jest.fn().mockReturnValue({ widgets: [widget] }), + }) as unknown as WidgetStore & EventEmitter; + widgetLayoutStore = Object.assign(new EventEmitter(), { + isInContainer: jest.fn().mockReturnValue(false), + }) as unknown as WidgetLayoutStore & EventEmitter; + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it("renders a started Jitsi event with the top join prompt", () => { + const vm = createVm(); + + expect(vm.getSnapshot()).toMatchObject({ + isVisible: true, + title: "Video conference started by @alice:example.com", + subtitle: "Join the conference at the top of this room", + }); + }); + + it("uses the right-panel join prompt when the widget is in the right container", () => { + jest.mocked(widgetLayoutStore.isInContainer).mockReturnValue(true); + + const vm = createVm(); + + expect(vm.getSnapshot().subtitle).toBe("Join the conference from the room information card on the right"); + }); + + it("omits the join prompt when the widget no longer exists", () => { + jest.mocked(widgetStore.getRoom).mockReturnValue({ widgets: [] }); + + const vm = createVm(); + + expect(vm.getSnapshot()).toMatchObject({ + isVisible: true, + title: "Video conference started by @alice:example.com", + subtitle: null, + }); + }); + + it("renders an updated Jitsi event", () => { + const vm = createVm({ + mxEvent: createEvent({ url: "https://jitsi.example.com/room" }, { url: "https://old.example.com/room" }), + }); + + expect(vm.getSnapshot()).toMatchObject({ + isVisible: true, + title: "Video conference updated by @alice:example.com", + subtitle: "Join the conference at the top of this room", + }); + }); + + it("renders an ended Jitsi event without a join prompt", () => { + const vm = createVm({ + mxEvent: createEvent({}, { url: "https://old.example.com/room" }), + }); + + expect(vm.getSnapshot()).toMatchObject({ + isVisible: true, + title: "Video conference ended by @alice:example.com", + subtitle: null, + }); + }); + + it("hides the event when the room is unavailable", () => { + jest.spyOn(cli, "getRoom").mockReturnValue(null); + + const vm = createVm(); + + expect(vm.getSnapshot()).toMatchObject({ + isVisible: false, + title: "", + subtitle: null, + }); + }); + + it("updates the snapshot when the event changes", () => { + const vm = createVm(); + const listener = jest.fn(); + vm.subscribe(listener); + + vm.setEvent(createEvent({ url: "https://jitsi.example.com/room" }, { url: "https://old.example.com/room" })); + + expect(vm.getSnapshot().title).toBe("Video conference updated by @alice:example.com"); + expect(listener).toHaveBeenCalledTimes(1); + }); + + it("does not emit updates when setEvent receives the current event", () => { + const mxEvent = createEvent({ url: "https://jitsi.example.com/room" }); + const listener = jest.fn(); + const vm = createVm({ mxEvent }); + + vm.subscribe(listener); + vm.setEvent(mxEvent); + + expect(listener).not.toHaveBeenCalled(); + }); + + it("updates when widget stores emit for the room", () => { + const vm = createVm(); + const listener = jest.fn(); + vm.subscribe(listener); + jest.mocked(widgetLayoutStore.isInContainer).mockReturnValue(true); + + widgetStore.emit(UPDATE_EVENT, roomId); + + expect(vm.getSnapshot().subtitle).toBe("Join the conference from the room information card on the right"); + expect(listener).toHaveBeenCalledTimes(1); + }); + + it("updates when the widget layout store emits for the room", () => { + const vm = createVm(); + const listener = jest.fn(); + vm.subscribe(listener); + jest.mocked(widgetLayoutStore.isInContainer).mockReturnValue(true); + + widgetLayoutStore.emit(WidgetLayoutStore.emissionForRoom(room)); + + expect(vm.getSnapshot().subtitle).toBe("Join the conference from the room information card on the right"); + expect(listener).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/ended-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/ended-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..ce148ddc967de0a8e3d7a4d853d1fb3575685256 GIT binary patch literal 20907 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/hidden-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/hidden-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..17fe39394f561638fc5cf269603be3fafcbe35cd GIT binary patch literal 16380 zcmZ8oc|cA17r*zq@hb9?oyk)wL^7i6mnf9VT9)d~j8V4A9>TpC8f(TDg@>WWQf5NQ zc7J2WGJ`U<5Z+kBOf`hY`up7dzWJ-yedm6^=X}ocJ?DJS`!*shxQ;_p2ZA8#3>?sJ zC_&WV34$s%)Wnn6*-Z`+gpnB7ug~yg@~<0_v&NoZZ5NT_|EcTj-`BU=GVXEbFU+$J z)Z6TtK$KXE{=N6<-!%kD(FUW5VZ{%A#_D@xo`0$xF8wP%kEUs>PsRejtRjulXeu7S z5DAAS?^;m5a<#S!7ei4=x$`qN@-4_y_UgiiT#W4P1EoA|IDVp|vYWB2wTYNrTDaNX zSk~S=S7wA6Mv?_j@2?un5?l`T*i&Ndt%HG|KRa=nKvd>s{!%0^9t{>wEI92VtjL8? z<2{7G<>27WDdMI0l%#snp#ueR5~+i|DMeWB1y!>Z!}8%IS)H|Lp$5S-hxC;M_X!ez zGQD?`VSyNyo$O}Adr0wVRC0eEI^1Y#&%Y)UvCvw%R6_xv?lq)r3nV_ayWi6W;q~?7 z8?qtg#Sz+;05yqWh+gdQ$Ekg65RQU)$KNOH%GjhW&E17~6(2HAu3-o2@NEQqKiLze z;y(OJZRxvrY4bum{GaV(?xo5eOHq{_YW5bkvg~D#DqAju(7o#|kieWvdCJn?wKwn; zzQ=)KYYB)CNEnP^T4)evQZ$eu3MF%0qX?iqiL++aNCVY!_J&WE|i)>ADAADD(*5!tS7G_ti!OHcIuO24+LG7=kx{Mo-V`BJr6e6XGX+cBpn zQ8Ve#z8a6b7tF>bHJ>&NH~Q94*XMGPm8OD}LhB}9JvTuV!c0C;j66LG55 zH2EoZE@VFn7S#_Hwew+ZjkyA%B*utbXSw~mS};A=OBvTymR5U60oIz1+-9+r$@ zV5N=EGF1}6R7}hHo4sgj-j|nT2a{f62611K0gs&g6!9eX9id>mbH5L2-B0CE_;3%9 z-20>2ErVU4U%WDuAr|a;(4Cq?&yb`Rjgxl-dvV$zt!@m!(Q-2xw^{w)4~0OaG;|vNRGmNP>2H zJ$d9O187>x`Uo3X4*|d}7iy?T9kaXYg+S5(94_Ayr}AL<%Ozqn!L0y*{R7s>x)feI z7|0B!Zh-OUv$n}TCBDRuCa)!c@%-u@I&T0|`{?rP&TNIl+-(wvvh5Eww5rRuS=m{P zZ7Me;;3h%}N*C4A!^&6>g6s6({ufWZZK=gHmTv;CS8mLs?;FaNXsdJU!1X}iv-ZYR zlckmh_Y-jaa{M+hz{il+)D3*V^`?>@qJodnSA`fXfHoFz=l(WFIve&kidZXcPyo2^ z@h@9TxE>tJw3pxxXNZ$eo=lK;w-|yI?Fe1KW;#eZnJaFNdszn-n*u@9Fy6I_;g3(M*4L;gX>TF~y z%I0k3yOA4o>lDC+@6lBOB;`$CmDP){lVSl$Vp&bBaG^m`cZGT0NRr8hT_M5(=8fz; zMGw26`XS$yOZt6aS1N`Z+E5#Dy4IJ4%O(CAx3T(&9Qlr92-oLNyC`@!Ci4X_`6MhJ z@PnhWC|&N5EZAKqEZ$^qxn{6Q(LAC>XgwqA^}oW6n(&-AwXLNul({YLITWHvndy== zcQ5eXaO08gDWn{3e%+N!K63D#x~K4xX$ezFH2-;kiw$uE&dJrs`<<{+4etw{8}D8b zsG1V5P&Q$TrC(;xrVkcjvUv-XF=e()TL5!dzP<{#U1vA z2+UdcvQHF&@&L%FpUNd;e`438k7RP8K-=qn;T8#y0C#IUQElnoCZg!oOht#*bat4) zk#96`3fr%u$9t3a5LC_Iu*C7cqv~kz-E*v7N^t#Q^ltHAD=c7z=1~*yL7q!G0V5$uAQ>8Uc3Ly_HjebOeU}3cIse4f+v7|Xxs_GE;JVXfJf5< zD~cQf^v5l?8N7u?&vps$v9?ky6)&v=6X*FHFUFe6cG6aV4F7n!YJ^~L)5&}4ao!I8 zvB}q4JZbOQS7*w*9vs9FF&+n;#C5CNT3sYy%sT*+aZDTOKOEIJ#0|^`@c8zcmEBxbkU(k z8`>e$+%&|yY7{?D&+vYjSLDQf{jJ;CNZl&!VA72idj|{o>?h4U_9H30k+E+8%giQ~ zY?wAo2FUpby>Yy9Cn-;yU7|pL!INj7-zR1lpV?iIkD$re&;P!+bfnLX8Arf~s`E9+C{B8`iS6=~N&e=Zfhb zhaj=_>h!R-)x&8l@r3qvRYaEjqA_AHmLMKiT#Y=ojvb|oNhR$-8^gY!=Ni(#Q;mRM z0Dt)8Gy{^(BwwmtwFGHq;Ql^B^vd=&e=cvzAeaRF=2;~Miw1TV#3K`6K)xF71HDBa zEF0Mgq6(RIAimyfhAiK3XWv=^%u8Syrw{ZClo{sUQ=Sl#=?CKbBdg>Uji$6wOa)ek zrWX4IjnSl==1{hU84Kd_gc(7aTQgnA4@+T1fw{rcHDV;)?#2_t$bh#?tCU1vLNt)} ztYvN4vrv~c2+WmYiA0xPM|r(<8coI^hH%PTK6h2RoO4NwtVQ4&aJx9fgUr*#7-J}i zj~M?pDkX(P{11qeyI*!Dshf6HYUnWz1@X~_g8{rLm%XH@YY4(lcE;sK0#D=W7k3i= zf(_JDPRE-c5VgdOr3$6!{UeA=-d+AoB1-GeY!``f9ypzHtD^*``;KL4(0UWFQG3iE z?h-M8A4lReO6$iEVL!E=q7WO5sckIY$YN=0k7IwdQHb&WWx8q|!dcj1pNkqXm|x8t z38Sr(n_cOkBSsQcuW@s>!z*h`Q2^D6goDF%;9t^Ft~@p1kXaTz_~e-x@ZN&uXZI<+ z0Ch#~9BRjhf0wmi$Hpj7K~{s0iKrEu_S*2!SnQz@SA+QdXHU}zu8ex?uIw@ZAu}s# zohRNmMlwo4$F&3T#=%d;NGenml7kFDB=s7-aiq8z4Em0!XFyLS<;;I72iR0MOI<;{ z0SK^JV>T~UID2OYuOhgWAU<>8sTz09S?n#^&36| zX>aMJFvtvohd#O`)Kc7hsx5K?(N%v!)ilaKD^WnJq@~4EB2R-^haK;6K&0XhQ+p-* zF2#Q3AD+rpLzIU_JU_ojl)jQ%Ovns#|59zijAao^jQwK8czGYB(`~E?6usPF;QKe6 zP+K#;>2&EJ%W4qEZSvGr66QnfyFtjkcVC~-SRl(ulC|P zQ+stFcL2!ucGyF%_SOXogIqlz^lj&+LhAmKE|rfwV>UV%kvG5ZDj1e|DcfB#53VnW zcYNJc(&)+tNzKGvvpr12jayk##3r~Ql$d{W(?EQ5LsKQ%CB^b}AZ2!ItX#Txvud*C zhUAR|w-dyde{H%#av6xtcP7J~v*FD*?i@I;5*v&G-qw@}XpU9Qt)q{|+ym-bxC4L9 zf3n)*5qYcjsB|Mfb$cKl8yXk`07maIJ1TSw!vI!7r{gy~s5MoMYyvxNq0BhWz6bHN155EfKa&hsbhsC$Ji>pH z7{LnMtW6}PSWu^qO+FeVMVlvdrqumA46WXJ*IACxNyGWB0(ol)vMKgQQt{thyG($` z)B-}MH(r#>AET)Dw7ZqAvFqwsy`E_S;-Z|vgS3;7k0UF_K#~L3r$i~1 zBEb3HrR?<}qWs9zmx>4ifR-QlETVMy|4OuV@i+o!$AVK|qFXvdudDq}EHD zj#OLN{D%BVM><_FFJp4R%JHieatQ&CADKFdHzj-*biK`tI4IX^0| zCAOBd8-Ibz+(zcb1u-e_~FOX|(TTv1&-@hgV z)!Md_cqi;a!&zP1R^Dg?UrOuSwi59NIZwv~woTHfuqY1@i`T9)w{MCrK8XSBi- z8lKJFB@5oYzNlsa0yIH@X4lsXU9Z_B%rlT$b)Ry3e}&y~xsfbtZ8J-hPX6z%o(Ls z#GY-nyNUR;wlYIrLx4c&*;b-$wP4ww+A$7c(6fEC3ysXnr@L#yVyWzwm0vrM)sElR zRZK=&e^^K*EHvr$ZCY_5(?0g3z0sykE5G1U-0?qc zTImJkRomgux;Cw(&8~FJtTr}nT5+MahO16|gD&HQ7LOJx8sh+}`^CyR-{$BZqWiEN zDlGbWA1)m9hbfPES6yS7KQ0{77we3n2dVAVu^p1x6}GC zYXre6;qMEkJXFITGnu@DsAEk-PL+DTr6&9kyQ=;yKLi40uh*9$zqk}Tb1o3bzFn}+ zo=nDpOou06WqM4QDv5w2Q=7XIZQ!%c_mG@e!Lfvupj4KEQVHDak=0lvM++N=_Kon|P36#Gs>D%UIYkx67E)zi{Kwr`xyDM7!FlKwNTX2V2@_<>-h zRr&+jcsK(!S74rd38dz93Rf-auLco9P}&3zLngawUVSixiKgfrM7YRDJ#-lbKbLG^ zUkb((t#fSZXm7i#g~(U$y?m+m$3#Qf?_3bwpExYOR9I}vBRZj(|Nq|*4$ z(JtFGP6VzWfa|H=USHXl*<7S$f$L#oom`YEK~~Qta2@w+rWa#A#X2eaMZE;BJ6Prj zWodW2t7^zE0NkR=#xGot_Rg-trZDwN^nu0tZ=1S%MS+J zo))ylB_8BvE%y$L&kyuh;g*}VOA*-u8%IO)vRO&Z+QuH}MSnM=uFlqkX06$R-l*}) z2w9inw`kVp{D{S)!t=#LT6u+U%>9{f;7<>XR+Ah6NK(#r)9kFNi{{$mS|1U5dFKxa zf9Os+>{5WDFE;<>LtHy(@Bxw#K=SL8FL3Q}RTpNgIe;Xx_$6A=jUqTjB9~^?_$}ILMbg?*)XYvB#|$Qc-J4E%GInnlg*IK z+lNwQncK1G=V>q$ZU&7;73Y;3+wIN>{TPqS$2(_b7^9Sa{Ankyj#7Nxl= z42t4gmas(g^R@#SMfL%M6+*!%e*ka8V>Y=2w6!)@b^|ndVB+S_4hBb|UYoobQLl-3ZtxdiWZ<6s3rWLa^zuYoui5DGe)?3cQVp$h|sJ zF7v9rtPRACqkwgXnvu!~MddKQw*X`mPM=)=NcqytR2jOA+TbR}Fv z@OO#hU-s>6^OWW5A`I60Ip@9MqWr!4A3Icsw-WSHpW}n_Tr8 z9#5S53Rf8Oz7m-b(KauJDUs0wDSEDBx_aMfUW2D+qelRj84Y~J!US8IGw^g(%ohS$ z>O=@*&cf4Su~S52EFQ@3m)1qM;P@Q!H`%R~k&t&#_lNGq%CLf^ko_038U;i8vF2da zkghiHMe#HQF|Bn*u~toU%c=2h#sPxW)z({GLHSz;SmIqG5HD zRtcOkJxLdt^|c^I>()_}FT0hwp}4Esx)n4}Qk`k3R`>_RQtMXS%yf(udTzSbt>l>x z8x(g1%+QI_x)n8m2H;#zo7SxaYFY@BZ`-<+g#O8}q+*y&>sGX1-oPCtllv{xUHOUh zHNYI1dN2CV={n%hzeRa<_GbUXVHX1RaU%kUY4*(cJxYlosU{U3AACD?!GFd9D&&X%qalKZp~%sm-@?jVRuuEnnuR(xS!mM*W1=n#B&^<7Z}#*;iD zmF-p#SK3XGuRE1dkW|Esv-j4j+2>_Dp=-}c3BUyP&cc+#UP5w)P!e}@eJ||*>{q|o zh3kivcYZxV$&dgM7ey7G_do;f)}{oF82amPif%zA6>gXy^C~Hw&M~a4!$)?j)J9K4 zeMMnNs&2noQqYr04Zonb_n_Q!Ox#<2EMel&{j8enw<(y(Qq7Y#^g~s-D{;U=`g22> z5*J~V6o~)#-67m^No9p>Oh^Q$|21$E-cN07=^*QtX$sv{SQ5(pF}(kC3dGN zA-R%ye#gd0aDNWsn?D~4k%)dVioRiZh$QCa-=Sv}#oeKvA*`5oqaQhK$`&={Eb+2@ zE{yxo*8Le*l$ZrHKcgnr8vw0(#caE-gEPw8GCBeKz4!u>e09Mk33odq;KFS){B)7I302-I0+HG0Q0Oj|7&+=le#&7GkACN86PbhT*B=We zeDa6Zu#L>_+;p<~a-Ci_xg1H^V+og#Y3eB~!tnwK&6%BFI2~u2V&3p@l)hmndR@$Q ziIA^Egzvb&fY9qY&$japr0#UB51VytciCV&@4?hTkMfM`VC25sC`z6Ut!FAvxEy3B?^WDra*aJ_H_{l!crPk z+Dpt84@8Ug(3Cvsyn92%h^ZSl9xLa4(@aivtJ_<}7EBe)``zEAHkbJEIA-(59^0X8 zv(@fG7|TRLxaW^As%kGD#$TnILbg?#5@%>Oa)-Wfdkh#jvG9txugp`h<-_+>(!1WI za(yN~FEa^^TUjzOrx2W>IL0!QNH{g$hBUsFiSQr&I%~)Y6%|1{-r(w5VV!s3ytl>! zU5EgEr%OT%)!Xj9=19d67z!?!;qFrAW7e*+wgH!-6B%1gFD)ro01_f?Pl^R9eW2^5#8vx|#H!WjQNeGP1aGBCGRK-^e`3BOL@+3rN?f-$IpdT*G2v zg3J|cuZdR6P2?U~Y!3R=nCSbs@k}F~B;#C)J8*GWrPF6h)w+Da20wzRyGr%>!4P=Yvf1=RL%MEtt^-(YRIde&&1mM6CWk8=Va@OqjH__RDeZ2* zItT*SJR>GzX+xMI`30^5s;ZchBIWJV?91dagXFfj_k8q^d^4hqc`()uU~$kn75r+d zn_$CS4e&y?3RcB&b1Yj0b3BV^^;KAysuO9@gLZ;Wmi^FNvwp_3g}fG`)#*Yx3!(`Fje9NsCe)d47B>IoEGOv^g4#TH*4V4_fpR-&z2cZA3y}@*) zwm%rl)Dpx>>Vvi;`&jKEaa*a0h%nYIXgglKI82jVnDSuxufh1|TWcw?9bZSax43fM z!T4uAi*yGRW8TUR@(1G?tgBjq36X(oK)sn{;NR4_gMW0;+S5a8S?QCbb(#dR3E?%Z z|JeA`?iwco*T_eEagX9#kv2n;)=Y4H>GugJsb}Z{ACJ5HYQN33(8ke?dJveHr79bA zE`oKKx3j;g8#DsfE0SD=$S)QRay-ic+&BJ4LMCv1-60!ZA+TQxxD)@GBbQ=P9@4Z2 zQaTg_4XTu*+kW5~=YYZr4R4zCtd6U#>82uOP zeRO?gVc^5C5{Y8)#6qQ2AinZ|F7?ADhHLF--SqZ~9L)El6PbMchh{pZA#_=oy+rfk z@DNpO;e#|zm7SmOzg4eGmPaaFU2|J-q(iorh60{>K(J@;aF-}|i~bHL9|+!F;sacz z@hzY@FqwTm0GMR%mRr(Mq|%BH#NsyrNJ^X64BblP~Oh8~bdKf(cAjm?h#d@R+=M-xv*(u`ZRkrMLpXCmiz8 zrEu2$>`Qt)YK%@Z@95(+u1&(iu%}mzV~S5nVy-q^=Lh9yosnQ}{qbjsyrefe^(po#pL+J@7ZITK?p?@a1tiRzoJW}GDG}Un;e(R2zhC3a$G{VZ3zEc@xKjPLI$+B z?bP#6_WbjUBW%M)9cl+vx%A%+wog3~OfvgFw;i4I#BMHAqvr?lYF}S)>kCMqp1dvG z%6BBQRBjt>BI4>?gmHM?K1XmX3#pS$T?$=63(tJ8pY)H{czgF5y`6-_f!CLCqO6W{< zOc$(K*RPeJA3;ucmPc)+eyzlFwwKwBvgy}KoNb^l)CX<&PRmbAGLK%7g8?~e^V;1*Ty;D0>{i?QYhEOJ@12f>Z~2&F9Wo> z5Yu`PPyB3)lzXbb;oAvCUGB0|zFfB~Vw(tpn=BwsYBO4KczG)1OE_l7H#^nBjN4DW z^<+%@K|HH-Q!Nang)?VqHw1^Z`Mdmew(_}sS?2-}r}Vj{5rcUrt~%O*|7Z61fjVL& z(k9=|MBTEY2AZ`A%$Xr}k0t;7>CsCE94v}KEU|ojb>gpndiqokG=gs}OZd-7ND_z( zHpHhg3rH7D<*D$8;L_#W&=PKEnXNFxSwLL;YrJr{ceR_L9671*lCyVKp??g()F1D0 z#UL(w6)#<4J#;RXCZ1E_JHhwTJ_^L(wKg?ZV4kBvyvSpM(!w>4VP=E*bLb8{DOu;E z9)&v{%2p7ZG-5kJ>$NdG$j_XW5nGiQUEWrfP0EO^Vl0AbbfjO*Y$=b}>df4_h%Y8m zcAN~Bn3JuG(S9yYzosaq3j>u>^jztdaF~4={SfN^l#eA z7|Sfvl=3+Yw8@e0@#96gkPyEzeT(krxFNUjJ`+ktE7tr1#B*lt#@Ph9)F}`XDwWKM z(OaYtGL@EpCh-%j`DT|rv6ALYi&$4tIXgg{G-0%oLdY{9U6Hk9&b!iCmDh)yX>S|= zt!71UJ)^<7AHUbbfDjq*@^w|1>eVbih&=oq#6I6Bd%j{R!czO4&&Bp9E}aV0*%iR% zNp1{T&3{;}S(|7HMx4*DIwz|)65K zNACH8l7_?;Vnm(Hsgve<3fF)b5|_6f2%*1UaYgurjaWWNdOZiBpWNAcNf25X5|_xC zi4gkLTfcCTr|b6F{lpJHLFk+Q*$XA1@dK@<0(k@?v(LeP?uvMi9SVet)y~K>n$GhR zZqh^+_;%!*dZvgV5a$hAtPsQ3J6MCL4fMwr1o7$9jre!l2!g076y`OEK@;Ch-!S*L Ro_InG>>t)Ir>}X@{{cu8Y-#`i literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/started-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/started-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..80ef9c8ef999bd4ac0f09ce5b26fdb640ce6f190 GIT binary patch literal 24179 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/with-timestamp-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.stories.tsx/with-timestamp-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a924cbe3847c379de2e0db5bcb37baad32e6be GIT binary patch literal 25023 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 { + const vm = useMockedViewModel(snapshot, {}); + + return ; +}; + +const MJitsiWidgetEventViewWrapper = withViewDocs(MJitsiWidgetEventViewWrapperImpl, MJitsiWidgetEventView); + +const meta = { + title: "Timeline/Timeline Event/MJitsiWidgetEventView", + component: MJitsiWidgetEventViewWrapper, + tags: ["autodocs"], + args: { + isVisible: true, + title: "Video conference started by Alice", + subtitle: "Join the conference at the top of this room", + className: "", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Started: Story = {}; + +export const Updated: Story = { + args: { + title: "Video conference updated by Alice", + subtitle: "Join the conference from the room information card on the right", + }, +}; + +export const Ended: Story = { + args: { + title: "Video conference ended by Alice", + subtitle: null, + }, +}; + +export const Hidden: Story = { + args: { + isVisible: false, + title: "", + subtitle: null, + }, +}; + +export const WithTimestamp: Story = { + args: { + timestamp: 14:56, + }, +}; diff --git a/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.test.tsx b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.test.tsx new file mode 100644 index 0000000000..7879ba7942 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.test.tsx @@ -0,0 +1,82 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { composeStories } from "@storybook/react-vite"; +import { render, screen } from "@test-utils"; +import React from "react"; +import { describe, expect, it } from "vitest"; + +import { MockViewModel } from "../../../../../core/viewmodel"; +import { MJitsiWidgetEventView } from "./MJitsiWidgetEventView"; +import * as stories from "./MJitsiWidgetEventView.stories"; + +const { Started, Updated, Ended, Hidden, WithTimestamp } = composeStories(stories); + +describe("MJitsiWidgetEventView", () => { + it("renders the Started story", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.getByText("Video conference started by Alice")).toBeInTheDocument(); + expect(screen.getByText("Join the conference at the top of this room")).toBeInTheDocument(); + }); + + it("renders the Updated story", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.getByText("Video conference updated by Alice")).toBeInTheDocument(); + expect(screen.getByText("Join the conference from the room information card on the right")).toBeInTheDocument(); + }); + + it("renders the Ended story without a subtitle", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.getByText("Video conference ended by Alice")).toBeInTheDocument(); + expect(screen.queryByText(/Join the conference/)).not.toBeInTheDocument(); + }); + + it("renders nothing when hidden", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.queryByText(/Video conference/)).not.toBeInTheDocument(); + }); + + it("renders a timestamp", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.getByText("14:56")).toBeInTheDocument(); + }); + + it("applies a custom className to the root element", () => { + const vm = new MockViewModel({ + isVisible: true, + title: "Video conference started by Alice", + subtitle: null, + }); + const { container } = render(); + + expect(container.firstChild).toHaveClass("custom-jitsi"); + }); + + it("forwards the provided ref to the root element", () => { + const ref = React.createRef() as React.RefObject; + const vm = new MockViewModel({ + isVisible: true, + title: "Video conference started by Alice", + subtitle: null, + }); + + render(); + + expect(ref.current).toBeInstanceOf(HTMLDivElement); + expect(ref.current).toHaveTextContent("Video conference started by Alice"); + }); +}); diff --git a/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.tsx b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.tsx new file mode 100644 index 0000000000..a6fc338fb4 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/MJitsiWidgetEventView.tsx @@ -0,0 +1,73 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React, { type JSX } from "react"; +import { VideoCallSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; + +import { type ViewModel, useViewModel } from "../../../../../core/viewmodel"; +import { EventTileBubble } from "../EventTileBubble"; + +export interface MJitsiWidgetEventViewSnapshot { + /** + * Whether the event has enough context to render. + */ + isVisible: boolean; + /** + * Main title text for the Jitsi widget event. + */ + title: string; + /** + * Optional join prompt shown below the title. + */ + subtitle: string | null; + /** + * Optional timestamp element rendered in the EventTileBubble footer slot. + */ + timestamp?: JSX.Element; +} + +export type MJitsiWidgetEventViewModel = ViewModel; + +export interface MJitsiWidgetEventViewProps { + /** + * ViewModel providing the current Jitsi widget event snapshot. + */ + vm: MJitsiWidgetEventViewModel; + /** + * Optional CSS classes passed through to EventTileBubble. + */ + className?: string; + /** + * Optional Ref forwarded to the root DOM element. + */ + ref?: React.RefObject; +} + +/** + * Renders a timeline bubble describing a Jitsi widget state event. + */ +export function MJitsiWidgetEventView({ + vm, + className, + ref, +}: Readonly): JSX.Element | null { + const { isVisible, title, subtitle, timestamp } = useViewModel(vm); + + if (!isVisible) return null; + + return ( + } + className={className} + title={title} + subtitle={subtitle || undefined} + ref={ref} + > + {timestamp} + + ); +} diff --git a/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/__snapshots__/MJitsiWidgetEventView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/__snapshots__/MJitsiWidgetEventView.test.tsx.snap new file mode 100644 index 0000000000..7644d05473 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/__snapshots__/MJitsiWidgetEventView.test.tsx.snap @@ -0,0 +1,125 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`MJitsiWidgetEventView > renders a timestamp 1`] = ` +
+
+ + + +
+ Video conference started by Alice +
+
+ Join the conference at the top of this room +
+ + 14:56 + +
+
+`; + +exports[`MJitsiWidgetEventView > renders nothing when hidden 1`] = `
`; + +exports[`MJitsiWidgetEventView > renders the Ended story without a subtitle 1`] = ` +
+
+ + + +
+ Video conference ended by Alice +
+
+
+`; + +exports[`MJitsiWidgetEventView > renders the Started story 1`] = ` +
+
+ + + +
+ Video conference started by Alice +
+
+ Join the conference at the top of this room +
+
+
+`; + +exports[`MJitsiWidgetEventView > renders the Updated story 1`] = ` +
+
+ + + +
+ Video conference updated by Alice +
+
+ Join the conference from the room information card on the right +
+
+
+`; diff --git a/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/index.ts b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/index.ts new file mode 100644 index 0000000000..5566a78512 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/EventTileView/MJitsiWidgetEventView/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +export { + MJitsiWidgetEventView, + type MJitsiWidgetEventViewProps, + type MJitsiWidgetEventViewSnapshot, + type MJitsiWidgetEventViewModel, +} from "./MJitsiWidgetEventView";