refactor issue fetch result into object

This commit is contained in:
Ryan Nystrom
2017-07-27 12:54:20 -06:00
parent 0e94756bde
commit e37a88b1f3
5 changed files with 45 additions and 26 deletions

View File

@@ -11,12 +11,23 @@ import IGListKit
extension GithubClient {
enum IssueResultType {
case error
case success(IssueResult)
}
struct IssueResult {
let subjectId: String
let timelineViewModels: [ListDiffable]
let mentionableUsers: [AutocompleteUser]
}
func fetch(
owner: String,
repo: String,
number: Int,
width: CGFloat,
completion: @escaping (String?, [ListDiffable], [UserAutocomplete.User]) -> ()
completion: @escaping (IssueResultType) -> ()
) {
let query = IssueOrPullRequestQuery(owner: owner, repo: repo, number: number, pageSize: 100)
@@ -25,14 +36,21 @@ extension GithubClient {
let issueOrPullRequest = repository?.issueOrPullRequest
if let issueType: IssueType = issueOrPullRequest?.asIssue ?? issueOrPullRequest?.asPullRequest {
DispatchQueue.global().async {
let result = createViewModels(issue: issueType, width: width)
let users = repository?.mentionableUsers.userAutocompletes ?? []
let viewModels = createViewModels(issue: issueType, width: width)
let mentionableUsers = repository?.mentionableUsers.autocompleteUsers ?? []
let result = IssueResult(
subjectId: issueType.id,
timelineViewModels: viewModels,
mentionableUsers: mentionableUsers
)
DispatchQueue.main.async {
completion(issueType.id, result, users)
completion(.success(result))
}
}
} else {
completion(nil, [], [])
completion(.error)
}
ShowErrorStatusBar(graphQLErrors: result?.errors, networkError: error)
}

View File

@@ -216,16 +216,18 @@ FeedSelectionProviding {
repo: repo,
number: number,
width: view.bounds.width
) { subjectId, results, users in
if let subjectId = subjectId {
let addCommentClient = AddCommentClient(client: self.client, subjectId: subjectId)
) { resultType in
switch resultType {
case .success(let result):
let addCommentClient = AddCommentClient(client: self.client, subjectId: result.subjectId)
addCommentClient.addListener(listener: self)
self.addCommentClient = addCommentClient
self.autocomplete.add(UserAutocomplete(mentionableUsers: result.mentionableUsers))
self.autocomplete.add(UserAutocomplete(mentionableUsers: users))
self.models = result.timelineViewModels
default: break
}
self.models = results
self.feed.finishLoading(dismissRefresh: true)
}
}

View File

@@ -10,12 +10,11 @@ import Foundation
extension IssueOrPullRequestQuery.Data.Repository.MentionableUser {
typealias User = UserAutocomplete.User
var userAutocompletes: [User] {
var results = [User]()
var autocompleteUsers: [AutocompleteUser] {
var results = [AutocompleteUser]()
for node in nodes ?? [] {
guard let node = node, let avatarURL = URL(string: node.avatarUrl) else { continue }
results.append(User(avatarURL: avatarURL, login: node.login))
results.append(AutocompleteUser(avatarURL: avatarURL, login: node.login))
}
return results
}

View File

@@ -8,18 +8,18 @@
import Foundation
struct AutocompleteUser {
let avatarURL: URL
let login: String
}
final class UserAutocomplete: AutocompleteType {
struct User {
let avatarURL: URL
let login: String
}
private var cachedResults = [String: [AutocompleteUser]]()
private var results = [AutocompleteUser]()
private let mentionableUsers: [AutocompleteUser]
private var cachedResults = [String: [User]]()
private var results = [User]()
private let mentionableUsers: [User]
init(mentionableUsers: [User]) {
init(mentionableUsers: [AutocompleteUser]) {
self.mentionableUsers = mentionableUsers
}
@@ -44,7 +44,7 @@ final class UserAutocomplete: AutocompleteType {
completion(cached.count > 0)
}
var results = [User]()
var results = [AutocompleteUser]()
let lowerword = word.lowercased()
for u in mentionableUsers {

View File

@@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1109</string>
<string>1111</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>