Merge pull request #1202 from pangeachat/1185-allow-joining-space-with-classcode-via-search-results

added option to join space with code in public room bottom sheet
pull/1544/head
ggurdin 11 months ago committed by GitHub
commit 6299fa38bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -4587,5 +4587,7 @@
"addLink": "Add link", "addLink": "Add link",
"unableToJoinChat": "Unable to join chat. Maybe the other party has already closed the conversation.", "unableToJoinChat": "Unable to join chat. Maybe the other party has already closed the conversation.",
"createChatAndInviteUsers": "Create chat and invite users", "createChatAndInviteUsers": "Create chat and invite users",
"updatedNewSpaceDescription": "Spaces allow you to consolidate your chats and build private or public communities." "updatedNewSpaceDescription": "Spaces allow you to consolidate your chats and build private or public communities.",
"joinWithCode": "Join with code",
"enterCodeToJoin": "Enter code to join"
} }

@ -1,3 +1,4 @@
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/fluffy_share.dart';
import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/utils/url_launcher.dart';
@ -10,7 +11,10 @@ import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
class PublicRoomBottomSheet extends StatelessWidget { // #Pangea
// class PublicRoomBottomSheet extends StatelessWidget {
class PublicRoomBottomSheet extends StatefulWidget {
// Pangea#
final String? roomAlias; final String? roomAlias;
final BuildContext outerContext; final BuildContext outerContext;
final PublicRoomsChunk? chunk; final PublicRoomsChunk? chunk;
@ -26,6 +30,37 @@ class PublicRoomBottomSheet extends StatelessWidget {
assert(roomAlias != null || chunk != null); assert(roomAlias != null || chunk != null);
} }
// #Pangea
@override
State<StatefulWidget> createState() => PublicRoomBottomSheetState();
}
class PublicRoomBottomSheetState extends State<PublicRoomBottomSheet> {
BuildContext get outerContext => widget.outerContext;
String? get roomAlias => widget.roomAlias;
PublicRoomsChunk? get chunk => widget.chunk;
List<String>? get via => widget.via;
final TextEditingController _codeController = TextEditingController();
@override
void dispose() {
_codeController.dispose();
super.dispose();
}
Future<void> _joinWithCode(String code) async {
await MatrixState.pangeaController.classController.joinClasswithCode(
context,
_codeController.text,
);
}
bool get _isRoomMember =>
chunk != null &&
Matrix.of(outerContext).client.getRoomById(chunk!.roomId) != null;
// Pangea#
void _joinRoom(BuildContext context) async { void _joinRoom(BuildContext context) async {
final client = Matrix.of(outerContext).client; final client = Matrix.of(outerContext).client;
final chunk = this.chunk; final chunk = this.chunk;
@ -187,6 +222,78 @@ class PublicRoomBottomSheet extends StatelessWidget {
), ),
], ],
), ),
// #Pangea
if (!_isRoomMember)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: TextField(
controller: _codeController,
onSubmitted: (value) => _joinWithCode(value).then(
(value) => Navigator.of(context).pop(),
),
minLines: 1,
maxLines: 1,
decoration: InputDecoration(
hintText: L10n.of(context).enterCodeToJoin,
),
),
),
if (!_isRoomMember)
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 8,
),
child: ElevatedButton.icon(
onPressed: () => _joinWithCode(_codeController.text).then(
(_) => Navigator.of(context).pop(),
),
label: Text(L10n.of(context).joinWithCode),
icon: const Icon(Icons.navigate_next),
),
),
if (!_isRoomMember)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Row(
children: [
Expanded(
child: Divider(
color: theme.colorScheme.surfaceContainerHighest,
),
),
Container(
margin: const EdgeInsets.symmetric(
horizontal: 4,
vertical: 16.0,
),
padding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 2,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
AppConfig.borderRadius / 3,
),
color: theme.colorScheme.surface.withAlpha(128),
),
child: Text(
L10n.of(context).or,
style: TextStyle(
fontSize: AppConfig.fontSizeFactor *
AppConfig.messageFontSize,
),
),
),
Expanded(
child: Divider(
color: theme.colorScheme.surfaceContainerHighest,
),
),
],
),
),
// Pangea#
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: ElevatedButton.icon( child: ElevatedButton.icon(

Loading…
Cancel
Save