Skip to content

Commit 6cea246

Browse files
CubeRomanMagellanMagellan
andauthored
SK-673: Update UI for search and create group (#112)
* fix update user avatar * fix create group chat * add recent users to show * fix open group chat from search * update search form logic * minor fixes * fix recent users --------- Co-authored-by: Magellan <magellan@connectycube.com>
1 parent 00cbbf8 commit 6cea246

32 files changed

Lines changed: 476 additions & 376 deletions

sama_chat_client/lib/src/db/db_service.dart

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,27 @@ class DatabaseService {
5757
/// ////////////////////////////////
5858
5959
Future<List<ConversationModel>> getAllConversationsLocal(
60-
DateTime? ltDate) async {
60+
DateTime? ltDate, int? limit, String? type) async {
6161
var filter = ConversationModel_.type
6262
.equals('u')
6363
.and(ConversationModel_.lastMessageBind.notEquals(0).and(
6464
ConversationModel_.updatedAt
6565
.lessThanDate(ltDate ?? DateTime.now())))
6666
.or(ConversationModel_.type.equals('g'));
6767

68+
var condition =
69+
ConversationModel_.updatedAt.lessThanDate(ltDate ?? DateTime.now());
70+
if (type != null) {
71+
condition = condition.and(ConversationModel_.type.equals(type));
72+
}
73+
6874
final query = store!
6975
.box<ConversationModel>()
7076
// .query(filtered ? filter : null)
71-
.query(
72-
ConversationModel_.updatedAt.lessThanDate(ltDate ?? DateTime.now()))
77+
.query(condition)
7378
.order(ConversationModel_.updatedAt, flags: Order.descending)
74-
.build();
79+
.build()
80+
..limit = limit ?? 0;
7581
final results = await query.findAsync();
7682
query.close();
7783
return results;
@@ -264,6 +270,13 @@ class DatabaseService {
264270
user.bid = userInDb?.bid;
265271
if (userInDb?.avatar?.fileId == user.avatar?.fileId) {
266272
user.avatar?.bid = userInDb?.avatar?.bid;
273+
if (user.avatar?.imageUrl != userInDb?.avatar?.imageUrl) {
274+
//to check
275+
print('user.avatar putAsync');
276+
await store!
277+
.box<AvatarModel>()
278+
.putAsync(user.avatar!, mode: PutMode.update);
279+
}
267280
}
268281
}
269282
return store!.box<UserModel>().putAndGetManyAsync(items, mode: PutMode.put);

sama_chat_client/lib/src/db/local/conversation_local_datasource.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ class ConversationLocalDatasource {
88
// ConversationLocalDataSource(this.databaseService);
99

1010
Future<List<ConversationModel>> getAllConversationsLocal(
11-
{DateTime? ltDate}) async {
11+
{DateTime? ltDate, int? limit, String? type}) async {
1212
print('getAllConversationsLocal');
1313
try {
14-
return await _databaseService.getAllConversationsLocal(ltDate);
14+
return await _databaseService.getAllConversationsLocal(
15+
ltDate, limit, type);
1516
} catch (e) {
1617
print('getAllConversationsLocal e ${e.toString()}');
1718
throw DatabaseException(e.toString());

sama_chat_client/lib/src/features/conversation/view/messages_list.dart

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ class _MessagesListState extends State<MessagesList> {
7676
})
7777
],
7878
child: Stack(children: [
79-
BlocSelector<ConversationBloc, ConversationState, ConversationStatus>(
80-
selector: (state) => state.status,
81-
builder: (context, status) {
79+
BlocSelector<ConversationBloc, ConversationState,
80+
({ConversationStatus status, bool initial})>(
81+
selector: (state) => (
82+
status: state.status,
83+
initial: state.initial,
84+
),
85+
builder: (context, data) {
8286
var state = context.read<ConversationBloc>().state;
83-
switch (status) {
87+
switch (data.status) {
8488
case ConversationStatus.failure:
8589
WidgetsBinding.instance
8690
.addPostFrameCallback((_) => ScaffoldMessenger.of(context)
@@ -94,7 +98,7 @@ class _MessagesListState extends State<MessagesList> {
9498
success:
9599
case ConversationStatus.success:
96100
if (state.messages.isEmpty) {
97-
return state.initial
101+
return data.initial
98102
? const Center(child: CircularProgressIndicator())
99103
: Center(
100104
child: Container(

sama_chat_client/lib/src/features/conversation/widgets/forward_messages/forward_messages_widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import '../../../../repository/conversation/conversation_repository.dart';
55
import '../../../../repository/global_search/global_search_repository.dart';
66
import '../../../../repository/messages/messages_repository.dart';
77
import '../../../conversation_create/bloc/conversation_create_bloc.dart';
8-
import '../../../search/bloc/global_search_bloc.dart';
8+
import '../../../global_search/bloc/global_search_bloc.dart';
99
import '../../bloc/forward_message/forward_messages_bloc.dart';
1010
import '../../models/chat_message.dart';
1111
import 'forward_search_form.dart';

sama_chat_client/lib/src/features/conversation/widgets/forward_messages/forward_search_form.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import '../../../../navigation/constants.dart';
99
import '../../../../shared/ui/colors.dart';
1010
import '../../../conversation_create/bloc/conversation_create_bloc.dart';
1111
import '../../../conversation_create/bloc/conversation_create_state.dart';
12-
import '../../../search/bloc/global_search_bloc.dart';
13-
import '../../../search/bloc/global_search_state.dart';
14-
import '../../../search/view/search_bar.dart';
15-
import '../../../search/view/search_form.dart';
12+
import '../../../global_search/bloc/global_search_bloc.dart';
13+
import '../../../global_search/bloc/global_search_state.dart';
14+
import '../../../global_search/view/search_bar.dart';
15+
import '../../../global_search/view/search_result.dart';
1616
import '../../bloc/conversation_bloc.dart';
1717
import '../../bloc/forward_message/forward_messages_bloc.dart';
1818
import '../../models/chat_message.dart';
@@ -51,7 +51,9 @@ class ForwardSearchForm extends StatelessWidget {
5151
child: Column(
5252
spacing: 4,
5353
children: [
54-
const GlobalSearchBar(),
54+
const Padding(
55+
padding: EdgeInsets.only(bottom: 8),
56+
child: GlobalSearchBar()),
5557
_SearchBody(forwardMessages),
5658
],
5759
))));

sama_chat_client/lib/src/features/conversation_create/view/conversation_create_form.dart

Lines changed: 0 additions & 84 deletions
This file was deleted.

sama_chat_client/lib/src/features/conversation_create/view/conversation_create_page.dart

Lines changed: 0 additions & 61 deletions
This file was deleted.

sama_chat_client/lib/src/features/conversation_group_create/bloc/group_bloc.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import 'package:formz/formz.dart';
66
import 'package:image_picker/image_picker.dart';
77

88
import '../../../db/models/user_model.dart';
9+
import '../../../repository/conversation/conversation_repository.dart';
10+
import '../../../repository/user/user_repository.dart';
911
import '../models/avatar.dart';
1012
import '../models/groupname.dart';
1113
import '../models/participants.dart';
@@ -15,7 +17,11 @@ part 'group_event.dart';
1517
part 'group_state.dart';
1618

1719
class GroupBloc extends Bloc<GroupEvent, GroupState> {
18-
GroupBloc() : super(const GroupState()) {
20+
final ConversationRepository conversationRepository;
21+
final UserRepository userRepository;
22+
23+
GroupBloc(this.conversationRepository, this.userRepository)
24+
: super(const GroupState()) {
1925
on<GroupnameChanged>(_onGroupnameChanged);
2026
on<GroupAvatarPicked>(_onGroupAvatarPicked);
2127
on<GroupParticipantsAdded>(_onGroupParticipantsAdded);

sama_chat_client/lib/src/features/conversation_group_create/view/group_create_form.dart

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import '../../../features/conversation_create/bloc/conversation_create_event.dar
88
import '../../../shared/ui/colors.dart';
99
import '../../../shared/ui/view/participants_forms.dart';
1010
import '../../../shared/ui/view/text_button_forms.dart';
11-
import '../../../shared/utils/api_utils.dart';
1211
import '../../../shared/utils/screen_factor.dart';
1312
import '../../conversation_create/bloc/conversation_create_bloc.dart';
1413
import '../../conversations_list/widgets/avatar_letter_icon.dart';
15-
import '../../search/view/search_bar.dart';
14+
import '../../global_search/view/search_bar.dart';
15+
import '../../search/bloc/search_bloc.dart';
1616
import '../bloc/group_bloc.dart';
1717
import '../models/groupname.dart';
1818

@@ -39,7 +39,7 @@ class GroupCreateFormState extends State<GroupCreateForm> {
3939
leading: const BackButton(color: white),
4040
centerTitle: true,
4141
title: const Text(
42-
'Group create',
42+
'New group',
4343
style: TextStyle(color: white),
4444
)),
4545
body: BlocListener<GroupBloc, GroupState>(
@@ -63,30 +63,37 @@ class GroupCreateFormState extends State<GroupCreateForm> {
6363
}
6464
},
6565
child: Container(
66-
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 16),
67-
child: Column(mainAxisSize: MainAxisSize.min, children: [
68-
const GlobalSearchBar(),
69-
Expanded(
70-
child: BlocBuilder<GroupBloc, GroupState>(
71-
buildWhen: (previous, current) {
72-
return previous.participants != current.participants;
73-
}, builder: (context, state) {
74-
var users = state.participants.value;
75-
return ParticipantsForm(
76-
users: List.of(users),
77-
onAddParticipants: (user) {
78-
context
79-
.read<GroupBloc>()
80-
.add(GroupParticipantsAdded(user));
81-
},
82-
onRemoveParticipants: (user) {
83-
context
84-
.read<GroupBloc>()
85-
.add(GroupParticipantsRemoved(user));
86-
},
87-
);
88-
}))
89-
]),
66+
padding: const EdgeInsets.symmetric(vertical: 16),
67+
child: Column(
68+
mainAxisSize: MainAxisSize.min,
69+
spacing: 10,
70+
children: [
71+
const GlobalSearchBar(hintText: 'Search for people to add'),
72+
Expanded(
73+
child: BlocBuilder<GroupBloc, GroupState>(
74+
buildWhen: (previous, current) {
75+
return previous.participants != current.participants;
76+
}, builder: (context, state) {
77+
return Padding(
78+
padding: const EdgeInsets.symmetric(horizontal: 25),
79+
child: ParticipantsForm(
80+
participants: List.of(state.participants.value),
81+
users: context.select(
82+
(SearchBloc bloc) => bloc.state.users,
83+
),
84+
onAddParticipants: (user) {
85+
context
86+
.read<GroupBloc>()
87+
.add(GroupParticipantsAdded(user));
88+
},
89+
onRemoveParticipants: (user) {
90+
context
91+
.read<GroupBloc>()
92+
.add(GroupParticipantsRemoved(user));
93+
},
94+
));
95+
}))
96+
]),
9097
)),
9198
floatingActionButton:
9299
BlocBuilder<GroupBloc, GroupState>(buildWhen: (previous, current) {

0 commit comments

Comments
 (0)