fix(macos): wrap usage provider errors
This commit is contained in:
@@ -454,7 +454,7 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate {
|
|||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
||||||
private func makeMessageItem(text: String, symbolName: String, width: CGFloat, maxLines: Int? = nil) -> NSMenuItem {
|
private func makeMessageItem(text: String, symbolName: String, width: CGFloat, maxLines: Int? = 2) -> NSMenuItem {
|
||||||
let view = AnyView(
|
let view = AnyView(
|
||||||
Label(text, systemImage: symbolName)
|
Label(text, systemImage: symbolName)
|
||||||
.font(.caption)
|
.font(.caption)
|
||||||
@@ -466,7 +466,7 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate {
|
|||||||
.padding(.leading, 18)
|
.padding(.leading, 18)
|
||||||
.padding(.trailing, 12)
|
.padding(.trailing, 12)
|
||||||
.padding(.vertical, 6)
|
.padding(.vertical, 6)
|
||||||
.frame(minWidth: 300, alignment: .leading))
|
.frame(width: max(1, width), alignment: .leading))
|
||||||
|
|
||||||
let item = NSMenuItem()
|
let item = NSMenuItem()
|
||||||
item.tag = self.tag
|
item.tag = self.tag
|
||||||
|
|||||||
@@ -29,6 +29,11 @@ struct UsageRow: Identifiable {
|
|||||||
let resetAt: Date?
|
let resetAt: Date?
|
||||||
let error: String?
|
let error: String?
|
||||||
|
|
||||||
|
var hasError: Bool {
|
||||||
|
if let error, !error.isEmpty { return true }
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var titleText: String {
|
var titleText: String {
|
||||||
if let plan, !plan.isEmpty { return "\(self.displayName) (\(plan))" }
|
if let plan, !plan.isEmpty { return "\(self.displayName) (\(plan))" }
|
||||||
return self.displayName
|
return self.displayName
|
||||||
@@ -41,7 +46,6 @@ struct UsageRow: Identifiable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func detailText(now: Date = .init()) -> String {
|
func detailText(now: Date = .init()) -> String {
|
||||||
if let error, !error.isEmpty { return error }
|
|
||||||
guard let remaining = self.remainingPercent else { return "No data" }
|
guard let remaining = self.remainingPercent else { return "No data" }
|
||||||
var parts = ["\(remaining)% left"]
|
var parts = ["\(remaining)% left"]
|
||||||
if let windowLabel, !windowLabel.isEmpty { parts.append(windowLabel) }
|
if let windowLabel, !windowLabel.isEmpty { parts.append(windowLabel) }
|
||||||
|
|||||||
@@ -37,12 +37,14 @@ struct UsageMenuLabelView: View {
|
|||||||
|
|
||||||
Spacer(minLength: 4)
|
Spacer(minLength: 4)
|
||||||
|
|
||||||
|
if !self.row.hasError {
|
||||||
Text(self.row.detailText())
|
Text(self.row.detailText())
|
||||||
.font(.caption.monospacedDigit())
|
.font(.caption.monospacedDigit())
|
||||||
.foregroundStyle(self.secondaryTextColor)
|
.foregroundStyle(self.secondaryTextColor)
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
.fixedSize(horizontal: true, vertical: false)
|
.truncationMode(.tail)
|
||||||
.layoutPriority(2)
|
.layoutPriority(2)
|
||||||
|
}
|
||||||
|
|
||||||
if self.showsChevron {
|
if self.showsChevron {
|
||||||
Image(systemName: "chevron.right")
|
Image(systemName: "chevron.right")
|
||||||
@@ -51,6 +53,16 @@ struct UsageMenuLabelView: View {
|
|||||||
.padding(.leading, 2)
|
.padding(.leading, 2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let error = self.row.error?.nonEmpty {
|
||||||
|
Text(error)
|
||||||
|
.font(.caption)
|
||||||
|
.foregroundStyle(self.secondaryTextColor)
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
.lineLimit(2)
|
||||||
|
.truncationMode(.tail)
|
||||||
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.padding(.vertical, 10)
|
.padding(.vertical, 10)
|
||||||
.padding(.leading, self.paddingLeading)
|
.padding(.leading, self.paddingLeading)
|
||||||
|
|||||||
Reference in New Issue
Block a user