yattee/Shared/Views/SignInRequiredView.swift

71 lines
1.8 KiB
Swift
Raw Normal View History

2021-09-25 08:18:22 +00:00
import Defaults
import SwiftUI
struct SignInRequiredView<Content: View>: View {
let title: String
let content: Content
@ObservedObject private var accounts = AccountsModel.shared
2021-10-16 22:48:58 +00:00
@Default(.instances) private var instances
2021-09-25 08:18:22 +00:00
init(title: String, @ViewBuilder content: @escaping () -> Content) {
self.title = title
self.content = content()
}
var body: some View {
Group {
2021-10-16 22:48:58 +00:00
if accounts.signedIn {
2021-09-25 08:18:22 +00:00
content
} else {
prompt
}
}
#if !os(tvOS)
2021-11-08 16:29:35 +00:00
.navigationTitle(title)
2021-09-25 08:18:22 +00:00
#endif
}
var prompt: some View {
VStack(spacing: 30) {
Text("Sign In Required")
.font(.title2.bold())
Group {
if instances.isEmpty {
2021-12-04 19:35:41 +00:00
Text("You need to create an instance and accounts\nto access \(title) section")
2021-09-25 08:18:22 +00:00
} else {
2021-12-04 19:35:41 +00:00
Text("You need to select an account\nto access \(title) section")
2021-09-25 08:18:22 +00:00
}
}
.multilineTextAlignment(.center)
.foregroundColor(.secondary)
.font(.title3)
.padding(.vertical)
2021-09-29 11:45:00 +00:00
#if !os(tvOS)
if instances.isEmpty {
2021-10-17 23:06:00 +00:00
OpenSettingsButton()
2021-09-29 11:45:00 +00:00
}
#endif
#if os(tvOS)
2021-10-17 23:06:00 +00:00
OpenSettingsButton()
#endif
2021-09-25 08:18:22 +00:00
}
2022-06-26 21:37:27 +00:00
.frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
2021-09-25 08:18:22 +00:00
}
}
struct SignInRequiredView_Previews: PreviewProvider {
static var previews: some View {
2022-02-16 20:23:11 +00:00
BrowserPlayerControls {
SignInRequiredView(title: "Subscriptions") {
Text("Only when signed in")
}
2021-09-25 08:18:22 +00:00
}
2022-06-26 10:51:00 +00:00
.injectFixtureEnvironmentObjects()
2021-09-25 08:18:22 +00:00
}
}