Add (WIP) ban/klck ability
This commit is contained in:
parent
c130d28b93
commit
3a1bcb5b8f
13 changed files with 113 additions and 30 deletions
|
|
@ -1,8 +1,9 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||
import "package:nexus/controllers/members_controller.dart";
|
||||
import "package:nexus/controllers/members_by_type_controller.dart";
|
||||
import "package:nexus/controllers/rooms_controller.dart";
|
||||
import "package:nexus/helpers/extensions/better_when.dart";
|
||||
import "package:nexus/models/membership_status.dart";
|
||||
import "package:nexus/widgets/avatar_or_hash.dart";
|
||||
import "package:nexus/widgets/loading.dart";
|
||||
|
||||
|
|
@ -31,7 +32,9 @@ class MentionOverlay extends ConsumerWidget {
|
|||
child: switch (triggerCharacter) {
|
||||
"@" =>
|
||||
ref
|
||||
.watch(MembersController.provider)
|
||||
.watch(
|
||||
MembersByTypeController.provider(MembershipStatus.join),
|
||||
)
|
||||
.betterWhen(
|
||||
data: (members) => ListView(
|
||||
children:
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||
import "package:nexus/controllers/members_controller.dart";
|
||||
import "package:nexus/controllers/members_by_type_controller.dart";
|
||||
import "package:nexus/helpers/extensions/better_when.dart";
|
||||
import "package:nexus/helpers/extensions/show_user_popover.dart";
|
||||
import "package:nexus/models/membership_status.dart";
|
||||
import "package:nexus/widgets/avatar_or_hash.dart";
|
||||
|
||||
class MemberList extends ConsumerWidget {
|
||||
|
|
@ -10,7 +11,9 @@ class MemberList extends ConsumerWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final membersProvider = ref.watch(MembersController.provider);
|
||||
final membersProvider = ref.watch(
|
||||
MembersByTypeController.provider(MembershipStatus.join),
|
||||
);
|
||||
return Drawer(
|
||||
shape: Border(),
|
||||
child: Column(
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
resolveUser: notifier.resolveUser,
|
||||
resolveUser: (_) async => null,
|
||||
chatController: controller,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:nexus/controllers/client_controller.dart";
|
||||
import "package:nexus/controllers/client_state_controller.dart";
|
||||
import "package:nexus/controllers/profile_controller.dart";
|
||||
import "package:nexus/controllers/selected_room_controller.dart";
|
||||
import "package:nexus/helpers/extensions/better_when.dart";
|
||||
import "package:nexus/models/membership.dart";
|
||||
import "package:nexus/models/membership_status.dart";
|
||||
import "package:nexus/models/requests/set_membership_request.dart";
|
||||
import "package:nexus/widgets/avatar_or_hash.dart";
|
||||
import "package:nexus/main.dart";
|
||||
|
||||
class UserPopover extends ConsumerWidget {
|
||||
final Membership member;
|
||||
|
|
@ -14,6 +19,11 @@ class UserPopover extends ConsumerWidget {
|
|||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final theme = Theme.of(context);
|
||||
final textTheme = theme.textTheme;
|
||||
final client = ref.watch(ClientController.provider.notifier);
|
||||
final roomId = ref.watch(
|
||||
SelectedRoomController.provider.select((room) => room?.metadata?.id),
|
||||
);
|
||||
|
||||
return Column(
|
||||
spacing: 16,
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
|
|
@ -53,14 +63,24 @@ class UserPopover extends ConsumerWidget {
|
|||
),
|
||||
],
|
||||
),
|
||||
if (member.userId != ref.watch(ClientStateController.provider)?.userId)
|
||||
if (member.userId !=
|
||||
ref.watch(ClientStateController.provider)?.userId &&
|
||||
roomId != null)
|
||||
Wrap(
|
||||
spacing: 8,
|
||||
runSpacing: 8,
|
||||
children: [
|
||||
FilledButton.icon(onPressed: null, label: Text("Message")),
|
||||
FilledButton.icon(
|
||||
onPressed: null,
|
||||
onPressed: () => client
|
||||
.setMembership(
|
||||
SetMembershipRequest(
|
||||
userId: member.userId,
|
||||
roomId: roomId,
|
||||
action: MembershipAction.kick,
|
||||
),
|
||||
)
|
||||
.onError(showError),
|
||||
label: Text("Kick"),
|
||||
style: ButtonStyle(
|
||||
backgroundColor: WidgetStatePropertyAll(
|
||||
|
|
@ -72,8 +92,20 @@ class UserPopover extends ConsumerWidget {
|
|||
),
|
||||
),
|
||||
ElevatedButton.icon(
|
||||
onPressed: null,
|
||||
label: Text("Ban"),
|
||||
onPressed: () => client
|
||||
.setMembership(
|
||||
SetMembershipRequest(
|
||||
userId: member.userId,
|
||||
roomId: roomId,
|
||||
action: member.status == MembershipStatus.ban
|
||||
? MembershipAction.unban
|
||||
: MembershipAction.ban,
|
||||
),
|
||||
)
|
||||
.onError(showError),
|
||||
label: Text(
|
||||
member.status == MembershipStatus.ban ? "Unban" : "Ban",
|
||||
),
|
||||
style: ButtonStyle(
|
||||
backgroundColor: WidgetStatePropertyAll(
|
||||
theme.colorScheme.errorContainer,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue