From c3cd14056bbc325b633b955a51a701d8543baf08 Mon Sep 17 00:00:00 2001 From: Airyzz <36567925+Airyzz@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:21:31 +0000 Subject: [PATCH] Fix invitation button UI and recommendation filtering logic (#361) --- .../invitation_view/send_invitation.dart | 2 +- .../room_members_list/room_members_list.dart | 29 ++----------------- .../room_quick_access_menu.dart | 12 ++++++++ .../room_quick_access_menu_desktop.dart | 18 ++---------- .../room_quick_access_menu_mobile.dart | 20 +++---------- .../room_side_panel/room_side_panel.dart | 2 ++ .../ui/pages/main/main_page_view_desktop.dart | 1 + .../ui/pages/main/main_page_view_mobile.dart | 6 +++- 8 files changed, 30 insertions(+), 60 deletions(-) diff --git a/commet/lib/ui/organisms/invitation_view/send_invitation.dart b/commet/lib/ui/organisms/invitation_view/send_invitation.dart index 1693d7cf..b76b6ecd 100644 --- a/commet/lib/ui/organisms/invitation_view/send_invitation.dart +++ b/commet/lib/ui/organisms/invitation_view/send_invitation.dart @@ -40,7 +40,7 @@ class _SendInvitationWidgetState extends State { Widget build(BuildContext context) { var dmComponent = widget.room.client.getComponent(); - var recommended = dmComponent?.directMessageRooms ?? []; + var recommended = List.from(dmComponent?.directMessageRooms ?? []); recommended.removeWhere( (element) => widget.room.memberIds diff --git a/commet/lib/ui/organisms/room_members_list/room_members_list.dart b/commet/lib/ui/organisms/room_members_list/room_members_list.dart index 04d56570..85d71e2b 100644 --- a/commet/lib/ui/organisms/room_members_list/room_members_list.dart +++ b/commet/lib/ui/organisms/room_members_list/room_members_list.dart @@ -1,10 +1,6 @@ import 'package:commet/client/components/direct_messages/direct_message_component.dart'; -import 'package:commet/client/components/invitation/invitation_component.dart'; import 'package:commet/client/room.dart'; -import 'package:commet/config/layout_config.dart'; import 'package:commet/ui/molecules/user_list.dart'; -import 'package:commet/ui/navigation/adaptive_dialog.dart'; -import 'package:commet/ui/organisms/invitation_view/send_invitation.dart'; import 'package:flutter/material.dart'; import 'package:tiamat/tiamat.dart' as tiamat; @@ -29,31 +25,10 @@ class _RoomMembersListWidgetState extends State { @override Widget build(BuildContext context) { - var iconSize = Layout.mobile ? 40.0 : 35.0; - var invitation = widget.room.client.getComponent(); return Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const tiamat.Text.labelLow("Room Members"), - if (invitation != null && - !isDirectMessage && - widget.room.permissions.canInviteUser) - SizedBox( - width: iconSize, - height: iconSize, - child: tiamat.IconButton( - icon: Icons.person_add, - size: iconSize / 2, - onPressed: () => AdaptiveDialog.show(context, - builder: (context) => - SendInvitationWidget(widget.room, invitation), - title: "Invite"), - ), - ), - ], - ), + const tiamat.Text.labelLow("Room Members"), Expanded( child: RoomMemberList( key: ValueKey("room-participant-list-key-${widget.room.localId}"), diff --git a/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu.dart b/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu.dart index 88f16220..6791a4e1 100644 --- a/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu.dart +++ b/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu.dart @@ -1,5 +1,8 @@ import 'package:commet/client/client.dart'; import 'package:commet/client/components/event_search/event_search_component.dart'; +import 'package:commet/client/components/invitation/invitation_component.dart'; +import 'package:commet/ui/navigation/adaptive_dialog.dart'; +import 'package:commet/ui/organisms/invitation_view/send_invitation.dart'; import 'package:commet/utils/event_bus.dart'; import 'package:flutter/material.dart'; @@ -11,7 +14,16 @@ class RoomQuickAccessMenu { final bool canSearch = room.client.getComponent() != null; + final invitation = room.client.getComponent(); + actions = [ + if (invitation != null) + RoomQuickAccessMenuEntry( + name: "Invite", + action: (context) => AdaptiveDialog.show(context, + builder: (context) => SendInvitationWidget(room, invitation), + title: "Invite"), + icon: Icons.person_add), if (canSearch) RoomQuickAccessMenuEntry( name: "Search", diff --git a/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_desktop.dart b/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_desktop.dart index 7c64ba3f..92278a68 100644 --- a/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_desktop.dart +++ b/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_desktop.dart @@ -3,26 +3,14 @@ import 'package:commet/ui/organisms/room_quick_access_menu/room_quick_access_men import 'package:flutter/material.dart'; import 'package:tiamat/tiamat.dart' as tiamat; -class RoomQuickAccessMenuViewDesktop extends StatefulWidget { +class RoomQuickAccessMenuViewDesktop extends StatelessWidget { const RoomQuickAccessMenuViewDesktop({required this.room, super.key}); final Room room; - @override - State createState() => - _RoomQuickAccessMenuViewDesktopState(); -} - -class _RoomQuickAccessMenuViewDesktopState - extends State { - late RoomQuickAccessMenu menu; - - @override - void initState() { - menu = RoomQuickAccessMenu(room: widget.room); - super.initState(); - } @override Widget build(BuildContext context) { + final menu = RoomQuickAccessMenu(room: room); + return Row( children: menu.actions .map((e) => SizedBox( diff --git a/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_mobile.dart b/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_mobile.dart index 75281e6f..4d1b17f8 100644 --- a/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_mobile.dart +++ b/commet/lib/ui/organisms/room_quick_access_menu/room_quick_access_menu_mobile.dart @@ -3,27 +3,14 @@ import 'package:commet/ui/organisms/room_quick_access_menu/room_quick_access_men import 'package:flutter/material.dart'; import 'package:tiamat/tiamat.dart' as tiamat; -class RoomQuickAccessMenuViewMobile extends StatefulWidget { +class RoomQuickAccessMenuViewMobile extends StatelessWidget { const RoomQuickAccessMenuViewMobile({required this.room, super.key}); final Room room; - @override - State createState() => - _RoomQuickAccessMenuViewMobileState(); -} - -class _RoomQuickAccessMenuViewMobileState - extends State { - late RoomQuickAccessMenu menu; - - @override - void initState() { - menu = RoomQuickAccessMenu(room: widget.room); - super.initState(); - } - @override Widget build(BuildContext context) { + final menu = RoomQuickAccessMenu(room: room); + return Container( color: Theme.of(context).colorScheme.surfaceContainerLow, child: SizedBox( @@ -36,6 +23,7 @@ class _RoomQuickAccessMenuViewMobileState child: SizedBox( child: tiamat.IconButton( icon: e.icon, + size: 20, onPressed: () => e.action?.call(context), )), )) diff --git a/commet/lib/ui/organisms/room_side_panel/room_side_panel.dart b/commet/lib/ui/organisms/room_side_panel/room_side_panel.dart index 8811def1..c6d11d35 100644 --- a/commet/lib/ui/organisms/room_side_panel/room_side_panel.dart +++ b/commet/lib/ui/organisms/room_side_panel/room_side_panel.dart @@ -125,6 +125,8 @@ class _RoomSidePanelState extends State { if (Layout.mobile) RoomQuickAccessMenuViewMobile( room: widget.state.currentRoom!, + key: ValueKey( + "quick_access_menu_${widget.state.currentRoom!.localId}"), ), Flexible( child: Padding( diff --git a/commet/lib/ui/pages/main/main_page_view_desktop.dart b/commet/lib/ui/pages/main/main_page_view_desktop.dart index ed3a5f70..48e096ec 100644 --- a/commet/lib/ui/pages/main/main_page_view_desktop.dart +++ b/commet/lib/ui/pages/main/main_page_view_desktop.dart @@ -189,6 +189,7 @@ class MainPageViewDesktop extends StatelessWidget { Widget roomChatView() { return Expanded( + key: ValueKey("room-chat-view-${state.currentRoom!.localId}"), child: Column( children: [ Tile.low( diff --git a/commet/lib/ui/pages/main/main_page_view_mobile.dart b/commet/lib/ui/pages/main/main_page_view_mobile.dart index fc50937a..17102ccc 100644 --- a/commet/lib/ui/pages/main/main_page_view_mobile.dart +++ b/commet/lib/ui/pages/main/main_page_view_mobile.dart @@ -115,7 +115,11 @@ class _MainPageViewMobileState extends State { caulkClipTopLeft: true, caulkClipBottomLeft: true, child: ScaledSafeArea( - bottom: false, child: RoomSidePanel(state: widget.state))); + bottom: false, + child: RoomSidePanel( + key: ValueKey( + "room-side-panel-${widget.state.currentRoom!.localId}"), + state: widget.state))); } return null;