From a5bbbaac3257fdb8ad52a35a8af1b48e78c7dd9b Mon Sep 17 00:00:00 2001 From: Charly Nguyen Date: Wed, 25 Oct 2023 14:57:02 +0200 Subject: [PATCH 1/2] Allow adding extra icons to the room header Signed-off-by: Charly Nguyen --- src/lifecycles/RoomViewLifecycle.ts | 14 ++++++ test/lifecycles/RoomViewLifecycle.test.tsx | 53 ++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 test/lifecycles/RoomViewLifecycle.test.tsx diff --git a/src/lifecycles/RoomViewLifecycle.ts b/src/lifecycles/RoomViewLifecycle.ts index 1fe46ad..fd5a220 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", + RenderRoomHeader = "render_room_header", } export type RoomPreviewOpts = { canJoin: boolean; }; +export type RoomHeaderOpts = { + 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 RoomHeaderListener = (opts: RoomHeaderOpts, roomId: string) => void; diff --git a/test/lifecycles/RoomViewLifecycle.test.tsx b/test/lifecycles/RoomViewLifecycle.test.tsx new file mode 100644 index 0000000..5c9280c --- /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 { RoomHeaderListener, RoomHeaderOpts, RoomViewLifecycle } from "../../src/lifecycles/RoomViewLifecycle"; + +describe("RoomViewLifecycle", () => { + const roomHeaderOpts: RoomHeaderOpts = { + 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.RenderRoomHeader, this.renderRoomHeaderListener); + } + + protected renderRoomHeaderListener: RoomHeaderListener = (opts, roomId) => { + opts.buttons = roomHeaderOpts.buttons; + }; + })(); + }); + + it("should handle additional buttons", () => { + const opts: RoomHeaderOpts = { buttons: [] }; + module.emit(RoomViewLifecycle.RenderRoomHeader, opts); + expect(opts).toEqual(roomHeaderOpts); + }); +}); From 752b90e40bc9b771fac5cf16afaf7aafe8db0b2d Mon Sep 17 00:00:00 2001 From: Charly Nguyen Date: Thu, 26 Oct 2023 13:35:47 +0200 Subject: [PATCH 2/2] Apply PR feedback Signed-off-by: Charly Nguyen --- src/lifecycles/RoomViewLifecycle.ts | 6 +++--- test/lifecycles/RoomViewLifecycle.test.tsx | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lifecycles/RoomViewLifecycle.ts b/src/lifecycles/RoomViewLifecycle.ts index fd5a220..18d943f 100644 --- a/src/lifecycles/RoomViewLifecycle.ts +++ b/src/lifecycles/RoomViewLifecycle.ts @@ -19,14 +19,14 @@ import React from "react"; export enum RoomViewLifecycle { PreviewRoomNotLoggedIn = "preview_not_logged_in", JoinFromRoomPreview = "try_join_not_logged_in", - RenderRoomHeader = "render_room_header", + ViewRoom = "view_room", } export type RoomPreviewOpts = { canJoin: boolean; }; -export type RoomHeaderOpts = { +export type ViewRoomOpts = { buttons: Array<{ icon: React.ReactNode; id: string; @@ -39,4 +39,4 @@ export type RoomPreviewListener = (opts: RoomPreviewOpts, roomId: string) => voi export type JoinFromPreviewListener = (roomId: string) => void; -export type RoomHeaderListener = (opts: RoomHeaderOpts, 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 index 5c9280c..c7c142d 100644 --- a/test/lifecycles/RoomViewLifecycle.test.tsx +++ b/test/lifecycles/RoomViewLifecycle.test.tsx @@ -15,10 +15,10 @@ limitations under the License. */ import { RuntimeModule } from "../../src"; -import { RoomHeaderListener, RoomHeaderOpts, RoomViewLifecycle } from "../../src/lifecycles/RoomViewLifecycle"; +import { ViewRoomListener, ViewRoomOpts, RoomViewLifecycle } from "../../src/lifecycles/RoomViewLifecycle"; describe("RoomViewLifecycle", () => { - const roomHeaderOpts: RoomHeaderOpts = { + const roomHeaderOpts: ViewRoomOpts = { buttons: [ { icon: "test-icon", @@ -36,18 +36,18 @@ describe("RoomViewLifecycle", () => { public constructor() { super(undefined as any); - this.on(RoomViewLifecycle.RenderRoomHeader, this.renderRoomHeaderListener); + this.on(RoomViewLifecycle.ViewRoom, this.renderRoomHeaderListener); } - protected renderRoomHeaderListener: RoomHeaderListener = (opts, roomId) => { + protected renderRoomHeaderListener: ViewRoomListener = (opts, roomId) => { opts.buttons = roomHeaderOpts.buttons; }; })(); }); it("should handle additional buttons", () => { - const opts: RoomHeaderOpts = { buttons: [] }; - module.emit(RoomViewLifecycle.RenderRoomHeader, opts); + const opts: ViewRoomOpts = { buttons: [] }; + module.emit(RoomViewLifecycle.ViewRoom, opts); expect(opts).toEqual(roomHeaderOpts); }); });