Files
2022-04-27 09:39:24 +09:00

86 lines
3.2 KiB
Swift

//
// SettingRootView.swift
// LifeGameApp (iOS)
//
// Created by Yusuke Hosonuma on 2020/08/18.
//
import SwiftUI
import Core
struct SettingRootView: View {
@EnvironmentObject var authentication: Authentication
@State private var isPresentedLogin = false
@State private var isPresentedConfirmLogoutAlert = false
@State private var isPresentedFeedbackSheet = false
var body: some View {
NavigationView {
List {
Section {
NavigationLink(destination: SettingAboutView()) {
Label("About", systemImage: "info.circle")
}
}
Section {
NavigationLink(destination: SettingConfigView()) {
Label("Game Config", systemImage: "gearshape")
}
}
Section(footer: Text("Login is needed.")) {
Button(action: { isPresentedFeedbackSheet.toggle() }) {
Label("Feedback", systemImage: "exclamationmark.bubble")
}
.disabled(!authentication.isSignIn)
.sheet(isPresented: $isPresentedFeedbackSheet) {
// Note:
//
if let userID = authentication.user?.uid {
FeedbackView(isPresented: $isPresentedFeedbackSheet, userID: userID)
}
}
}
Section(footer: Text("You can use some personal feature when login.")) {
HCenter {
if authentication.isSignIn {
Button("Sign-out", action: { isPresentedConfirmLogoutAlert.toggle() })
.alert(isPresented: $isPresentedConfirmLogoutAlert, content: logoutConfirmAlert)
} else {
SheetButton("Sign-in", by: $isPresentedLogin) {
SignInView(isPresented: $isPresentedLogin)
}
}
}
}
}
.listStyle(GroupedListStyle())
.navigationTitle("Settings")
.navigationBarTitleDisplayMode(.inline)
}
.navigationViewStyle(StackNavigationViewStyle()) // Note: iPad
}
private func logoutConfirmAlert() -> Alert {
Alert(title: Text("Are you Sign-out?"),
primaryButton: .cancel(),
secondaryButton: .destructive(Text("Sign out")) { authentication.signOut() })
}
}
#if DEBUG
struct SettingRootView_Previews: PreviewProvider {
static var previews: some View {
SettingRootView()
.environmentObject(Authentication(mockSignIn: false))
.colorScheme(.dark)
.preferredColorScheme(.dark)
SettingRootView()
.environmentObject(Authentication(mockSignIn: false))
.colorScheme(.light)
.preferredColorScheme(.light)
}
}
#endif