diff --git a/src/lifecycles/RoomViewLifecycle.ts b/src/lifecycles/RoomViewLifecycle.ts index 1fe46ad..18d943f 100644 --- a/src/lifecycles/RoomViewLifecycle.ts +++ b/src/lifecycles/RoomViewLifecycle.ts @@ -14,15 +14,29 @@ See the License for the specific language governing permissions and limitations under the License. */ +import React from "react"; + export enum RoomViewLifecycle { PreviewRoomNotLoggedIn = "preview_not_logged_in", JoinFromRoomPreview = "try_join_not_logged_in", + ViewRoom = "view_room", } export type RoomPreviewOpts = { canJoin: boolean; }; +export type ViewRoomOpts = { + buttons: Array<{ + icon: React.ReactNode; + id: string; + label: () => string; + onClick: () => void; + }>; +}; + export type RoomPreviewListener = (opts: RoomPreviewOpts, roomId: string) => void; export type JoinFromPreviewListener = (roomId: string) => void; + +export type ViewRoomListener = (opts: ViewRoomOpts, roomId: string) => void; diff --git a/test/lifecycles/RoomViewLifecycle.test.tsx b/test/lifecycles/RoomViewLifecycle.test.tsx new file mode 100644 index 0000000..c7c142d --- /dev/null +++ b/test/lifecycles/RoomViewLifecycle.test.tsx @@ -0,0 +1,53 @@ +/* +Copyright 2023 Nordeck IT + Consulting GmbH + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { RuntimeModule } from "../../src"; +import { ViewRoomListener, ViewRoomOpts, RoomViewLifecycle } from "../../src/lifecycles/RoomViewLifecycle"; + +describe("RoomViewLifecycle", () => { + const roomHeaderOpts: ViewRoomOpts = { + buttons: [ + { + icon: "test-icon", + id: "test-id", + label: () => "test-label", + onClick: () => {}, + }, + ], + }; + + let module: RuntimeModule; + + beforeAll(() => { + module = new (class extends RuntimeModule { + public constructor() { + super(undefined as any); + + this.on(RoomViewLifecycle.ViewRoom, this.renderRoomHeaderListener); + } + + protected renderRoomHeaderListener: ViewRoomListener = (opts, roomId) => { + opts.buttons = roomHeaderOpts.buttons; + }; + })(); + }); + + it("should handle additional buttons", () => { + const opts: ViewRoomOpts = { buttons: [] }; + module.emit(RoomViewLifecycle.ViewRoom, opts); + expect(opts).toEqual(roomHeaderOpts); + }); +});