Skip to content

Commit 5c917c1

Browse files
committed
# Search by Language 오류 수정
1 parent e98c042 commit 5c917c1

File tree

4 files changed

+51
-29
lines changed

4 files changed

+51
-29
lines changed

GitTime/Sources/Network/GitHubAPI.swift

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ enum GitHubAPI {
1414
case activityEvent(userName: String, page: Int)
1515
case followers(userName: String, page: Int)
1616
case following(userName: String, page: Int)
17-
case searchUser(query: String, page: Int, language: String?)
17+
case searchUser(query: String, page: Int)
1818
case searchRepo(query: String, page: Int, language: String?)
1919
}
2020

@@ -59,15 +59,22 @@ extension GitHubAPI: TargetType {
5959
"page": page
6060
]
6161
return .requestParameters(parameters: params, encoding: URLEncoding.default)
62+
6263
case let .activityEvent(_, page):
6364
let params: [String: Any] = [
6465
"per_page": 30,
6566
"page": page
6667
]
6768
return .requestParameters(parameters: params, encoding: URLEncoding.default)
68-
case let .searchUser(query, page, language),
69-
let .searchRepo(query, page, language):
7069

70+
case let .searchUser(query, page):
71+
let params: [String: Any] = [
72+
"q": query,
73+
"page": page
74+
]
75+
return .requestParameters(parameters: params, encoding: URLEncoding.default)
76+
77+
case let .searchRepo(query, page, language):
7178
var query = query
7279
if let language = language {
7380
query = "\(query)+\(language.lowercased())"

GitTime/Sources/Services/SearchService.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import RxSwift
1010

1111
protocol SearchServiceType {
12-
func searchUser(query: String, page: Int, language: String?) -> Observable<([User], Bool)>
12+
func searchUser(query: String, page: Int) -> Observable<([User], Bool)>
1313
func searchRepo(query: String, page: Int, language: String?) -> Observable<([Repository], Bool)>
1414
}
1515

@@ -21,8 +21,8 @@ class SearchService: SearchServiceType {
2121
self.networking = networking
2222
}
2323

24-
func searchUser(query: String, page: Int, language: String?) -> Observable<([User], Bool)> {
25-
return self.networking.request(.searchUser(query: query, page: page, language: language))
24+
func searchUser(query: String, page: Int) -> Observable<([User], Bool)> {
25+
return self.networking.request(.searchUser(query: query, page: page))
2626
.map(SearchResults<User>.self)
2727
.map { result -> ([User], Bool) in
2828
let canLoadMore = result.totalCount > page * 30

GitTime/Sources/ViewControllers/Search/SearchViewController.swift

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -107,21 +107,7 @@ class SearchViewController: BaseViewController, StoryboardView, ReactorBased {
107107
.filterNil()
108108
.subscribe(onNext: { [weak self] type in
109109
guard let self = self, let headerView = self.tableView.tableHeaderView else { return }
110-
var frame = headerView.frame
111-
switch type {
112-
case .users:
113-
frame.size.height = 63.0
114-
self.segmentBottomToLanguageConstraint.isActive = false
115-
self.segmentBottomToSuperViewConstraint.isActive = true
116-
case .repositories:
117-
frame.size.height = 117.0
118-
self.segmentBottomToLanguageConstraint.isActive = true
119-
self.segmentBottomToSuperViewConstraint.isActive = false
120-
}
121-
headerView.frame = frame
122-
self.tableView.tableHeaderView = headerView
123-
headerView.setNeedsLayout()
124-
headerView.layoutIfNeeded()
110+
self.updateHeaderViewFrame(headerView, type: type)
125111
self.languageButton.isHidden = type == .users
126112
}).disposed(by: self.disposeBag)
127113

@@ -131,6 +117,19 @@ class SearchViewController: BaseViewController, StoryboardView, ReactorBased {
131117
.bind(to: reactor.action)
132118
.disposed(by: self.disposeBag)
133119

120+
languageButton.rx.tap
121+
.flatMap { [weak self] _ -> Observable<Language> in
122+
guard let self = self else { return .empty() }
123+
let languageReactor = LanguagesViewReactor(languagesService: LanguagesService(),
124+
userDefaultsService: UserDefaultsService())
125+
let languageVC = LanguagesViewController.instantiate(withReactor: languageReactor)
126+
self.present(languageVC.navigationWrap(), animated: true, completion: nil)
127+
return languageVC.selectedLanguage
128+
}.subscribe(onNext: { language in
129+
// let languageName = language.type != .all ? language.name : nil
130+
reactor.action.onNext(.selectLanguage(language))
131+
}).disposed(by: self.disposeBag)
132+
134133
// State
135134
reactor.state.map { $0.isLoading }
136135
.distinctUntilChanged()
@@ -227,4 +226,22 @@ class SearchViewController: BaseViewController, StoryboardView, ReactorBased {
227226
}
228227
})
229228
}
229+
230+
private func updateHeaderViewFrame(_ headerView: UIView, type: SearchTypes) {
231+
var frame = headerView.frame
232+
switch type {
233+
case .users:
234+
frame.size.height = 63.0
235+
self.segmentBottomToLanguageConstraint.isActive = false
236+
self.segmentBottomToSuperViewConstraint.isActive = true
237+
case .repositories:
238+
frame.size.height = 117.0
239+
self.segmentBottomToLanguageConstraint.isActive = true
240+
self.segmentBottomToSuperViewConstraint.isActive = false
241+
}
242+
headerView.frame = frame
243+
self.tableView.tableHeaderView = headerView
244+
headerView.setNeedsLayout()
245+
headerView.layoutIfNeeded()
246+
}
230247
}

GitTime/Sources/ViewControllers/Search/SearchViewReactor.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,14 @@ class SearchViewReactor: Reactor {
131131
self.removeSearchWord(text)
132132
return .just(.removeRecentSearchWord(indexPath))
133133
case .selectLanguage(let language):
134-
// self.userdefaultsService.set(value: language, forKey: UserDefaultsKey.langauge)
134+
guard self.currentState.segmentType == SearchTypes.repositories else { return .empty() }
135135
self.userdefaultsService.setStruct(value: language, forKey: UserDefaultsKey.langauge)
136136
let languageMutation: Observable<Mutation> = .just(.setLanguage(language))
137137

138138
guard let query = self.currentState.query, !query.isEmpty else { return .empty() }
139139
let startLoadingMutation: Observable<Mutation> = .just(.setLoading(true))
140140
let endLoadingMutation: Observable<Mutation> = .just(.setLoading(false))
141-
let requestMutation: Observable<Mutation> = (self.currentState.segmentType == SearchTypes.users) ?
142-
self.searchUsersMutation(query: query) : self.searchRepositoriesMutation(query: query)
141+
let requestMutation: Observable<Mutation> = self.searchRepositoriesMutation(query: query, language: language)
143142

144143
return .concat([languageMutation, startLoadingMutation, requestMutation, endLoadingMutation])
145144
}
@@ -204,18 +203,17 @@ class SearchViewReactor: Reactor {
204203
private func searchUsersMutation(query: String) -> Observable<Mutation> {
205204
let currentPage = SearchViewReactor.INITIAL_PAGE
206205
guard !query.isEmpty else { return .just(.setSearchUsers([], nextPage: currentPage, canLoadMore: false)) }
207-
let language = self.currentState.language
208-
return self.searchService.searchUser(query: query, page: currentPage, language: language?.name)
206+
return self.searchService.searchUser(query: query, page: currentPage)
209207
.map { (lists, canLoadMore) -> Mutation in
210208
let newPage = !canLoadMore ? currentPage : currentPage + 1
211209
return .setSearchUsers(lists, nextPage: newPage, canLoadMore: canLoadMore)
212210
}.catchErrorJustReturn(.setSearchUsers([], nextPage: currentPage, canLoadMore: false))
213211
}
214212

215-
private func searchRepositoriesMutation(query: String) -> Observable<Mutation> {
213+
private func searchRepositoriesMutation(query: String, language: Language? = nil) -> Observable<Mutation> {
216214
let currentPage = SearchViewReactor.INITIAL_PAGE
217215
guard !query.isEmpty else { return .just(.setSearchRepos([], nextPage: currentPage, canLoadMore: false)) }
218-
let language = self.currentState.language
216+
let language = language ?? self.currentState.language
219217
return self.searchService.searchRepo(query: query, page: currentPage, language: language?.name)
220218
.map { (lists, canLoadMore) -> Mutation in
221219
let newPage = !canLoadMore ? currentPage : currentPage + 1
@@ -241,7 +239,7 @@ class SearchViewReactor: Reactor {
241239

242240
switch currentSearchType {
243241
case .users:
244-
return self.searchService.searchUser(query: query, page: currentPage, language: language?.name)
242+
return self.searchService.searchUser(query: query, page: currentPage)
245243
.map { (lists, canLoadMore) -> Mutation in
246244
let newPage = !canLoadMore ? currentPage : currentPage + 1
247245
return .setMoreSearchUsers(lists, nextPage: newPage, canLoadMore: canLoadMore)

0 commit comments

Comments
 (0)