Add first-class Actions management (#63)

This commit is contained in:
Georg Bauer
2026-08-15 20:06:52 +02:00
parent f84ab774e6
commit 59bcddfadf
32 changed files with 4039 additions and 275 deletions

View File

@@ -46,9 +46,14 @@ func errorAlert(_ message: String) -> UIAlertController {
return alert
}
func errorMessage(_ error: Error) -> String {
if case let GotchaError.Message(message) = error { return message }
return error.localizedDescription
}
extension UIViewController {
func show(error: Error) {
present(errorAlert(error.localizedDescription), animated: true)
present(errorAlert(errorMessage(error)), animated: true)
}
func beginNavigationLoading(_ spinner: UIActivityIndicatorView) {
@@ -392,3 +397,31 @@ func separator() -> UIView {
line.heightAnchor.constraint(equalToConstant: 1 / UIScreen.main.scale).isActive = true
return line
}
@MainActor
func setPanelTitle(_ viewController: UIViewController, _ title: String, server: String?) {
viewController.title = title
viewController.navigationItem.titleView = nil
if #available(iOS 26.0, *) {
viewController.navigationItem.subtitle = server.flatMap { $0.isEmpty ? nil : $0 }
return
}
guard let server, !server.isEmpty else { return }
let titleLabel = UILabel()
titleLabel.text = title
titleLabel.font = .preferredFont(forTextStyle: .headline)
titleLabel.adjustsFontForContentSizeCategory = true
titleLabel.textAlignment = .center
let serverLabel = UILabel()
serverLabel.text = server
serverLabel.font = .preferredFont(forTextStyle: .caption1)
serverLabel.adjustsFontForContentSizeCategory = true
serverLabel.textColor = .secondaryLabel
serverLabel.textAlignment = .center
let labels = UIStackView(arrangedSubviews: [titleLabel, serverLabel])
labels.axis = .vertical
labels.spacing = 0
labels.alignment = .center
labels.accessibilityLabel = "\(title), \(server)"
viewController.navigationItem.titleView = labels
}