ipad popover for editing labels

This commit is contained in:
Ryan Nystrom
2017-08-08 20:00:16 -04:00
parent ec8e11b197
commit 561efb8524
4 changed files with 23 additions and 9 deletions

View File

@@ -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)

View File

@@ -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)",

View File

@@ -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 {

View File

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