Add filtering by ban type to member list
This commit is contained in:
parent
fa8b8ddd14
commit
20f0ce9fa5
3 changed files with 46 additions and 11 deletions
|
|
@ -12,10 +12,6 @@ extension SchemeToTheme on ColorScheme {
|
||||||
backgroundColor: WidgetStatePropertyAll(primaryContainer),
|
backgroundColor: WidgetStatePropertyAll(primaryContainer),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
chipTheme: ChipThemeData(
|
|
||||||
labelStyle: TextStyle(color: onPrimary),
|
|
||||||
color: WidgetStatePropertyAll(primary),
|
|
||||||
),
|
|
||||||
textTheme: ThemeData(
|
textTheme: ThemeData(
|
||||||
fontFamilyFallback: ["sans", "emoji"],
|
fontFamilyFallback: ["sans", "emoji"],
|
||||||
brightness: brightness,
|
brightness: brightness,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
import "package:nexus/controllers/members_by_type_controller.dart";
|
import "package:nexus/controllers/members_by_type_controller.dart";
|
||||||
import "package:nexus/helpers/extensions/better_when.dart";
|
import "package:nexus/helpers/extensions/better_when.dart";
|
||||||
|
|
@ -6,24 +7,25 @@ import "package:nexus/helpers/extensions/show_user_popover.dart";
|
||||||
import "package:nexus/models/membership_status.dart";
|
import "package:nexus/models/membership_status.dart";
|
||||||
import "package:nexus/widgets/avatar_or_hash.dart";
|
import "package:nexus/widgets/avatar_or_hash.dart";
|
||||||
|
|
||||||
class MemberList extends ConsumerWidget {
|
class MemberList extends HookConsumerWidget {
|
||||||
const MemberList({super.key});
|
const MemberList({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final status = useState(MembershipStatus.join);
|
||||||
final membersProvider = ref.watch(
|
final membersProvider = ref.watch(
|
||||||
MembersByTypeController.provider(MembershipStatus.join),
|
MembersByTypeController.provider(status.value),
|
||||||
);
|
);
|
||||||
|
|
||||||
return Drawer(
|
return Drawer(
|
||||||
shape: Border(),
|
shape: Border(),
|
||||||
child: Column(
|
child: Column(
|
||||||
|
spacing: 8,
|
||||||
children: [
|
children: [
|
||||||
AppBar(
|
AppBar(
|
||||||
scrolledUnderElevation: 0,
|
scrolledUnderElevation: 0,
|
||||||
leading: Icon(Icons.people),
|
leading: Icon(Icons.people),
|
||||||
title: Text(
|
title: Text("Members"),
|
||||||
"Members ${membersProvider.when(data: (members) => "${members.length}", error: (_, _) => "", loading: () => "")}",
|
|
||||||
),
|
|
||||||
actionsPadding: EdgeInsets.only(right: 4),
|
actionsPadding: EdgeInsets.only(right: 4),
|
||||||
actions: [
|
actions: [
|
||||||
if (Scaffold.of(context).hasEndDrawer)
|
if (Scaffold.of(context).hasEndDrawer)
|
||||||
|
|
@ -34,6 +36,27 @@ class MemberList extends ConsumerWidget {
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
spacing: 8,
|
||||||
|
children: [
|
||||||
|
FilterChip(
|
||||||
|
label: Text("Joined"),
|
||||||
|
onSelected: (value) => status.value = MembershipStatus.join,
|
||||||
|
selected: status.value == MembershipStatus.join,
|
||||||
|
),
|
||||||
|
FilterChip(
|
||||||
|
label: Text("Invited"),
|
||||||
|
onSelected: (value) => status.value = MembershipStatus.invite,
|
||||||
|
selected: status.value == MembershipStatus.invite,
|
||||||
|
),
|
||||||
|
FilterChip(
|
||||||
|
label: Text("Banned"),
|
||||||
|
onSelected: (value) => status.value = MembershipStatus.ban,
|
||||||
|
selected: status.value == MembershipStatus.ban,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
membersProvider.betterWhen(
|
membersProvider.betterWhen(
|
||||||
data: (members) => Expanded(
|
data: (members) => Expanded(
|
||||||
child: ListView(
|
child: ListView(
|
||||||
|
|
|
||||||
|
|
@ -116,9 +116,25 @@ class UserPopover extends ConsumerWidget {
|
||||||
for (final pronoun in profile.pronouns.where(
|
for (final pronoun in profile.pronouns.where(
|
||||||
(pronoun) => pronoun.language == "en",
|
(pronoun) => pronoun.language == "en",
|
||||||
))
|
))
|
||||||
Chip(label: Text(pronoun.summary)),
|
Chip(
|
||||||
|
label: Text(pronoun.summary),
|
||||||
|
labelStyle: TextStyle(
|
||||||
|
color: theme.colorScheme.onPrimary,
|
||||||
|
),
|
||||||
|
color: WidgetStatePropertyAll(
|
||||||
|
theme.colorScheme.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
if (profile.timezone != null)
|
if (profile.timezone != null)
|
||||||
Chip(label: Text(profile.timezone!)),
|
Chip(
|
||||||
|
label: Text(profile.timezone!),
|
||||||
|
labelStyle: TextStyle(
|
||||||
|
color: theme.colorScheme.onPrimary,
|
||||||
|
),
|
||||||
|
color: WidgetStatePropertyAll(
|
||||||
|
theme.colorScheme.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue