mirror of
https://github.com/zhigang1992/GitHawk.git
synced 2026-04-22 19:32:58 +08:00
ipad popover for editing labels
This commit is contained in:
@@ -12,7 +12,7 @@ import IGListKit
|
||||
|
||||
final class IssueLabelEditCell: SelectableCell, ListBindable {
|
||||
|
||||
private let label = UILabel()
|
||||
let label = UILabel()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
@@ -79,7 +79,7 @@ LabelsViewControllerDelegate {
|
||||
func sectionController(_ sectionController: ListBindingSectionController<ListDiffable>, didSelectItemAt index: Int, viewModel: Any) {
|
||||
collectionContext?.deselectItem(at: index, sectionController: self, animated: true)
|
||||
|
||||
if collectionContext?.cellForItem(at: index, sectionController: self) is IssueLabelEditCell {
|
||||
if let cell = collectionContext?.cellForItem(at: index, sectionController: self) as? IssueLabelEditCell {
|
||||
guard let controller = UIStoryboard(name: "Labels", bundle: nil).instantiateInitialViewController() as? LabelsViewController
|
||||
else { fatalError("Missing labels view controller") }
|
||||
controller.configure(
|
||||
@@ -89,7 +89,11 @@ LabelsViewControllerDelegate {
|
||||
repo: repo,
|
||||
delegate: self
|
||||
)
|
||||
viewController?.present(UINavigationController(rootViewController: controller), animated: true)
|
||||
let nav = UINavigationController(rootViewController: controller)
|
||||
nav.modalPresentationStyle = .popover
|
||||
nav.popoverPresentationController?.sourceView = cell.label
|
||||
nav.popoverPresentationController?.sourceRect = cell.label.frame
|
||||
viewController?.present(nav, animated: true)
|
||||
} else {
|
||||
expanded = !expanded
|
||||
update(animated: true)
|
||||
@@ -100,7 +104,7 @@ LabelsViewControllerDelegate {
|
||||
|
||||
func didDismiss(controller: LabelsViewController, selectedLabels: [RepositoryLabel]) {
|
||||
labelsOverride = selectedLabels
|
||||
update(animated: false)
|
||||
update(animated: true)
|
||||
|
||||
let request = GithubClient.Request(
|
||||
path: "repos/\(owner)/\(repo)/issues/\(number)",
|
||||
|
||||
@@ -14,6 +14,7 @@ protocol LabelsViewControllerDelegate: class {
|
||||
|
||||
final class LabelsViewController: UITableViewController {
|
||||
|
||||
private let minContentHeight: CGFloat = 200
|
||||
private weak var delegate: LabelsViewControllerDelegate? = nil
|
||||
private var labels = [RepositoryLabel]()
|
||||
private var selectedLabels = Set<String>()
|
||||
@@ -37,22 +38,31 @@ final class LabelsViewController: UITableViewController {
|
||||
}
|
||||
|
||||
func fetch() {
|
||||
client.apollo.fetch(query: request, cachePolicy: .fetchIgnoringCacheData) { (result, error) in
|
||||
self.tableView.refreshControl?.endRefreshing()
|
||||
client.apollo.fetch(query: request, cachePolicy: .fetchIgnoringCacheData) { [weak self] (result, error) in
|
||||
self?.tableView.refreshControl?.endRefreshing()
|
||||
if let nodes = result?.data?.repository?.labels?.nodes {
|
||||
var labels = [RepositoryLabel]()
|
||||
for node in nodes {
|
||||
guard let node = node else { continue }
|
||||
labels.append(RepositoryLabel(color: node.color, name: node.name))
|
||||
}
|
||||
self.labels = labels
|
||||
self.tableView.reloadData()
|
||||
self?.update(labels: labels)
|
||||
} else {
|
||||
StatusBar.showGenericError()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func update(labels: [RepositoryLabel]) {
|
||||
self.labels = labels
|
||||
tableView.reloadData()
|
||||
tableView.layoutIfNeeded()
|
||||
|
||||
var contentSize = tableView.contentSize
|
||||
contentSize.height = max(minContentHeight, contentSize.height)
|
||||
navigationController?.preferredContentSize = contentSize
|
||||
}
|
||||
|
||||
@IBAction func onDone() {
|
||||
var selected = [RepositoryLabel]()
|
||||
for label in labels {
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1324</string>
|
||||
<string>1329</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
|
||||
Reference in New Issue
Block a user