From e81217a826a23f15edbec1ae6cb25aa62c8f65ee Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 25 Jun 2019 18:34:52 -0700 Subject: [PATCH] add users --- SwiftUI-Todo-Redux.xcodeproj/project.pbxproj | 4 ++++ SwiftUI-Todo-Redux/models/User.swift | 4 ++-- .../states/reducers-statemachine/UserStateReducer.swift | 8 ++++---- SwiftUI-Todo-Redux/views/tasks/TaskCreate.swift | 2 +- SwiftUI-Todo-Redux/views/tasks/TaskDetail.swift | 2 +- SwiftUI-Todo-Redux/views/users/UserCreate.swift | 6 +++--- SwiftUI-Todo-Redux/views/users/UserDetail.swift | 7 +++---- SwiftUI-Todo-Redux/views/users/UsersList.swift | 1 + SwiftUI-Todo-ReduxTests/SwiftUI_Todo_ReduxTests.swift | 2 +- 9 files changed, 20 insertions(+), 16 deletions(-) diff --git a/SwiftUI-Todo-Redux.xcodeproj/project.pbxproj b/SwiftUI-Todo-Redux.xcodeproj/project.pbxproj index 85fd958..bbc1c66 100644 --- a/SwiftUI-Todo-Redux.xcodeproj/project.pbxproj +++ b/SwiftUI-Todo-Redux.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 841655B622C1E2CF007DF30E /* KeyboardObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841655B422C1E2CF007DF30E /* KeyboardObserver.swift */; }; 841655B722C1E2CF007DF30E /* FormButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841655B522C1E2CF007DF30E /* FormButtons.swift */; }; 841655B922C28590007DF30E /* TaskCreate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841655B822C28590007DF30E /* TaskCreate.swift */; }; + 841655BB22C301AF007DF30E /* UserCreate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841655BA22C301AF007DF30E /* UserCreate.swift */; }; 843B2B4B22BE9B1D001E89B6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843B2B4A22BE9B1D001E89B6 /* AppDelegate.swift */; }; 843B2B4D22BE9B1D001E89B6 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843B2B4C22BE9B1D001E89B6 /* SceneDelegate.swift */; }; 843B2B5122BE9B1F001E89B6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 843B2B5022BE9B1F001E89B6 /* Assets.xcassets */; }; @@ -69,6 +70,7 @@ 841655B422C1E2CF007DF30E /* KeyboardObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardObserver.swift; sourceTree = ""; }; 841655B522C1E2CF007DF30E /* FormButtons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormButtons.swift; sourceTree = ""; }; 841655B822C28590007DF30E /* TaskCreate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TaskCreate.swift; sourceTree = ""; }; + 841655BA22C301AF007DF30E /* UserCreate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserCreate.swift; sourceTree = ""; }; 843B2B4722BE9B1D001E89B6 /* SwiftUI-Todo-Redux.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SwiftUI-Todo-Redux.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 843B2B4A22BE9B1D001E89B6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 843B2B4C22BE9B1D001E89B6 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -137,6 +139,7 @@ children = ( 8416559422BFF7C6007DF30E /* UsersList.swift */, 8416559322BFF7C5007DF30E /* UserDetail.swift */, + 841655BA22C301AF007DF30E /* UserCreate.swift */, 8416559122BFF7C5007DF30E /* UsersRow.swift */, ); path = users; @@ -387,6 +390,7 @@ 843B2B8222BF1EB7001E89B6 /* UserActions.swift in Sources */, 8416559B22BFF7C6007DF30E /* TasksList.swift in Sources */, 841655B722C1E2CF007DF30E /* FormButtons.swift in Sources */, + 841655BB22C301AF007DF30E /* UserCreate.swift in Sources */, 8416559A22BFF7C6007DF30E /* UsersList.swift in Sources */, 841655B622C1E2CF007DF30E /* KeyboardObserver.swift in Sources */, 843B2B6B22BF1E35001E89B6 /* User.swift in Sources */, diff --git a/SwiftUI-Todo-Redux/models/User.swift b/SwiftUI-Todo-Redux/models/User.swift index 2e42ab7..d64f55f 100644 --- a/SwiftUI-Todo-Redux/models/User.swift +++ b/SwiftUI-Todo-Redux/models/User.swift @@ -10,8 +10,8 @@ import SwiftUI struct User: Equatable, Hashable, Codable, Identifiable { let id: Int - let name: String - let username: String + var name: String + var username: String let imageName = "person" } diff --git a/SwiftUI-Todo-Redux/states/reducers-statemachine/UserStateReducer.swift b/SwiftUI-Todo-Redux/states/reducers-statemachine/UserStateReducer.swift index b6dd025..895bf5a 100644 --- a/SwiftUI-Todo-Redux/states/reducers-statemachine/UserStateReducer.swift +++ b/SwiftUI-Todo-Redux/states/reducers-statemachine/UserStateReducer.swift @@ -14,8 +14,8 @@ struct UserStateReducer: Reducer { if let action = action as? UserActions.UserAddResponse { let id = action.id - let user = action.response.user - state.users.append(user) + let users = action.response.users + state.users.append(contentsOf: users) } if let action = action as? UserActions.UserDeleteResponse { @@ -32,8 +32,8 @@ struct UserStateReducer: Reducer { if let action = action as? UserActions.EditUserResponse { let id = action.id - let user = action.response.user - state.users[id] = user + let users = action.response.users + state.users[id] = users[0] } if let action = action as? UserActions.TestEditResponse { diff --git a/SwiftUI-Todo-Redux/views/tasks/TaskCreate.swift b/SwiftUI-Todo-Redux/views/tasks/TaskCreate.swift index 6b872bf..77c15ac 100644 --- a/SwiftUI-Todo-Redux/views/tasks/TaskCreate.swift +++ b/SwiftUI-Todo-Redux/views/tasks/TaskCreate.swift @@ -31,7 +31,7 @@ struct TaskCreate: View { /// Dismiss Modal presentation, save updated task if valid func doSave() { isEditing = false - self.store.dispatch(action: TaskActions.Notification(show: true, message: "New Task Created!")) + store.dispatch(action: TaskActions.Notification(show: true, message: "New Task Created!")) } var body: some View { diff --git a/SwiftUI-Todo-Redux/views/tasks/TaskDetail.swift b/SwiftUI-Todo-Redux/views/tasks/TaskDetail.swift index 5a1e79f..0b9cb15 100644 --- a/SwiftUI-Todo-Redux/views/tasks/TaskDetail.swift +++ b/SwiftUI-Todo-Redux/views/tasks/TaskDetail.swift @@ -59,7 +59,7 @@ struct TaskDetail: View { } var body: some View { - VStack(alignment: .top, spacing: 20) { + ZStack(alignment: .top) { HStack { if self.mode?.value == .active { Button(action: { diff --git a/SwiftUI-Todo-Redux/views/users/UserCreate.swift b/SwiftUI-Todo-Redux/views/users/UserCreate.swift index 872fdc8..af65b49 100644 --- a/SwiftUI-Todo-Redux/views/users/UserCreate.swift +++ b/SwiftUI-Todo-Redux/views/users/UserCreate.swift @@ -30,7 +30,7 @@ struct UserCreate: View { /// Dismiss Modal presentation, save updated user if valid func doSave() { isEditing = false - self.store.dispatch(action: TaskActions.Notification(show: true, message: "New User Created!")) + store.dispatch(action: TaskActions.Notification(show: true, message: "New User Created!")) } var body: some View { @@ -38,8 +38,8 @@ struct UserCreate: View { Form { Section(header: Text("User Information")) { VStack(alignment: .leading) { - FieldSetText(textItem: $user.name, label: "NAME", placeHolder: "User full name") - FieldSetText(textItem: $user.username, label: "USERNAME", placeHolder: "User nickname") + FieldSetText(textItem: $user.name, label: "NAME", placeHolder: "User full name") + FieldSetText(textItem: $user.username, label: "USERNAME", placeHolder: "User nickname") } .padding(.vertical, 20) .listRowInsets(EdgeInsets()) diff --git a/SwiftUI-Todo-Redux/views/users/UserDetail.swift b/SwiftUI-Todo-Redux/views/users/UserDetail.swift index f92824a..ca9f784 100644 --- a/SwiftUI-Todo-Redux/views/users/UserDetail.swift +++ b/SwiftUI-Todo-Redux/views/users/UserDetail.swift @@ -9,8 +9,8 @@ import SwiftUI struct UserDetail: View { -// Based on "in-line" detail editing structure proposed by Apple -/// https://developer.apple.com/tutorials/swiftui/working-with-ui-controls + // Based on "in-line" detail editing structure proposed by Apple + /// https://developer.apple.com/tutorials/swiftui/working-with-ui-controls @EnvironmentObject var store: AppState @@ -47,7 +47,7 @@ struct UserDetail: View { } var body: some View { - VStack(alignment: .top, spacing: 20) { + ZStack(alignment: .top) { HStack { if self.mode?.value == .active { Button(action: { @@ -76,7 +76,6 @@ struct UserDetail: View { } } - #if DEBUG struct UserDetail_Previews: PreviewProvider { static var previews: some View { diff --git a/SwiftUI-Todo-Redux/views/users/UsersList.swift b/SwiftUI-Todo-Redux/views/users/UsersList.swift index 0b1de88..7e7024d 100644 --- a/SwiftUI-Todo-Redux/views/users/UsersList.swift +++ b/SwiftUI-Todo-Redux/views/users/UsersList.swift @@ -10,6 +10,7 @@ import SwiftUI struct UsersList: View { @EnvironmentObject var store: AppState + @State var showEdit = false func loadPage() { print("loadPage") diff --git a/SwiftUI-Todo-ReduxTests/SwiftUI_Todo_ReduxTests.swift b/SwiftUI-Todo-ReduxTests/SwiftUI_Todo_ReduxTests.swift index 24a63d6..87375a9 100644 --- a/SwiftUI-Todo-ReduxTests/SwiftUI_Todo_ReduxTests.swift +++ b/SwiftUI-Todo-ReduxTests/SwiftUI_Todo_ReduxTests.swift @@ -46,7 +46,7 @@ class SwiftUI_Todo_ReduxTests: XCTestCase { } } - func testEncodingUser() { + func testEncodingUser() { let json = #""" { "id": 1, "users":