feat: add join space button to space list / navigation bar (#2071)

* feat: add join space button to space list / navigation bar

* chore: update join space icon
This commit is contained in:
ggurdin 2025-03-07 12:35:06 -05:00 committed by GitHub
parent f9ee18c77b
commit cc5a757d71
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 113 additions and 27 deletions

View file

@ -4872,5 +4872,7 @@
}
}
},
"knockSpaceSuccess": "You have requested to join this space! An admin will respond to your request when they receive it 😀"
"knockSpaceSuccess": "You have requested to join this space! An admin will respond to your request when they receive it 😀",
"joinByCode": "Join by code",
"createASpace": "Create a space"
}

View file

@ -13,6 +13,7 @@ import 'package:fluffychat/pages/chat_list/search_title.dart';
import 'package:fluffychat/pages/chat_list/space_view.dart';
import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart';
import 'package:fluffychat/pangea/chat_list/widgets/pangea_chat_list_header.dart';
import 'package:fluffychat/pangea/spaces/widgets/space_filter_buttons.dart';
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
import 'package:fluffychat/utils/stream_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
@ -170,8 +171,9 @@ class ChatListViewBody extends StatelessWidget {
),
),
),
if (client.rooms.isNotEmpty && !controller.isSearchMode)
// #Pangea
// #Pangea
// if (client.rooms.isNotEmpty && !controller.isSearchMode)
if (!controller.isSearchMode)
// SizedBox(
// height: 64,
// child: ListView(
@ -199,8 +201,7 @@ class ChatListViewBody extends StatelessWidget {
// #Pangea
// if (spaceDelegateCandidates.isNotEmpty &&
// !controller.widget.displayNavigationRail)
if (spaces.isNotEmpty &&
!controller.widget.displayNavigationRail)
if (!controller.widget.displayNavigationRail)
// Pangea#
ActiveFilter.spaces,
]
@ -352,6 +353,10 @@ class ChatListViewBody extends StatelessWidget {
);
},
),
// #Pangea
if (controller.activeFilter == ActiveFilter.spaces)
const SpaceFilterButtons(),
// Pangea#
],
),
);

View file

@ -5,7 +5,6 @@ import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
import 'package:fluffychat/pangea/spaces/utils/space_code.dart';
import 'package:fluffychat/pangea/user/utils/p_logout.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/avatar.dart';
@ -38,16 +37,6 @@ class ClientChooserButton extends StatelessWidget {
// Pangea#
return <PopupMenuEntry<Object>>[
// #Pangea
PopupMenuItem(
value: SettingsAction.joinWithClassCode,
child: Row(
children: [
const Icon(Icons.join_full_outlined),
const SizedBox(width: 18),
Expanded(child: Text(L10n.of(context).joinWithClassCode)),
],
),
),
// PopupMenuItem(
// value: SettingsAction.newGroup,
// child: Row(
@ -294,12 +283,6 @@ class ClientChooserButton extends StatelessWidget {
barrierDismissible: false,
);
break;
case SettingsAction.joinWithClassCode:
SpaceCodeUtil.joinWithSpaceCodeDialog(
context,
MatrixState.pangeaController,
);
break;
case SettingsAction.logout:
pLogoutAction(context);
break;
@ -319,7 +302,6 @@ enum SettingsAction {
settings,
// #Pangea
// archive,
joinWithClassCode,
learning,
logout,
// Pangea#

View file

@ -5,8 +5,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
class SpaceCodeUtil {
static const codeLength = 7;
@ -39,7 +39,6 @@ class SpaceCodeUtil {
static Future<void> joinWithSpaceCodeDialog(
BuildContext context,
PangeaController pangeaController,
) async {
final String? spaceCode = await showTextInputDialog(
context: context,
@ -50,7 +49,7 @@ class SpaceCodeUtil {
autoSubmit: true,
);
if (spaceCode == null || spaceCode.isEmpty) return;
await pangeaController.classController.joinClasswithCode(
await MatrixState.pangeaController.classController.joinClasswithCode(
context,
spaceCode,
);

View file

@ -0,0 +1,80 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:go_router/go_router.dart';
import 'package:fluffychat/pangea/spaces/utils/space_code.dart';
class SpaceFilterButtons extends StatelessWidget {
const SpaceFilterButtons({super.key});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return SliverList(
delegate: SliverChildListDelegate(
[
const SizedBox(height: 16.0),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8.0,
vertical: 4.0,
),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: theme.colorScheme.primary,
padding: const EdgeInsets.all(0),
),
onPressed: () => SpaceCodeUtil.joinWithSpaceCodeDialog(context),
child: Row(
spacing: 16.0,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.join_right_outlined,
color: theme.colorScheme.onPrimary,
),
Text(
L10n.of(context).joinByCode,
style: theme.textTheme.bodyMedium?.copyWith(
color: theme.colorScheme.onPrimary,
),
),
],
),
),
),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8.0,
vertical: 2.0,
),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: theme.colorScheme.primary,
padding: const EdgeInsets.all(0),
),
onPressed: () => context.go('/rooms/newspace'),
child: Row(
spacing: 16.0,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.add,
color: theme.colorScheme.onPrimary,
),
Text(
L10n.of(context).createASpace,
style: theme.textTheme.bodyMedium?.copyWith(
color: theme.colorScheme.onPrimary,
),
),
],
),
),
),
],
),
);
}
}

View file

@ -7,6 +7,7 @@ import 'package:matrix/matrix.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/chat_list/navi_rail_item.dart';
import 'package:fluffychat/pangea/spaces/utils/space_code.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/stream_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
@ -58,7 +59,10 @@ class SpacesNavigationRail extends StatelessWidget {
Expanded(
child: ListView.builder(
scrollDirection: Axis.vertical,
itemCount: rootSpaces.length + 2,
// #Pangea
// itemCount: rootSpaces.length + 2,
itemCount: rootSpaces.length + 3,
// Pangea#
itemBuilder: (context, i) {
if (i == 0) {
return NaviRailItem(
@ -78,6 +82,20 @@ class SpacesNavigationRail extends StatelessWidget {
}
i--;
if (i == rootSpaces.length) {
// #Pangea
return NaviRailItem(
isSelected: false,
onTap: () =>
SpaceCodeUtil.joinWithSpaceCodeDialog(context),
icon: const Padding(
padding: EdgeInsets.all(8.0),
child: Icon(Icons.join_right_outlined),
),
toolTip: L10n.of(context).joinByCode,
);
}
if (i == rootSpaces.length + 1) {
// Pangea#
return NaviRailItem(
isSelected: false,
onTap: () => context.go('/rooms/newspace'),