From 5c329d47c1c9e9f023c3053fe1b80d4c0645e450 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Sat, 16 Sep 2023 01:18:37 -0300 Subject: [PATCH 1/2] refactor(ui): Make users be ordered properly on users page - Resolves https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/340 --- lib/logic/cubit/users/users_state.dart | 26 ++++++++++++++++++++++++++ lib/ui/pages/users/user.dart | 6 +++--- lib/ui/pages/users/users.dart | 12 ++---------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/lib/logic/cubit/users/users_state.dart b/lib/logic/cubit/users/users_state.dart index dbd931d7..4e2ed42e 100644 --- a/lib/logic/cubit/users/users_state.dart +++ b/lib/logic/cubit/users/users_state.dart @@ -18,6 +18,32 @@ class UsersState extends ServerInstallationDependendState { @override List get props => [users, isLoading]; + /// Makes a copy of existing users list, but places 'primary' + /// to the beginning and sorts the rest alphabetically + /// + /// If found a 'root' user, it doesn't get copied into the result + List get orderedUsers { + User? primaryUser; + final List normalUsers = []; + for (final User user in users) { + if (user.type == UserType.primary) { + primaryUser = user; + continue; + } + if (user.type == UserType.root) { + continue; + } + normalUsers.add(user); + } + + normalUsers.sort( + (final User a, final User b) => + a.login.toLowerCase().compareTo(b.login.toLowerCase()), + ); + + return primaryUser == null ? normalUsers : [primaryUser] + normalUsers; + } + UsersState copyWith({ final List? users, final bool? isLoading, diff --git a/lib/ui/pages/users/user.dart b/lib/ui/pages/users/user.dart index bbc01012..a40599e0 100644 --- a/lib/ui/pages/users/user.dart +++ b/lib/ui/pages/users/user.dart @@ -3,11 +3,11 @@ part of 'users.dart'; class _User extends StatelessWidget { const _User({ required this.user, - required this.isRootUser, + required this.isUserPrimary, }); final User user; - final bool isRootUser; + final bool isUserPrimary; @override Widget build(final BuildContext context) => InkWell( onTap: () { @@ -32,7 +32,7 @@ class _User extends StatelessWidget { user.login, style: Theme.of(context).textTheme.titleMedium?.copyWith( color: Theme.of(context).colorScheme.onBackground, - decoration: isRootUser + decoration: isUserPrimary ? TextDecoration.underline : user.isFoundOnServer ? TextDecoration.none diff --git a/lib/ui/pages/users/users.dart b/lib/ui/pages/users/users.dart index 58cb3b7d..4e939f20 100644 --- a/lib/ui/pages/users/users.dart +++ b/lib/ui/pages/users/users.dart @@ -45,15 +45,7 @@ class UsersPage extends StatelessWidget { } else { child = BlocBuilder( builder: (final BuildContext context, final UsersState state) { - final List users = state.users - .where((final user) => user.type != UserType.root) - .toList(); - // final List users = []; - users.sort( - (final User a, final User b) => - a.login.toLowerCase().compareTo(b.login.toLowerCase()), - ); - + final users = state.orderedUsers; if (users.isEmpty) { if (state.isLoading) { return const Center( @@ -115,7 +107,7 @@ class UsersPage extends StatelessWidget { itemBuilder: (final BuildContext context, final int index) => _User( user: users[index], - isRootUser: users[index].type == UserType.primary, + isUserPrimary: users[index].type == UserType.primary, ), ), ), From 7aa3305d237d3c8183b49e4394d7182de201f16b Mon Sep 17 00:00:00 2001 From: NaiJi Date: Mon, 18 Sep 2023 12:28:41 -0300 Subject: [PATCH 2/2] refactor: Rename isUserPrimary to isPrimaryUser for User --- lib/ui/pages/users/user.dart | 6 +++--- lib/ui/pages/users/users.dart | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ui/pages/users/user.dart b/lib/ui/pages/users/user.dart index a40599e0..9a90857b 100644 --- a/lib/ui/pages/users/user.dart +++ b/lib/ui/pages/users/user.dart @@ -3,11 +3,11 @@ part of 'users.dart'; class _User extends StatelessWidget { const _User({ required this.user, - required this.isUserPrimary, + required this.isPrimaryUser, }); final User user; - final bool isUserPrimary; + final bool isPrimaryUser; @override Widget build(final BuildContext context) => InkWell( onTap: () { @@ -32,7 +32,7 @@ class _User extends StatelessWidget { user.login, style: Theme.of(context).textTheme.titleMedium?.copyWith( color: Theme.of(context).colorScheme.onBackground, - decoration: isUserPrimary + decoration: isPrimaryUser ? TextDecoration.underline : user.isFoundOnServer ? TextDecoration.none diff --git a/lib/ui/pages/users/users.dart b/lib/ui/pages/users/users.dart index 4e939f20..22b9e451 100644 --- a/lib/ui/pages/users/users.dart +++ b/lib/ui/pages/users/users.dart @@ -107,7 +107,7 @@ class UsersPage extends StatelessWidget { itemBuilder: (final BuildContext context, final int index) => _User( user: users[index], - isUserPrimary: users[index].type == UserType.primary, + isPrimaryUser: users[index].type == UserType.primary, ), ), ),