Feature/3811 appconfig

This commit is contained in:
Frank Rotermund
2023-09-19 11:21:12 +00:00
parent e3cfb301a9
commit 5dd5dc2db7
13 changed files with 205 additions and 145 deletions
@@ -36,6 +36,11 @@ fileprivate struct Page: View {
@State var buttonCallback: (() -> Void)?
private let service = ServerDowntimeDefaultService()
@State private var isFetchingDowntime = false
@State private var showAlert = false
@State private var activeAlert: ServerMaintenanceAlertType = .showInvalidAppVersionAlert
var body: some View {
GeometryReader { geometry in
VStack(alignment: .center, spacing: 40) {
@@ -54,8 +59,9 @@ fileprivate struct Page: View {
.multilineTextAlignment(.center)
Spacer()
// bwi #3811: check for maintenance when the server selection is skipped
if let doneButton = doneButton, let buttonCallback = buttonCallback {
Button(action: buttonCallback) {
Button(action: startButtonAction) {
Text(doneButton)
.foregroundColor(.white)
.padding(.vertical, 10)
@@ -64,6 +70,11 @@ fileprivate struct Page: View {
.clipShape(RoundedRectangle(cornerRadius: 10))
}
.padding(.bottom, 100)
.alert(isPresented: $showAlert, content: {
service.alert(alertType: activeAlert) {
buttonCallback()
}
})
}
}
.padding(.top, 100)
@@ -71,6 +82,49 @@ fileprivate struct Page: View {
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
private func startButtonAction() {
guard let buttonCallback = buttonCallback else {
return
}
if BWIBuildSettings.shared.enableMaintenanceInfoOnLogin && BWIBuildSettings.shared.avoidServerSelectionOnAppConfig && AppConfigService.shared.isAppConfig {
isFetchingDowntime = true // show progresview
if BWIBuildSettings.shared.useTestDataForDowntime {
service.fetchDowntimes {
self.isFetchingDowntime = false // hide progressview
self.showAlertIfNeeded()
}
} else {
service.fetchDowntimesWithDirectRequest { success in
DispatchQueue.main.async {
self.isFetchingDowntime = false // hide progressview
if success {
self.showAlertIfNeeded()
} else {
}
}
}
}
} else {
buttonCallback()
}
}
private func showAlertIfNeeded() {
guard let buttonCallback = buttonCallback else {
return
}
if service.showAlert() {
activeAlert = service.alertType()
showAlert = true
} else {
buttonCallback()
}
}
}
struct WelcomeExperienceView_Previews: PreviewProvider {