Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit 25b9037

Browse files
committed
move fetch to client
1 parent 7c0360a commit 25b9037

18 files changed

+177
-343
lines changed

Classes/Bookmark/Bookmark.swift

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct Bookmark: Codable, Equatable {
1313
let name: String
1414
let owner: String
1515
let number: Int
16-
let title: String
16+
private(set) var title: String
1717
let hasIssueEnabled: Bool
1818
let defaultBranch: String
1919

@@ -33,6 +33,10 @@ struct Bookmark: Codable, Equatable {
3333
self.hasIssueEnabled = hasIssueEnabled
3434
self.defaultBranch = defaultBranch
3535
}
36+
37+
mutating func setTitle(with title: String) {
38+
self.title = title
39+
}
3640
}
3741

3842
extension Bookmark: Filterable {

Classes/Issues/Comments/IssueCommentSectionController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ final class IssueCommentSectionController: ListBindingSectionController<IssueCom
116116

117117
var editAction: UIAlertAction? {
118118
guard object?.viewerCanUpdate == true else { return nil }
119-
return UIAlertAction(title: NSLocalizedString("Edit", comment: ""), style: .default, handler: { [weak self] _ in
119+
return UIAlertAction(title: Constants.Strings.edit, style: .default, handler: { [weak self] _ in
120120
guard let strongSelf = self,
121121
let object = strongSelf.object,
122122
let number = object.number,

Classes/Issues/EditComment/EditCommentViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ MessageTextViewListener {
103103

104104
func setRightBarItemIdle() {
105105
navigationItem.rightBarButtonItem = UIBarButtonItem(
106-
title: NSLocalizedString("Save", comment: ""),
106+
title: Constants.Strings.save,
107107
style: .done,
108108
target: self,
109109
action: #selector(EditCommentViewController.onSave)

Classes/Issues/EditTitle/EditIssueTitleViewController.swift

+17-26
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,17 @@
99
import UIKit
1010
import GitHubAPI
1111
import SnapKit
12+
import Squawk
1213

13-
protocol EditIssueTitleViewControllerDelegate: class {
14-
func sendEditTitleRequest(newTitle: String, viewController: EditIssueTitleViewController)
15-
var currentIssueTitle: String? { get }
16-
var viewerCanUpdate: Bool { get }
17-
}
18-
19-
class EditIssueTitleViewController: UIViewController {
2014

21-
private let textView = UITextView()
15+
final class EditIssueTitleViewController: UIViewController {
16+
2217
private let issueTitle: String
23-
private weak var delegate: EditIssueTitleViewControllerDelegate?
18+
private let textView = UITextView()
19+
public private(set) var setTitle: String?
2420

25-
init(delegate: EditIssueTitleViewControllerDelegate) {
26-
self.delegate = delegate
27-
self.issueTitle = delegate.currentIssueTitle ?? ""
21+
init(issueTitle: String) {
22+
self.issueTitle = issueTitle
2823
super.init(nibName: nil, bundle: nil)
2924
}
3025

@@ -38,7 +33,7 @@ class EditIssueTitleViewController: UIViewController {
3833
width: Styles.Sizes.contextMenuSize.width,
3934
height: 120
4035
)
41-
title = NSLocalizedString("Edit", comment: "")
36+
title = Constants.Strings.edit
4237

4338
view.addSubview(textView)
4439
textView.snp.makeConstraints { make in
@@ -53,7 +48,7 @@ class EditIssueTitleViewController: UIViewController {
5348
style: .plain,
5449
target: self,
5550
action: #selector(
56-
EditIssueTitleViewController.onMenuCancel
51+
EditIssueTitleViewController.onCancel
5752
)
5853
)
5954
}
@@ -65,29 +60,25 @@ class EditIssueTitleViewController: UIViewController {
6560

6661
func setRightBarItemIdle() {
6762
navigationItem.rightBarButtonItem = UIBarButtonItem(
68-
title: NSLocalizedString("Save", comment: ""),
63+
title: Constants.Strings.save,
6964
style: .plain,
7065
target: self,
7166
action: #selector(
72-
EditIssueTitleViewController.onMenuSave
67+
EditIssueTitleViewController.onSave
7368
)
7469
)
7570
}
7671

77-
@objc func onMenuSave() {
78-
textView.isEditable = false
72+
@objc func onSave() {
7973
textView.resignFirstResponder()
80-
guard textView.text != issueTitle else { return }
81-
setRightBarItemSpinning()
82-
delegate?.sendEditTitleRequest(
83-
newTitle: textView.text,
84-
viewController: self
85-
)
74+
if textView.text != issueTitle {
75+
setTitle = textView.text
76+
}
77+
dismiss(animated: true)
8678
}
8779

88-
@objc func onMenuCancel() {
80+
@objc func onCancel() {
8981
textView.resignFirstResponder()
9082
dismiss(animated: true)
9183
}
92-
9384
}

Classes/Issues/GithubClient+Issues.swift

+53-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ extension GithubClient {
151151
let issueResult = IssueResult(
152152
id: issueType.id,
153153
pullRequest: issueType.pullRequest,
154-
title: titleStringSizing(title: issueType.title, contentSizeCategory: contentSizeCategory, width: width),
154+
title: titleStringSizing(title: issueType.title, contentSizeCategory: contentSizeCategory),
155155
labels: IssueLabelsModel(
156156
status: IssueLabelStatusModel(status: status, pullRequest: issueType.pullRequest),
157157
locked: issueType.locked,
@@ -525,4 +525,56 @@ extension GithubClient {
525525
}
526526
}
527527
}
528+
529+
func setTitle(
530+
previous: IssueResult,
531+
owner: String,
532+
repo: String,
533+
number: Int,
534+
title: String
535+
) {
536+
537+
let contentSizeCategory = UIContentSizeCategory.preferred
538+
539+
let titleChangeString = IssueRenamedString(
540+
previous: previous.title.string.allText,
541+
current: title,
542+
contentSizeCategory: contentSizeCategory,
543+
width: 0
544+
)
545+
546+
let issueRenamedModel = IssueRenamedModel(
547+
id: UUID().uuidString,
548+
actor: userSession?.username ?? "",
549+
date: Date(),
550+
titleChangeString: titleChangeString
551+
)
552+
553+
let issueResult = previous.updated(
554+
title: titleStringSizing(
555+
title: title,
556+
contentSizeCategory: contentSizeCategory
557+
),
558+
timelinePages: previous.timelinePages(appending: [issueRenamedModel])
559+
)
560+
561+
let cache = self.cache
562+
cache.set(value: issueResult)
563+
564+
let request = V3SetIssueTitleRequest(
565+
owner: owner,
566+
repo: repo,
567+
issueNumber: number,
568+
title: title
569+
)
570+
571+
client.send(request) { result in
572+
switch result {
573+
case .success: break
574+
case .failure(let error):
575+
cache.set(value: previous)
576+
Squawk.show(error: error)
577+
}
578+
}
579+
}
528580
}

Classes/Issues/IssueManagingContextController.swift

+32-26
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
4747
}
4848
let client: GithubClient
4949
weak var viewController: UIViewController?
50-
weak var editIssueTitleViewControllerDelegate: EditIssueTitleViewControllerDelegate?
5150

5251
init(model: IssueDetailsModel, client: GithubClient) {
5352
let button = IssueManageButton()
@@ -93,15 +92,7 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
9392
if result.pullRequest {
9493
actions.append(.reviewers)
9594
}
96-
97-
let viewerCanUpdate =
98-
editIssueTitleViewControllerDelegate?
99-
.viewerCanUpdate
100-
?? false
101-
102-
if viewerCanUpdate {
103-
actions.append(.editTitle)
104-
}
95+
actions += [.editTitle]
10596

10697
if result.labels.locked {
10798
actions.append(.unlock)
@@ -191,11 +182,15 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
191182
case .milestone: strongSelf.presentContextMenu(with: strongSelf.newMilestonesController())
192183
case .assignees: strongSelf.presentContextMenu(with: strongSelf.newPeopleController(type: .assignee))
193184
case .reviewers: strongSelf.presentContextMenu(with: strongSelf.newPeopleController(type: .reviewer))
185+
case .editTitle:
186+
strongSelf.presentContextMenu(
187+
with: strongSelf.newEditTitleController(),
188+
backgroundColor: .white
189+
)
194190
case .unlock: strongSelf.lock(false)
195191
case .lock: strongSelf.lock(true)
196192
case .reopen: strongSelf.close(false)
197193
case .close: strongSelf.close(true)
198-
case .editTitle: strongSelf.presentEditTitleController()
199194
}
200195
}
201196
}
@@ -220,6 +215,12 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
220215
sourceView: sender
221216
)
222217
}
218+
219+
func newEditTitleController() -> UIViewController {
220+
return EditIssueTitleViewController(
221+
issueTitle: result?.title.string.allText ?? ""
222+
)
223+
}
223224

224225
func newLabelsController() -> UIViewController {
225226
return LabelsViewController(
@@ -267,31 +268,22 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
267268
)
268269
}
269270

270-
func presentContextMenu(with controller: UIViewController) {
271+
func presentContextMenu(
272+
with controller: UIViewController,
273+
backgroundColor: UIColor = Styles.Colors.menuBackgroundColor.color
274+
) {
271275
guard let viewController = self.viewController else { return }
272276
ContextMenu.shared.show(
273277
sourceViewController: viewController,
274278
viewController: controller,
275279
options: ContextMenu.Options(
276280
containerStyle: ContextMenu.ContainerStyle(
277-
backgroundColor: Styles.Colors.menuBackgroundColor.color
281+
backgroundColor: backgroundColor
278282
)
279283
),
280284
delegate: self
281285
)
282286
}
283-
284-
func presentEditTitleController() {
285-
guard let viewController = viewController else { return }
286-
guard let delegate = editIssueTitleViewControllerDelegate else { return }
287-
let controller = EditIssueTitleViewController(
288-
delegate: delegate
289-
)
290-
ContextMenu.shared.show(
291-
sourceViewController: viewController,
292-
viewController: controller
293-
)
294-
}
295287

296288
func close(_ doClose: Bool) {
297289
guard let previous = result else { return }
@@ -316,6 +308,19 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
316308
)
317309
Haptic.triggerNotification(.success)
318310
}
311+
312+
func didDismiss(controller: EditIssueTitleViewController) {
313+
guard let title = controller.setTitle,
314+
let previous = result else { return }
315+
client.setTitle(
316+
previous: previous,
317+
owner: model.owner,
318+
repo: model.repo,
319+
number: model.number,
320+
title: title
321+
)
322+
323+
}
319324

320325
func didDismiss(selected labels: [RepositoryLabel]) {
321326
guard let previous = result else { return }
@@ -367,9 +372,10 @@ final class IssueManagingContextController: NSObject, ContextMenuDelegate {
367372
didDismiss(controller: people)
368373
} else if let labels = viewController as? LabelsViewController {
369374
didDismiss(selected: labels.selected)
375+
} else if let editIssueTitle = viewController as? EditIssueTitleViewController {
376+
didDismiss(controller: editIssueTitle)
370377
}
371378
}
372379

373380
func contextMenuDidDismiss(viewController: UIViewController, animated: Bool) {}
374-
375381
}

Classes/Issues/IssueViewModels.swift

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import StyledTextKit
1212

1313
func titleStringSizing(
1414
title: String,
15-
contentSizeCategory: UIContentSizeCategory,
16-
width: CGFloat
15+
contentSizeCategory: UIContentSizeCategory
1716
) -> StyledTextRenderer {
1817
let builder = StyledTextBuilder(styledText: StyledText(
1918
text: title, style: Styles.Text.headline.with(foreground: Styles.Colors.Gray.dark.color)

Classes/Issues/IssuesViewController+UpdateIssueTitle.swift

-71
This file was deleted.

0 commit comments

Comments
 (0)