aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-01-27 00:45:53 -0600
committerIván Ávalos <avalos@disroot.org>2022-01-27 00:45:53 -0600
commitb4cecb08fb3b704733048c02c710dbd9f8205ec6 (patch)
tree51c4c6a8308caa0227afcc5baa1a93d0f4ba8adf
parentf6b0f36d7d0bdfd1911483466f1753ea2f1000c2 (diff)
downloadetbsa-trackermap-mobile-b4cecb08fb3b704733048c02c710dbd9f8205ec6.tar.gz
etbsa-trackermap-mobile-b4cecb08fb3b704733048c02c710dbd9f8205ec6.tar.bz2
etbsa-trackermap-mobile-b4cecb08fb3b704733048c02c710dbd9f8205ec6.zip
Implemented functional view model for LoginView
-rw-r--r--iosApp/iosApp.xcodeproj/project.pbxproj22
-rw-r--r--iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstatebin36126 -> 38983 bytes
-rw-r--r--iosApp/iosApp/Session/LoginView.swift (renamed from iosApp/iosApp/Authentication/LoginView.swift)49
-rw-r--r--iosApp/iosApp/Session/LoginViewModel.swift38
-rw-r--r--iosApp/iosApp/Units/UnitsView.swift15
5 files changed, 91 insertions, 33 deletions
diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj
index 60172de..71d898c 100644
--- a/iosApp/iosApp.xcodeproj/project.pbxproj
+++ b/iosApp/iosApp.xcodeproj/project.pbxproj
@@ -13,6 +13,8 @@
7555FF83242A565900829871 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* LoginView.swift */; };
E38F241527A242870069FC45 /* Inject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241427A242870069FC45 /* Inject.swift */; };
E38F241727A242C70069FC45 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241627A242C70069FC45 /* Resolver.swift */; };
+ E38F241C27A26DD70069FC45 /* LoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241B27A26DD70069FC45 /* LoginViewModel.swift */; };
+ E38F241E27A270D50069FC45 /* UnitsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241D27A270D50069FC45 /* UnitsView.swift */; };
E3E77EDF279D2B5A00150070 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E3E77EDE279D2B5A00150070 /* Localizable.strings */; };
E3E77EE6279E6CE400150070 /* FlowCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E77EE5279E6CE400150070 /* FlowCollector.swift */; };
/* End PBXBuildFile section */
@@ -39,6 +41,8 @@
7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E38F241427A242870069FC45 /* Inject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Inject.swift; sourceTree = "<group>"; };
E38F241627A242C70069FC45 /* Resolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Resolver.swift; sourceTree = "<group>"; };
+ E38F241B27A26DD70069FC45 /* LoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewModel.swift; sourceTree = "<group>"; };
+ E38F241D27A270D50069FC45 /* UnitsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitsView.swift; sourceTree = "<group>"; };
E3E77EDE279D2B5A00150070 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
E3E77EE5279E6CE400150070 /* FlowCollector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlowCollector.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -83,9 +87,10 @@
7555FF7D242A565900829871 /* iosApp */ = {
isa = PBXGroup;
children = (
+ E38F241A27A2659C0069FC45 /* Units */,
E3E77EE1279D43C000150070 /* Shared */,
058557BA273AAA24004C7B11 /* Assets.xcassets */,
- E3E77EE0279D43B400150070 /* Authentication */,
+ E3E77EE0279D43B400150070 /* Session */,
7555FF8C242A565B00829871 /* Info.plist */,
2152FB032600AC8F00CF470E /* iOSApp.swift */,
058557D7273AAEEB004C7B11 /* Preview Content */,
@@ -100,12 +105,21 @@
name = Frameworks;
sourceTree = "<group>";
};
- E3E77EE0279D43B400150070 /* Authentication */ = {
+ E38F241A27A2659C0069FC45 /* Units */ = {
+ isa = PBXGroup;
+ children = (
+ E38F241D27A270D50069FC45 /* UnitsView.swift */,
+ );
+ path = Units;
+ sourceTree = "<group>";
+ };
+ E3E77EE0279D43B400150070 /* Session */ = {
isa = PBXGroup;
children = (
7555FF82242A565900829871 /* LoginView.swift */,
+ E38F241B27A26DD70069FC45 /* LoginViewModel.swift */,
);
- path = Authentication;
+ path = Session;
sourceTree = "<group>";
};
E3E77EE1279D43C000150070 /* Shared */ = {
@@ -217,8 +231,10 @@
files = (
E38F241727A242C70069FC45 /* Resolver.swift in Sources */,
E38F241527A242870069FC45 /* Inject.swift in Sources */,
+ E38F241C27A26DD70069FC45 /* LoginViewModel.swift in Sources */,
E3E77EE6279E6CE400150070 /* FlowCollector.swift in Sources */,
2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */,
+ E38F241E27A270D50069FC45 /* UnitsView.swift in Sources */,
7555FF83242A565900829871 /* LoginView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate
index fe8ed03..7b173a3 100644
--- a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate
+++ b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/iosApp/iosApp/Authentication/LoginView.swift b/iosApp/iosApp/Session/LoginView.swift
index 9e7a64f..0637ff2 100644
--- a/iosApp/iosApp/Authentication/LoginView.swift
+++ b/iosApp/iosApp/Session/LoginView.swift
@@ -1,47 +1,33 @@
import SwiftUI
import shared
-struct LoginContainerView: View {
- @Inject private var sessionController: SessionController
-
+struct RootView: View {
+ @StateObject private var loginViewModel = LoginViewModel()
@State private var username = ""
@State private var password = ""
@State private var server = ""
- init() {
- sessionController.loginStateFlow.collect(collector: Collector<SessionController.LoginState?> { state in
- print("State is: \(state?.debugDescription ?? "")")
- }) { (unit, error) in
-
- }
- sessionController.restoreSession()
- }
-
var body: some View {
- LoginView(username: $username,
- password: $password,
- server: $server,
- onLogin: login)
- }
-
- private func login() {
- print("Username: \(username)")
- print("Password: \(password)")
- print("Server URL: \(server)")
- sessionController.login(
- body: SessionBody(url: server,
- email: username,
- password: password,
- fcmToken: nil))
+ switch loginViewModel.loginState {
+ case is SessionController.LoginStateLoading:
+ Text("loading")
+ case is SessionController.LoginStateSuccess:
+ UnitsView()
+ default:
+ LoginContentView(username: $username,
+ password: $password,
+ server: $server,
+ onLogin: loginViewModel.login)
+ }
}
}
-struct LoginView: View {
+struct LoginContentView: View {
@Binding var username: String
@Binding var password: String
@Binding var server: String
- let onLogin: () -> Void
+ let onLogin: (SessionBody) -> Void
var body: some View {
VStack {
@@ -54,7 +40,10 @@ struct LoginView: View {
server: $server)
Button(action: {
- self.onLogin()
+ self.onLogin(SessionBody(url: server,
+ email: username,
+ password: password,
+ fcmToken: nil))
}) {
Text("login")
.font(.system(size: 18))
diff --git a/iosApp/iosApp/Session/LoginViewModel.swift b/iosApp/iosApp/Session/LoginViewModel.swift
new file mode 100644
index 0000000..ee3038e
--- /dev/null
+++ b/iosApp/iosApp/Session/LoginViewModel.swift
@@ -0,0 +1,38 @@
+//
+// LoginViewModel.swift
+// iosApp
+//
+// Created by Iván on 27/01/22.
+// Copyright © 2022 orgName. All rights reserved.
+//
+
+import Foundation
+import shared
+
+class LoginViewModel: ObservableObject {
+ @Inject private var sessionController: SessionController
+
+ @Published var loginState: SessionController.LoginState = SessionController.LoginStateNothing()
+
+ init () {
+ let collector = Collector<SessionController.LoginState?>(callback: setLoginState)
+ sessionController.loginStateFlow.collect(collector: collector) { (unit, error) in }
+ restoreSession()
+ }
+
+ func setLoginState (state: SessionController.LoginState?) {
+ print("State is: \(state?.debugDescription ?? "")")
+ self.loginState = state ?? SessionController.LoginStateNothing()
+ }
+
+ func restoreSession() {
+ sessionController.restoreSession()
+ }
+
+ func login (session: SessionBody) {
+ print("Username: \(session.email)")
+ print("Password: \(session.password)")
+ print("Server URL: \(session.url)")
+ sessionController.login(body: session)
+ }
+}
diff --git a/iosApp/iosApp/Units/UnitsView.swift b/iosApp/iosApp/Units/UnitsView.swift
new file mode 100644
index 0000000..1088a5f
--- /dev/null
+++ b/iosApp/iosApp/Units/UnitsView.swift
@@ -0,0 +1,15 @@
+//
+// UnitsView.swift
+// iosApp
+//
+// Created by Iván on 27/01/22.
+// Copyright © 2022 orgName. All rights reserved.
+//
+
+import SwiftUI
+
+struct UnitsView: View {
+ var body: some View {
+ Text("Welcome to UnitsView!")
+ }
+}