1
1
import 'package:campus_flutter/base/enums/credentials.dart' ;
2
2
import 'package:campus_flutter/base/enums/search_category.dart' ;
3
+ import 'package:campus_flutter/base/enums/search_type.dart' ;
3
4
import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart' ;
4
5
import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_search_viewmodel.dart' ;
5
6
import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart' ;
@@ -12,30 +13,55 @@ import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/n
12
13
import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart' ;
13
14
import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart' ;
14
15
import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/study_room_search_viewmodel.dart' ;
16
+ import 'package:flutter/material.dart' ;
15
17
import 'package:flutter_riverpod/flutter_riverpod.dart' ;
16
18
import 'package:rxdart/rxdart.dart' ;
17
19
18
- final searchViewModel = Provider ((ref) => GlobalSearchViewModel (ref));
20
+ final searchViewModel = Provider .family< SearchViewModel , (SearchType , String ? )> (
21
+ (ref, data) => data.$2 != null
22
+ ? SearchViewModel (ref, searchType: data.$1, searchString: data.$2! )
23
+ : SearchViewModel (ref, searchType: data.$1),
24
+ );
19
25
20
- class GlobalSearchViewModel {
26
+ class SearchViewModel {
21
27
BehaviorSubject <List <SearchCategory >?> result = BehaviorSubject .seeded (null );
22
28
BehaviorSubject <List <SearchCategory >> selectedCategories =
23
29
BehaviorSubject .seeded ([]);
24
30
25
- String searchString = "" ;
31
+ late final TextEditingController searchTextController;
32
+ final SearchType searchType;
33
+ final Ref ref;
26
34
27
35
bool isAuthorized = false ;
28
36
29
- final Ref ref;
37
+ SearchViewModel (
38
+ this .ref, {
39
+ required this .searchType,
40
+ String ? searchString,
41
+ }) {
42
+ searchTextController = TextEditingController (text: searchString);
43
+ selectedCategories.add (_initialSearchCategories ());
44
+ triggerSearchAfterUpdate ();
45
+ }
30
46
31
- GlobalSearchViewModel (this .ref);
47
+ _initialSearchCategories () {
48
+ switch (searchType) {
49
+ case SearchType .general:
50
+ return < SearchCategory > [];
51
+ case SearchType .room:
52
+ return [SearchCategory .rooms, SearchCategory .studyRoom];
53
+ case SearchType .person:
54
+ return [SearchCategory .persons];
55
+ }
56
+ }
32
57
33
- void search (String searchString) async {
58
+ void _search () async {
59
+ final searchString = searchTextController.text;
34
60
if (searchString.isEmpty) {
35
61
clear ();
36
62
return ;
37
63
}
38
- this .searchString = searchString;
64
+ searchTextController.text = searchString;
39
65
if (selectedCategories.value.isEmpty) {
40
66
if (ref.read (onboardingViewModel).credentials.value ==
41
67
Credentials .tumId) {
@@ -63,29 +89,26 @@ class GlobalSearchViewModel {
63
89
}
64
90
65
91
void clear () {
66
- searchString = "" ;
92
+ searchTextController. clear () ;
67
93
result.add (null );
68
94
}
69
95
70
- void triggerSearchAfterUpdate (String ? searchString) {
71
- if (searchString != null ) {
72
- this .searchString = searchString;
73
- }
74
- search (this .searchString);
96
+ void triggerSearchAfterUpdate () {
97
+ _search ();
75
98
if (selectedCategories.value.isEmpty) {
76
99
for (var category in SearchCategory .values) {
77
100
if (isAuthorized) {
78
- _authorizedSearchTriggerBuilder (searchString, category);
101
+ _authorizedSearchTriggerBuilder (category);
79
102
} else {
80
- _unauthorizedSearchTriggerBuilder (searchString, category);
103
+ _unauthorizedSearchTriggerBuilder (category);
81
104
}
82
105
}
83
106
} else {
84
107
for (var selectedCategory in selectedCategories.value) {
85
108
if (isAuthorized) {
86
- _authorizedSearchTriggerBuilder (searchString, selectedCategory);
109
+ _authorizedSearchTriggerBuilder (selectedCategory);
87
110
} else {
88
- _unauthorizedSearchTriggerBuilder (searchString, selectedCategory);
111
+ _unauthorizedSearchTriggerBuilder (selectedCategory);
89
112
}
90
113
}
91
114
}
@@ -130,77 +153,57 @@ class GlobalSearchViewModel {
130
153
}
131
154
}
132
155
133
- void _authorizedSearchTriggerBuilder (
134
- String ? searchString,
135
- SearchCategory searchCategory,
136
- ) {
156
+ void _authorizedSearchTriggerBuilder (SearchCategory searchCategory) {
157
+ final searchString = searchTextController.text;
137
158
switch (searchCategory) {
138
159
case SearchCategory .grade:
139
- ref.read (gradesSearchViewModel).gradesSearch (query: this . searchString);
160
+ ref.read (gradesSearchViewModel).gradesSearch (query: searchString);
140
161
case SearchCategory .cafeterias:
141
- ref
142
- .read (cafeteriaSearchViewModel)
143
- .cafeteriaSearch (query: this .searchString);
162
+ ref.read (cafeteriaSearchViewModel).cafeteriaSearch (query: searchString);
144
163
case SearchCategory .calendar:
145
- ref
146
- .read (calendarSearchViewModel)
147
- .calendarSearch (query: this .searchString);
164
+ ref.read (calendarSearchViewModel).calendarSearch (query: searchString);
148
165
case SearchCategory .movie:
149
- ref.read (movieSearchViewModel).movieSearch (query: this . searchString);
166
+ ref.read (movieSearchViewModel).movieSearch (query: searchString);
150
167
case SearchCategory .news:
151
- ref.read (newsSearchViewModel).newsSearch (query: this . searchString);
168
+ ref.read (newsSearchViewModel).newsSearch (query: searchString);
152
169
case SearchCategory .studentClub:
153
170
ref
154
171
.read (studentClubSearchViewModel)
155
- .studentClubSearch (query: this . searchString);
172
+ .studentClubSearch (query: searchString);
156
173
case SearchCategory .studyRoom:
157
- ref
158
- .read (studyRoomSearchViewModel)
159
- .studyRoomSearch (query: this .searchString);
174
+ ref.read (studyRoomSearchViewModel).studyRoomSearch (query: searchString);
160
175
case SearchCategory .lectures:
161
- ref
162
- .read (lectureSearchViewModel)
163
- .lectureSearch (query: this .searchString);
176
+ ref.read (lectureSearchViewModel).lectureSearch (query: searchString);
164
177
case SearchCategory .personalLectures:
165
178
ref
166
179
.read (personalLectureSearchViewModel)
167
- .personalLectureSearch (query: this . searchString);
180
+ .personalLectureSearch (query: searchString);
168
181
case SearchCategory .persons:
169
- ref.read (personSearchViewModel).personSearch (query: this . searchString);
182
+ ref.read (personSearchViewModel).personSearch (query: searchString);
170
183
case SearchCategory .rooms:
171
- ref
172
- .read (navigaTumSearchViewModel)
173
- .navigaTumSearch (query: this .searchString);
184
+ ref.read (navigaTumSearchViewModel).navigaTumSearch (query: searchString);
174
185
default :
175
186
return ;
176
187
}
177
188
}
178
189
179
- void _unauthorizedSearchTriggerBuilder (
180
- String ? searchString,
181
- SearchCategory searchCategory,
182
- ) {
190
+ void _unauthorizedSearchTriggerBuilder (SearchCategory searchCategory) {
191
+ final searchString = searchTextController.text;
183
192
switch (searchCategory) {
184
193
case SearchCategory .cafeterias:
185
- ref
186
- .read (cafeteriaSearchViewModel)
187
- .cafeteriaSearch (query: this .searchString);
194
+ ref.read (cafeteriaSearchViewModel).cafeteriaSearch (query: searchString);
188
195
case SearchCategory .movie:
189
- ref.read (movieSearchViewModel).movieSearch (query: this . searchString);
196
+ ref.read (movieSearchViewModel).movieSearch (query: searchString);
190
197
case SearchCategory .news:
191
- ref.read (newsSearchViewModel).newsSearch (query: this . searchString);
198
+ ref.read (newsSearchViewModel).newsSearch (query: searchString);
192
199
case SearchCategory .studentClub:
193
200
ref
194
201
.read (studentClubSearchViewModel)
195
- .studentClubSearch (query: this . searchString);
202
+ .studentClubSearch (query: searchString);
196
203
case SearchCategory .studyRoom:
197
- ref
198
- .read (studyRoomSearchViewModel)
199
- .studyRoomSearch (query: this .searchString);
204
+ ref.read (studyRoomSearchViewModel).studyRoomSearch (query: searchString);
200
205
case SearchCategory .rooms:
201
- ref
202
- .read (navigaTumSearchViewModel)
203
- .navigaTumSearch (query: this .searchString);
206
+ ref.read (navigaTumSearchViewModel).navigaTumSearch (query: searchString);
204
207
default :
205
208
return ;
206
209
}
0 commit comments