mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 16:25:17 +00:00
Can cancel membership request
This commit is contained in:
82
lib/ui/widgets/group_membership_widget.dart
Normal file
82
lib/ui/widgets/group_membership_widget.dart
Normal file
@ -0,0 +1,82 @@
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/models/group.dart';
|
||||
import 'package:comunic/ui/widgets/safe_state.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:comunic/utils/ui_utils.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Group membership information widget
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class GroupMembershipWidget extends StatefulWidget {
|
||||
final Group group;
|
||||
final Function() onUpdated;
|
||||
|
||||
const GroupMembershipWidget({
|
||||
@required this.group,
|
||||
this.onUpdated,
|
||||
}) : assert(group != null);
|
||||
|
||||
@override
|
||||
_GroupMembershipWidgetState createState() => _GroupMembershipWidgetState();
|
||||
}
|
||||
|
||||
class _GroupMembershipWidgetState extends SafeState<GroupMembershipWidget> {
|
||||
Group get group => widget.group;
|
||||
|
||||
int get _id => group.id;
|
||||
|
||||
GroupMembershipLevel get _level => group.membershipLevel;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
switch (_level) {
|
||||
case GroupMembershipLevel.ADMINISTRATOR:
|
||||
return Text(tr("Administrator"));
|
||||
|
||||
case GroupMembershipLevel.MODERATOR:
|
||||
return Text(tr("Moderator"));
|
||||
|
||||
case GroupMembershipLevel.MEMBER:
|
||||
return Text(tr("Member"));
|
||||
|
||||
case GroupMembershipLevel.INVITED:
|
||||
// TODO: Handle this case.
|
||||
break;
|
||||
case GroupMembershipLevel.PENDING:
|
||||
return _buildPendingState();
|
||||
|
||||
case GroupMembershipLevel.VISITOR:
|
||||
// TODO: Handle this case.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// Build pending state
|
||||
Widget _buildPendingState() {
|
||||
return RichText(
|
||||
text: TextSpan(children: [
|
||||
TextSpan(text: tr("Requested") + " "),
|
||||
TextSpan(
|
||||
text: tr("Cancel"),
|
||||
style: TextStyle(color: Colors.blue),
|
||||
recognizer: TapGestureRecognizer()..onTap = () => _cancelRequest()),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
/// Cancel group membership request
|
||||
void _cancelRequest() async {
|
||||
if (!await GroupsHelper().cancelRequest(_id))
|
||||
showSimpleSnack(context, tr("Could not cancel your membership request!"));
|
||||
else {
|
||||
// Refresh state
|
||||
group.membershipLevel = GroupMembershipLevel.VISITOR;
|
||||
this.setState(() {});
|
||||
|
||||
if (this.widget.onUpdated != null) this.widget.onUpdated();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user