Files
emir yorulmazandGitHub c35f592284 Create group (#288)
* Translations

* Hooks

* Routes

* Screens

* Tests

* Update CHANGELOG.md

* tapping close button navigates back

* find.byKey

* New design

* 'Create group'

* Pass selectedUsers as param to hook

* Add missing spacing for user list in set up group

* use back button for headers in create group flow
2026-02-18 16:00:47 +03:00

61 lines
1.4 KiB
Dart

import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:whitenoise/src/rust/api/users.dart' show User;
typedef UserSelectionState = ({
List<User> selectedUsers,
bool Function(User) isSelected,
int selectedCount,
});
typedef UserSelectionActions = ({
void Function(User) toggleUser,
void Function(List<User>) setUsers,
void Function() clearSelection,
});
({UserSelectionState state, UserSelectionActions actions}) useUserSelection({
List<User>? initialUsers,
}) {
final selectedUsers = useState<List<User>>(
initialUsers != null ? List<User>.from(initialUsers) : [],
);
void toggleUser(User user) {
final currentList = List<User>.from(selectedUsers.value);
final index = currentList.indexWhere((u) => u.pubkey == user.pubkey);
if (index >= 0) {
currentList.removeAt(index);
} else {
currentList.add(user);
}
selectedUsers.value = currentList;
}
bool isSelected(User user) {
return selectedUsers.value.any((u) => u.pubkey == user.pubkey);
}
void setUsers(List<User> users) {
selectedUsers.value = users;
}
void clearSelection() {
selectedUsers.value = [];
}
return (
state: (
selectedUsers: selectedUsers.value,
isSelected: isSelected,
selectedCount: selectedUsers.value.length,
),
actions: (
toggleUser: toggleUser,
setUsers: setUsers,
clearSelection: clearSelection,
),
);
}