From a2c386416b2610a872dcd590e7947ee0b09f2a4f Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Tue, 27 Jun 2023 09:27:06 +0200 Subject: [PATCH 1/9] update room layout when room is updated with jitsi Signed-off-by: nurjinn jafar --- .../src/service/MeetingService.ts | 8 +++ .../test/MeetingService.test.ts | 51 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/matrix-meetings-bot/src/service/MeetingService.ts b/matrix-meetings-bot/src/service/MeetingService.ts index cedecbc0..32f2fc39 100644 --- a/matrix-meetings-bot/src/service/MeetingService.ts +++ b/matrix-meetings-bot/src/service/MeetingService.ts @@ -604,6 +604,14 @@ export class MeetingService { ) ); } + const filteredWidgetIds = eventWidgetIds.filter( + (widget) => + widget !== WidgetType.COCKPIT && + widget !== WidgetType.BREAKOUT_SESSIONS + ); + promises.push( + this.setUpWidgetLayoutConfiguration(roomId, filteredWidgetIds) + ); promises.push(this.cleanupWidgets(widgetIds, room, userContext)); await Promise.all(promises); diff --git a/matrix-meetings-bot/test/MeetingService.test.ts b/matrix-meetings-bot/test/MeetingService.test.ts index ff6b3dec..aac0f572 100644 --- a/matrix-meetings-bot/test/MeetingService.test.ts +++ b/matrix-meetings-bot/test/MeetingService.test.ts @@ -1804,6 +1804,57 @@ describe('test relevant functionality of MeetingService', () => { callInfo(0, 3, StateEventName.IO_ELEMENT_WIDGETS_LAYOUT_EVENT) ).toStrictEqual(expected); }); + + test('update room layout when widgets change', async () => { + const parentRoom: any = create_test_meeting( + CURRENT_USER, + PARENT_MEETING_ROOM_ID, + null, + [WidgetType.COCKPIT, WidgetType.BREAKOUT_SESSIONS] + ); + when(clientMock.getRoomState(PARENT_MEETING_ROOM_ID)).thenResolve( + parentRoom + ); + + // should not have custom layout + verify( + clientMock.sendStateEvent( + parentId, + StateEventName.IO_ELEMENT_WIDGETS_LAYOUT_EVENT, + anything(), + anything() + ) + ).times(0); + + // add jitsi widget + const widgets = ['jitsi']; + await meetingService.handleWidgets( + userContext, + new MeetingWidgetsHandleDto(parentId, true, widgets) + ); + + // the resulting layout should exactly match the custom configuration + const layout = layoutConfigs.find((o) => + _.isEqual(_.sortBy(o.widgetIds), _.sortBy(widgets)) + ); + const expected = { + widgets: layout?.layouts, + }; + + verify( + clientMock.sendStateEvent( + parentId, + StateEventName.IO_ELEMENT_WIDGETS_LAYOUT_EVENT, + anything(), + anything() + ) + ).times(1); + + // event content + expect( + callInfo(0, 3, StateEventName.IO_ELEMENT_WIDGETS_LAYOUT_EVENT) + ).toStrictEqual(expected); + }); }); test('createMeeting without parent with external data', async () => { From 3fc82e865ad14af9f0bc45e66592bdaa1de9dae9 Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Tue, 27 Jun 2023 09:48:59 +0200 Subject: [PATCH 2/9] added changeset Signed-off-by: nurjinn jafar --- .changeset/kind-foxes-live.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/kind-foxes-live.md diff --git a/.changeset/kind-foxes-live.md b/.changeset/kind-foxes-live.md new file mode 100644 index 00000000..67471d50 --- /dev/null +++ b/.changeset/kind-foxes-live.md @@ -0,0 +1,5 @@ +--- +'@nordeck/matrix-meetings-bot': patch +--- + +Update room layout when jitsi widget is added to an already existing room From 56c180fbd00d029fcb90107e4a2336eb2499f4ef Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Mon, 3 Jul 2023 12:34:02 +0200 Subject: [PATCH 3/9] update layout on widget change Signed-off-by: nurjinn jafar --- matrix-meetings-bot/src/service/MeetingService.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/matrix-meetings-bot/src/service/MeetingService.ts b/matrix-meetings-bot/src/service/MeetingService.ts index 32f2fc39..c858f0e8 100644 --- a/matrix-meetings-bot/src/service/MeetingService.ts +++ b/matrix-meetings-bot/src/service/MeetingService.ts @@ -604,16 +604,16 @@ export class MeetingService { ) ); } - const filteredWidgetIds = eventWidgetIds.filter( + + promises.push(this.cleanupWidgets(widgetIds, room, userContext)); + const filteredWidgetIds = widgetIds.filter( (widget) => - widget !== WidgetType.COCKPIT && - widget !== WidgetType.BREAKOUT_SESSIONS + !widget.includes(WidgetType.COCKPIT) && + !widget.includes(WidgetType.BREAKOUT_SESSIONS) ); promises.push( this.setUpWidgetLayoutConfiguration(roomId, filteredWidgetIds) ); - - promises.push(this.cleanupWidgets(widgetIds, room, userContext)); await Promise.all(promises); } } From 2c38e02c7aeaf9f1c46094fb8ff3c0b4fc67115e Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Mon, 3 Jul 2023 22:58:43 +0200 Subject: [PATCH 4/9] rephrase change set message Signed-off-by: nurjinn jafar --- .changeset/kind-foxes-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/kind-foxes-live.md b/.changeset/kind-foxes-live.md index 67471d50..436e6ac5 100644 --- a/.changeset/kind-foxes-live.md +++ b/.changeset/kind-foxes-live.md @@ -2,4 +2,4 @@ '@nordeck/matrix-meetings-bot': patch --- -Update room layout when jitsi widget is added to an already existing room +Update room layout on rooms widgets update From e486ee7765fc85a6d2c74b6b0d4e13ba28051db2 Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Mon, 3 Jul 2023 23:00:56 +0200 Subject: [PATCH 5/9] rephrase change set message Signed-off-by: nurjinn jafar --- .changeset/kind-foxes-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/kind-foxes-live.md b/.changeset/kind-foxes-live.md index 436e6ac5..982a596c 100644 --- a/.changeset/kind-foxes-live.md +++ b/.changeset/kind-foxes-live.md @@ -2,4 +2,4 @@ '@nordeck/matrix-meetings-bot': patch --- -Update room layout on rooms widgets update +Apply the configured room layout when widgets are added or removed. From 6c527ae5f69359663cd31c28c53b075d29e6bec2 Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Wed, 5 Jul 2023 10:00:39 +0200 Subject: [PATCH 6/9] fix tests Signed-off-by: nurjinn jafar --- matrix-meetings-bot/test/MeetingService.test.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/matrix-meetings-bot/test/MeetingService.test.ts b/matrix-meetings-bot/test/MeetingService.test.ts index aac0f572..eaa75f17 100644 --- a/matrix-meetings-bot/test/MeetingService.test.ts +++ b/matrix-meetings-bot/test/MeetingService.test.ts @@ -1806,15 +1806,10 @@ describe('test relevant functionality of MeetingService', () => { }); test('update room layout when widgets change', async () => { - const parentRoom: any = create_test_meeting( - CURRENT_USER, - PARENT_MEETING_ROOM_ID, - null, - [WidgetType.COCKPIT, WidgetType.BREAKOUT_SESSIONS] - ); - when(clientMock.getRoomState(PARENT_MEETING_ROOM_ID)).thenResolve( - parentRoom - ); + const event = createEvent(parentId); + let widgets = [WidgetType.COCKPIT, WidgetType.BREAKOUT_SESSIONS, 'poll']; + event.widget_ids = widgets; + await meetingService.createMeeting(userContext, event); // should not have custom layout verify( @@ -1827,7 +1822,7 @@ describe('test relevant functionality of MeetingService', () => { ).times(0); // add jitsi widget - const widgets = ['jitsi']; + widgets = ['jitsi']; await meetingService.handleWidgets( userContext, new MeetingWidgetsHandleDto(parentId, true, widgets) From 3179b6ddff0d71f222e9a4e61c108ab5b0fee1a9 Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Fri, 7 Jul 2023 10:29:44 +0200 Subject: [PATCH 7/9] fix tests Signed-off-by: nurjinn jafar --- .../src/service/MeetingService.ts | 4 +- .../test/MeetingService.test.ts | 52 +++++++++++-------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/matrix-meetings-bot/src/service/MeetingService.ts b/matrix-meetings-bot/src/service/MeetingService.ts index c858f0e8..f1768512 100644 --- a/matrix-meetings-bot/src/service/MeetingService.ts +++ b/matrix-meetings-bot/src/service/MeetingService.ts @@ -608,8 +608,8 @@ export class MeetingService { promises.push(this.cleanupWidgets(widgetIds, room, userContext)); const filteredWidgetIds = widgetIds.filter( (widget) => - !widget.includes(WidgetType.COCKPIT) && - !widget.includes(WidgetType.BREAKOUT_SESSIONS) + !widget.startsWith(`${WidgetType.COCKPIT}`) && + !widget.startsWith(`${WidgetType.BREAKOUT_SESSIONS}`) ); promises.push( this.setUpWidgetLayoutConfiguration(roomId, filteredWidgetIds) diff --git a/matrix-meetings-bot/test/MeetingService.test.ts b/matrix-meetings-bot/test/MeetingService.test.ts index eaa75f17..72034242 100644 --- a/matrix-meetings-bot/test/MeetingService.test.ts +++ b/matrix-meetings-bot/test/MeetingService.test.ts @@ -1805,37 +1805,43 @@ describe('test relevant functionality of MeetingService', () => { ).toStrictEqual(expected); }); - test('update room layout when widgets change', async () => { - const event = createEvent(parentId); - let widgets = [WidgetType.COCKPIT, WidgetType.BREAKOUT_SESSIONS, 'poll']; - event.widget_ids = widgets; - await meetingService.createMeeting(userContext, event); - - // should not have custom layout - verify( - clientMock.sendStateEvent( - parentId, - StateEventName.IO_ELEMENT_WIDGETS_LAYOUT_EVENT, - anything(), - anything() - ) - ).times(0); + test.only('update room layout when widgets change', async () => { + // room has a poll widget + // cockpit is there after the meeting room was created + const parentRoom: any = create_test_meeting( + CURRENT_USER, + PARENT_MEETING_ROOM_ID, + null, + ['poll', WidgetType.COCKPIT] + ); + when(clientMock.getRoomState(PARENT_MEETING_ROOM_ID)).thenResolve( + parentRoom + ); - // add jitsi widget - widgets = ['jitsi']; + // add jitsi + const widgets = ['jitsi']; await meetingService.handleWidgets( userContext, new MeetingWidgetsHandleDto(parentId, true, widgets) ); - // the resulting layout should exactly match the custom configuration - const layout = layoutConfigs.find((o) => - _.isEqual(_.sortBy(o.widgetIds), _.sortBy(widgets)) - ); + const e = StateEventName.IM_VECTOR_MODULAR_WIDGETS_EVENT; + verify( + clientMock.sendStateEvent(parentId, e, anything(), anything()) + ).times(2); + + expect(callInfo(0, SendStateEventParameter.Content, e).type).toBe( + 'net.nordeck.poll' + ); // updated poll + expect(callInfo(1, SendStateEventParameter.Content, e).type).toBe( + 'jitsi' + ); // added jitsi const expected = { - widgets: layout?.layouts, + widgets: { + poll: { container: 'top', index: 0, width: 100, height: 40 }, + jitsi: { container: 'right' }, + }, }; - verify( clientMock.sendStateEvent( parentId, From 8e81e01ac7535045473c07e533debc4932595a5c Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Fri, 7 Jul 2023 12:32:33 +0200 Subject: [PATCH 8/9] remove unnecessary string literal Signed-off-by: nurjinn jafar --- matrix-meetings-bot/src/service/MeetingService.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-meetings-bot/src/service/MeetingService.ts b/matrix-meetings-bot/src/service/MeetingService.ts index f1768512..e1767445 100644 --- a/matrix-meetings-bot/src/service/MeetingService.ts +++ b/matrix-meetings-bot/src/service/MeetingService.ts @@ -608,8 +608,8 @@ export class MeetingService { promises.push(this.cleanupWidgets(widgetIds, room, userContext)); const filteredWidgetIds = widgetIds.filter( (widget) => - !widget.startsWith(`${WidgetType.COCKPIT}`) && - !widget.startsWith(`${WidgetType.BREAKOUT_SESSIONS}`) + !widget.startsWith(WidgetType.COCKPIT) && + !widget.startsWith(WidgetType.BREAKOUT_SESSIONS) ); promises.push( this.setUpWidgetLayoutConfiguration(roomId, filteredWidgetIds) From 5bf5d76cf0ab1b6006afcbc63ffb9b31602944f3 Mon Sep 17 00:00:00 2001 From: nurjinn jafar Date: Fri, 7 Jul 2023 12:34:15 +0200 Subject: [PATCH 9/9] remove only keyword Signed-off-by: nurjinn jafar --- matrix-meetings-bot/test/MeetingService.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-meetings-bot/test/MeetingService.test.ts b/matrix-meetings-bot/test/MeetingService.test.ts index 72034242..7907a395 100644 --- a/matrix-meetings-bot/test/MeetingService.test.ts +++ b/matrix-meetings-bot/test/MeetingService.test.ts @@ -1805,7 +1805,7 @@ describe('test relevant functionality of MeetingService', () => { ).toStrictEqual(expected); }); - test.only('update room layout when widgets change', async () => { + test('update room layout when widgets change', async () => { // room has a poll widget // cockpit is there after the meeting room was created const parentRoom: any = create_test_meeting(