Add (WIP) ban/klck ability

This commit is contained in:
Henry Hiles 2026-04-02 17:37:27 -04:00
commit 3a1bcb5b8f
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
13 changed files with 113 additions and 30 deletions

View file

@ -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,