From 3f96ca528f14435aba3e9b3cf711d9d122ebaa9b Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Sun, 25 Dec 2022 20:05:53 +0900 Subject: [PATCH 01/40] =?UTF-8?q?feat=20::=20StudyRoomDetail=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplyFeature/Sources/ApplyComponent.swift | 10 ---------- .../ApplyFeature/Sources/ApplyView.swift | 16 ---------------- .../ApplyFeature/Sources/ApplyViewModel.swift | 5 ----- .../StudyRoomDetailComponent.swift | 9 +++++++++ .../StudyRoomDetail/StudyRoomDetailView.swift | 9 +++++++++ .../StudyRoomDetailViewModel.swift | 9 +++++++++ 6 files changed, 27 insertions(+), 31 deletions(-) delete mode 100644 Projects/Features/ApplyFeature/Sources/ApplyComponent.swift delete mode 100644 Projects/Features/ApplyFeature/Sources/ApplyView.swift delete mode 100644 Projects/Features/ApplyFeature/Sources/ApplyViewModel.swift create mode 100644 Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift create mode 100644 Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift create mode 100644 Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift diff --git a/Projects/Features/ApplyFeature/Sources/ApplyComponent.swift b/Projects/Features/ApplyFeature/Sources/ApplyComponent.swift deleted file mode 100644 index 80c8b9c4..00000000 --- a/Projects/Features/ApplyFeature/Sources/ApplyComponent.swift +++ /dev/null @@ -1,10 +0,0 @@ -import SwiftUI -import NeedleFoundation - -public protocol ApplyDependency: Dependency {} - -public final class ApplyComponent: Component { - public func makeView() -> some View { - Text("Text") - } -} diff --git a/Projects/Features/ApplyFeature/Sources/ApplyView.swift b/Projects/Features/ApplyFeature/Sources/ApplyView.swift deleted file mode 100644 index ccad7f89..00000000 --- a/Projects/Features/ApplyFeature/Sources/ApplyView.swift +++ /dev/null @@ -1,16 +0,0 @@ -import DesignSystem -import SwiftUI - -struct ApplyView: View { - @StateObject var viewModel: ApplyViewModel - - init( - viewModel: ApplyViewModel - ) { - _viewModel = StateObject(wrappedValue: viewModel) - } - - var body: some View { - Text("Text") - } -} diff --git a/Projects/Features/ApplyFeature/Sources/ApplyViewModel.swift b/Projects/Features/ApplyFeature/Sources/ApplyViewModel.swift deleted file mode 100644 index 62530f71..00000000 --- a/Projects/Features/ApplyFeature/Sources/ApplyViewModel.swift +++ /dev/null @@ -1,5 +0,0 @@ -import BaseFeature -import Combine - -final class ApplyViewModel: BaseViewModel { -} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift new file mode 100644 index 00000000..a60956b4 --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift @@ -0,0 +1,9 @@ +// +// StudyRoomDetailComponent.swift +// ApplyFeatureTests +// +// Created by 김대희 on 2022/12/25. +// Copyright © 2022 com.team.aliens. All rights reserved. +// + +import Foundation diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift new file mode 100644 index 00000000..aae78f10 --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -0,0 +1,9 @@ +// +// StudyRoomDetailView.swift +// ApplyFeatureTests +// +// Created by 김대희 on 2022/12/25. +// Copyright © 2022 com.team.aliens. All rights reserved. +// + +import Foundation diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift new file mode 100644 index 00000000..bd28fbbd --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -0,0 +1,9 @@ +// +// StudyRoomDetailViewModel.swift +// ApplyFeatureTests +// +// Created by 김대희 on 2022/12/25. +// Copyright © 2022 com.team.aliens. All rights reserved. +// + +import Foundation From f6efc402e3f73feef160e73436f5ac683a9ec0d1 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Mon, 26 Dec 2022 15:41:41 +0900 Subject: [PATCH 02/40] feat :: toSmallDMSTimeString --- Projects/Modules/Utility/Sources/DateUtil.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Projects/Modules/Utility/Sources/DateUtil.swift b/Projects/Modules/Utility/Sources/DateUtil.swift index 107d4538..92f58b38 100644 --- a/Projects/Modules/Utility/Sources/DateUtil.swift +++ b/Projects/Modules/Utility/Sources/DateUtil.swift @@ -31,6 +31,13 @@ public extension Date { return formatter.string(from: self) } + func toSmallDMSTimeString() -> String { + let formatter = DateFormatter() + formatter.dateFormat = "HH:mm" + formatter.locale = Locale(identifier: "ko_kr") + return formatter.string(from: self) + } + func toSmallDMSDateString() -> String { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" From 0092c14c17e5f24fb6c435360d8f4b503ea5043e Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Mon, 26 Dec 2022 15:41:57 +0900 Subject: [PATCH 03/40] feat :: StudyRoomSeatView --- .../StudyRoomDetailComponent.swift | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift index a60956b4..f41750f2 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift @@ -1,9 +1,27 @@ -// -// StudyRoomDetailComponent.swift -// ApplyFeatureTests -// -// Created by 김대희 on 2022/12/25. -// Copyright © 2022 com.team.aliens. All rights reserved. -// +import SwiftUI +import DomainModule +import NeedleFoundation -import Foundation +public protocol StudyRoomDetailDependency: Dependency { + var fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase { get } + var fetchSeatTypesUseCase: any FetchSeatTypesUseCase { get } + var fetchDetailStudyRoomUseCase: any FetchDetailStudyRoomUseCase { get } + var applyStudyRoomSeatUseCase: any ApplyStudyRoomSeatUseCase { get } + var cancelStudyRoomSeatUseCase: any CancelStudyRoomSeatUseCase { get } + +} + +public final class StudyRoomDetailComponent: Component { + public func makeView(studyRoomID: String) -> some View { + StudyRoomDetailView( + viewModel: .init( + studyRoomID: studyRoomID, + fetchStudyAvailableTimeUseCase: dependency.fetchStudyAvailableTimeUseCase, + fetchSeatTypesUseCase: dependency.fetchSeatTypesUseCase, + fetchDetailStudyRoomUseCase: dependency.fetchDetailStudyRoomUseCase, + applyStudyRoomSeatUseCase: dependency.applyStudyRoomSeatUseCase, + cancelStudyRoomSeatUseCase: dependency.cancelStudyRoomSeatUseCase + ) + ) + } +} From 2614ef89aa186cf2913a6e0093f79e4d112e964f Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Mon, 26 Dec 2022 17:12:14 +0900 Subject: [PATCH 04/40] =?UTF-8?q?fix=20::=20fetchDetailStudyRoom=20urlPath?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/Services/APIKit/Sources/StudyRoomsAPI.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift index f3ab57f9..d3112400 100644 --- a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift +++ b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift @@ -28,7 +28,7 @@ extension StudyRoomsAPI: DmsAPI { return "/list/students" case let .fetchDetailStudyRoom(id): - return "\(id)/students" + return "/\(id)/students" case let .applyStudyRoomSeat(id): return "/seats/\(id)" From b5f2dca507ab884442a19ffd49b25a97cedcf150 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Mon, 26 Dec 2022 18:51:39 +0900 Subject: [PATCH 05/40] =?UTF-8?q?feat=20::=20Notice=20class=20=EB=AD=94?= =?UTF-8?q?=EA=B0=80=20=EA=BC=AC=EC=9D=B8=EA=B1=B0=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NoticeFeature/Sources/Detail/NoticeDetailView.swift | 3 +++ .../Sources/Detail/NoticeDetailViewModel.swift | 4 +++- .../NoticeFeature/Sources/NoticeList/NoticeListView.swift | 3 +++ .../Sources/NoticeList/NoticeListViewModel.swift | 6 ++---- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift b/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift index de322d01..e4302817 100644 --- a/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift +++ b/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift @@ -37,5 +37,8 @@ struct NoticeDetailView: View { .padding(.horizontal, 24) .dmsBackground() .dmsBackButton(dismiss: dismiss) + .onAppear { + viewModel.onAppear() + } } } diff --git a/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailViewModel.swift b/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailViewModel.swift index afd1e115..67fc9799 100644 --- a/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailViewModel.swift +++ b/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailViewModel.swift @@ -21,8 +21,9 @@ final class NoticeDetailViewModel: BaseViewModel { ) { self.fetchDetailNoticeUseCase = fetchDetailNoticeUseCase self.id = id - super.init() + } + func onAppear() { addCancellable( fetchDetailNoticeUseCase.execute(id: id) ) { [weak self] noticeDetail in @@ -30,5 +31,6 @@ final class NoticeDetailViewModel: BaseViewModel { self?.content = noticeDetail.content self?.date = noticeDetail.createdAt } + } } diff --git a/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift b/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift index 436f8565..f38e04b2 100644 --- a/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift +++ b/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift @@ -55,6 +55,9 @@ struct NoticeListView: View { .navigationTitle("공지") .navigationBarTitleDisplayMode(.inline) .dmsBackground() + .onAppear { + viewModel.onAppear() + } } } diff --git a/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListViewModel.swift b/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListViewModel.swift index 1475fd9e..bc7e92b4 100644 --- a/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListViewModel.swift +++ b/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListViewModel.swift @@ -15,11 +15,9 @@ final class NoticeListViewModel: BaseViewModel { fetchNoticeListUseCase: any FetchNoticeListUseCase ) { self.fetchNoticeListUseCase = fetchNoticeListUseCase - super.init() - fetchNoticeList() } - func fetchNoticeList() { + func onAppear() { addCancellable( fetchNoticeListUseCase.execute( order: noticeOrderType @@ -31,6 +29,6 @@ final class NoticeListViewModel: BaseViewModel { func orderTypeButtonDidTap() { self.noticeOrderType = noticeOrderType == .new ? .old : .new - fetchNoticeList() + onAppear() } } From 8d73f1fb3fa8e939087afb8e5d0ab55701b033dd Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Mon, 26 Dec 2022 19:38:13 +0900 Subject: [PATCH 06/40] =?UTF-8?q?fix=20::=20fetchSeatTypes=20=20urlPath=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/Services/APIKit/Sources/StudyRoomsAPI.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift index d3112400..c4c62876 100644 --- a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift +++ b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift @@ -22,7 +22,7 @@ extension StudyRoomsAPI: DmsAPI { return "/available-time" case .fetchSeatTypes: - return "types" + return "/types" case .fetchStudyRoomList: return "/list/students" From 7859555bcfcc19df86412f63fe7fc8ce631d3524 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Mon, 26 Dec 2022 23:21:52 +0900 Subject: [PATCH 07/40] =?UTF-8?q?error=20::=20=EB=82=98=EC=A4=91=EC=97=90?= =?UTF-8?q?=20StudyRoonList=20=EB=82=98=EC=98=A4=EB=A9=B4=20Revert=20?= =?UTF-8?q?=EC=8B=9C=ED=82=AC=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Application/DI/AppComponent.swift | 4 +- .../Sources/Application/NeedleGenerated.swift | 46 +++++++++++++------ .../Sources/MainTabComponent.swift | 2 +- .../MainTabFeature/Sources/MainTabView.swift | 6 +-- 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/Projects/App/Sources/Application/DI/AppComponent.swift b/Projects/App/Sources/Application/DI/AppComponent.swift index fe7af0fa..57f500b1 100644 --- a/Projects/App/Sources/Application/DI/AppComponent.swift +++ b/Projects/App/Sources/Application/DI/AppComponent.swift @@ -85,8 +85,8 @@ public extension AppComponent { var homeComponent: HomeComponent { HomeComponent(parent: self) } - var applyComponent: ApplyComponent { - ApplyComponent(parent: self) + var applyComponent: StudyRoomDetailComponent { + StudyRoomDetailComponent(parent: self) } var noticeListComponent: NoticeListComponent { NoticeListComponent(parent: self) diff --git a/Projects/App/Sources/Application/NeedleGenerated.swift b/Projects/App/Sources/Application/NeedleGenerated.swift index a9a794b4..a4a42dd0 100644 --- a/Projects/App/Sources/Application/NeedleGenerated.swift +++ b/Projects/App/Sources/Application/NeedleGenerated.swift @@ -181,7 +181,7 @@ private class MainTabDependency2826cdb310ed0b17a725Provider: MainTabDependency { var homeComponent: HomeComponent { return appComponent.homeComponent } - var applyComponent: ApplyComponent { + var applyComponent: StudyRoomDetailComponent { return appComponent.applyComponent } var noticeListComponent: NoticeListComponent { @@ -333,16 +333,30 @@ private class HomeDependency443c4e1871277bd8432aProvider: HomeDependency { private func factory67229cdf0f755562b2b1f47b58f8f304c97af4d5(_ component: NeedleFoundation.Scope) -> AnyObject { return HomeDependency443c4e1871277bd8432aProvider(appComponent: parent1(component) as! AppComponent) } -private class ApplyDependency468ec8d97f04fe0ebd10Provider: ApplyDependency { - - - init() { - +private class StudyRoomDetailDependency00589e4f8d1416a01b43Provider: StudyRoomDetailDependency { + var fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase { + return appComponent.fetchStudyAvailableTimeUseCase + } + var fetchSeatTypesUseCase: any FetchSeatTypesUseCase { + return appComponent.fetchSeatTypesUseCase + } + var fetchDetailStudyRoomUseCase: any FetchDetailStudyRoomUseCase { + return appComponent.fetchDetailStudyRoomUseCase + } + var applyStudyRoomSeatUseCase: any ApplyStudyRoomSeatUseCase { + return appComponent.applyStudyRoomSeatUseCase + } + var cancelStudyRoomSeatUseCase: any CancelStudyRoomSeatUseCase { + return appComponent.cancelStudyRoomSeatUseCase + } + private let appComponent: AppComponent + init(appComponent: AppComponent) { + self.appComponent = appComponent } } -/// ^->AppComponent->ApplyComponent -private func factory3cbfeafbe8b73941b232e3b0c44298fc1c149afb(_ component: NeedleFoundation.Scope) -> AnyObject { - return ApplyDependency468ec8d97f04fe0ebd10Provider() +/// ^->AppComponent->StudyRoomDetailComponent +private func factorya36f40c25dcb280bae0ff47b58f8f304c97af4d5(_ component: NeedleFoundation.Scope) -> AnyObject { + return StudyRoomDetailDependency00589e4f8d1416a01b43Provider(appComponent: parent1(component) as! AppComponent) } private class AuthenticationEmailDependency73189eb572618b10e0fbProvider: AuthenticationEmailDependency { var verifyAuthCodeUseCase: any VerifyAuthCodeUseCase { @@ -475,7 +489,7 @@ extension AppComponent: Registration { localTable["signupTermsComponent-SignupTermsComponent"] = { self.signupTermsComponent as Any } localTable["mainTabComponent-MainTabComponent"] = { self.mainTabComponent as Any } localTable["homeComponent-HomeComponent"] = { self.homeComponent as Any } - localTable["applyComponent-ApplyComponent"] = { self.applyComponent as Any } + localTable["applyComponent-StudyRoomDetailComponent"] = { self.applyComponent as Any } localTable["noticeListComponent-NoticeListComponent"] = { self.noticeListComponent as Any } localTable["myPageComponent-MyPageComponent"] = { self.myPageComponent as Any } localTable["changeProfileComponent-ChangeProfileComponent"] = { self.changeProfileComponent as Any } @@ -576,7 +590,7 @@ extension SignupProfileImageComponent: Registration { extension MainTabComponent: Registration { public func registerItems() { keyPathToName[\MainTabDependency.homeComponent] = "homeComponent-HomeComponent" - keyPathToName[\MainTabDependency.applyComponent] = "applyComponent-ApplyComponent" + keyPathToName[\MainTabDependency.applyComponent] = "applyComponent-StudyRoomDetailComponent" keyPathToName[\MainTabDependency.noticeListComponent] = "noticeListComponent-NoticeListComponent" keyPathToName[\MainTabDependency.myPageComponent] = "myPageComponent-MyPageComponent" } @@ -631,9 +645,13 @@ extension HomeComponent: Registration { keyPathToName[\HomeDependency.fetchMealListUseCase] = "fetchMealListUseCase-any FetchMealListUseCase" } } -extension ApplyComponent: Registration { +extension StudyRoomDetailComponent: Registration { public func registerItems() { - + keyPathToName[\StudyRoomDetailDependency.fetchStudyAvailableTimeUseCase] = "fetchStudyAvailableTimeUseCase-any FetchStudyAvailableTimeUseCase" + keyPathToName[\StudyRoomDetailDependency.fetchSeatTypesUseCase] = "fetchSeatTypesUseCase-any FetchSeatTypesUseCase" + keyPathToName[\StudyRoomDetailDependency.fetchDetailStudyRoomUseCase] = "fetchDetailStudyRoomUseCase-any FetchDetailStudyRoomUseCase" + keyPathToName[\StudyRoomDetailDependency.applyStudyRoomSeatUseCase] = "applyStudyRoomSeatUseCase-any ApplyStudyRoomSeatUseCase" + keyPathToName[\StudyRoomDetailDependency.cancelStudyRoomSeatUseCase] = "cancelStudyRoomSeatUseCase-any CancelStudyRoomSeatUseCase" } } extension AuthenticationEmailComponent: Registration { @@ -706,7 +724,7 @@ private func registerProviderFactory(_ componentPath: String, _ factory: @escapi registerProviderFactory("^->AppComponent->RootComponent", factory264bfc4d4cb6b0629b40f47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->SigninComponent", factory2882a056d84a613debccf47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->HomeComponent", factory67229cdf0f755562b2b1f47b58f8f304c97af4d5) - registerProviderFactory("^->AppComponent->ApplyComponent", factory3cbfeafbe8b73941b232e3b0c44298fc1c149afb) + registerProviderFactory("^->AppComponent->StudyRoomDetailComponent", factorya36f40c25dcb280bae0ff47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->AuthenticationEmailComponent", factory8798d0becd9d2870112af47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->ChangePasswordComponent", factoryab7c4d87dab53e0a51b9f47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->EnterInformationComponent", factory359a960501e79e833f64f47b58f8f304c97af4d5) diff --git a/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift b/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift index c3e5b3da..a29c72ef 100644 --- a/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift +++ b/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift @@ -7,7 +7,7 @@ import MyPageFeature public protocol MainTabDependency: Dependency { var homeComponent: HomeComponent { get } - var applyComponent: ApplyComponent { get } + var applyComponent: StudyRoomDetailComponent { get } var noticeListComponent: NoticeListComponent { get } var myPageComponent: MyPageComponent { get } } diff --git a/Projects/Features/MainTabFeature/Sources/MainTabView.swift b/Projects/Features/MainTabFeature/Sources/MainTabView.swift index 37094173..20d8baec 100644 --- a/Projects/Features/MainTabFeature/Sources/MainTabView.swift +++ b/Projects/Features/MainTabFeature/Sources/MainTabView.swift @@ -18,13 +18,13 @@ struct MainTabView: View { @State var tabbarHidden = false private let homeComponent: HomeComponent - private let applyComponent: ApplyComponent + private let applyComponent: StudyRoomDetailComponent private let noticeComponent: NoticeListComponent private let myPageComponent: MyPageComponent init( homeComponent: HomeComponent, - applyComponent: ApplyComponent, + applyComponent: StudyRoomDetailComponent, noticeComponent: NoticeListComponent, myPageComponent: MyPageComponent ) { @@ -40,7 +40,7 @@ struct MainTabView: View { homeComponent.makeView() .tag(TabFlow.home) - applyComponent.makeView() + applyComponent.makeView(studyRoomID: "730915bf-82b5-11ed-b4c1-05a58ffb7e9b") .tag(TabFlow.apply) noticeComponent.makeView() From 9763923089042b7b6c876598235f51770ba75e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=83=E1=85=A2=E1=84=92?= =?UTF-8?q?=E1=85=B4?= <0824dh@naver.com> Date: Mon, 26 Dec 2022 23:28:30 +0900 Subject: [PATCH 08/40] =?UTF-8?q?feat=20::=20apply=20cancel=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=BA=B4=EA=B3=A0=20ViewModel=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyRoomDetailViewModel.swift | 94 +++++++++++++++++-- 1 file changed, 85 insertions(+), 9 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index bd28fbbd..a3bca407 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -1,9 +1,85 @@ -// -// StudyRoomDetailViewModel.swift -// ApplyFeatureTests -// -// Created by 김대희 on 2022/12/25. -// Copyright © 2022 com.team.aliens. All rights reserved. -// - -import Foundation +import BaseFeature +import DomainModule +import DataMappingModule +import Combine + +final class StudyRoomDetailViewModel: BaseViewModel { + @Published var studyRoomDetail: DetailStudyRoomEntity = .init( + floor: 0, + name: "", + totalAvailableSeat: 0, + inUseHeadcount: 0, + availableSex: .all, + availableGrade: 0, + eastDescription: "", + westDescription: "", + southDescription: "", + northDescription: "", + totalWidthSize: 0, + totalHeightSize: 0, + seats: [] + ) + @Published var seatTypes: [SeatTypeEntity] = [] + @Published var availableTime: String = "" + + var studyRoomID: String + + private let fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase + private let fetchSeatTypesUseCase: any FetchSeatTypesUseCase + private let fetchDetailStudyRoomUseCase: any FetchDetailStudyRoomUseCase + private let applyStudyRoomSeatUseCase: any ApplyStudyRoomSeatUseCase + private let cancelStudyRoomSeatUseCase: any CancelStudyRoomSeatUseCase + + public init( + studyRoomID: String, + fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase, + fetchSeatTypesUseCase: any FetchSeatTypesUseCase, + fetchDetailStudyRoomUseCase: any FetchDetailStudyRoomUseCase, + applyStudyRoomSeatUseCase: any ApplyStudyRoomSeatUseCase, + cancelStudyRoomSeatUseCase: any CancelStudyRoomSeatUseCase + ) { + self.studyRoomID = studyRoomID + self.fetchStudyAvailableTimeUseCase = fetchStudyAvailableTimeUseCase + self.fetchSeatTypesUseCase = fetchSeatTypesUseCase + self.fetchDetailStudyRoomUseCase = fetchDetailStudyRoomUseCase + self.applyStudyRoomSeatUseCase = applyStudyRoomSeatUseCase + self.cancelStudyRoomSeatUseCase = cancelStudyRoomSeatUseCase + } + + func onAppear() { + fetchStudyAvailableTime() + fetchSeatType() + fetchDetailStudyRoom() + } + + func fetchSeatType() { + addCancellable( + fetchSeatTypesUseCase.execute() + ) { [weak self] seatTypes in + self?.seatTypes = seatTypes + } + } + + func fetchStudyAvailableTime() { + var startTime: String = "" + var endTime: String = "" + + addCancellable( + fetchStudyAvailableTimeUseCase.execute() + ) { [weak self] availableTime in + startTime = availableTime.startAt.toSmallDMSTimeString() + endTime = availableTime.endAt.toSmallDMSTimeString() + self?.availableTime = "\(startTime) ~ \(endTime)" + } + } + + func fetchDetailStudyRoom() { + addCancellable( + fetchDetailStudyRoomUseCase.execute( + roomID: self.studyRoomID + ) + ) { [weak self] detailStudyRoom in + self?.studyRoomDetail = detailStudyRoom + } + } +} From 027af993b643f0e05b003f721da298c6c2fa7150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=83=E1=85=A2=E1=84=92?= =?UTF-8?q?=E1=85=B4?= <0824dh@naver.com> Date: Tue, 27 Dec 2022 00:20:57 +0900 Subject: [PATCH 09/40] =?UTF-8?q?feat=20::=20DMSSeatButton=20DesignSystem?= =?UTF-8?q?=EC=97=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Enum/SeatStatusType.swift | 1 + .../Sources/Button/Seat/DMSSeatButton.swift | 29 +++++ .../Button/Seat/DMSSeatButtonStyle.swift | 120 ++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift create mode 100644 Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift diff --git a/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift b/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift index 85f29d3c..35f689cf 100644 --- a/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift +++ b/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift @@ -5,4 +5,5 @@ public enum SeatStatusType: String, Decodable { case unavailable = "UNAVAILABLE" case inUse = "IN_USE" case empty = "EMPTY" + case isSelect = "IS_SELECT" } diff --git a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift new file mode 100644 index 00000000..f4370947 --- /dev/null +++ b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift @@ -0,0 +1,29 @@ +import SwiftUI +import DataMappingModule +import DesignSystem + +public struct DMSSeatButton: View { + var text: String + var style: SeatStatusType + var color: Color + var action: () -> Void + + public init( + text: String = "", + style: SeatStatusType = .empty, + color: Color = .blue, + action: @escaping () -> Void = {} + ) { + self.text = text + self.style = style + self.color = color + self.action = action + } + + public var body: some View { + Button(action: action) { + Text(text) + } + .buttonStyle(DMSSeatButtonStyle(style: style, color: color)) + } +} diff --git a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift new file mode 100644 index 00000000..62d71d63 --- /dev/null +++ b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift @@ -0,0 +1,120 @@ +import SwiftUI +import DataMappingModule + +public struct DMSSeatButtonStyle: ButtonStyle { + var style: SeatStatusType + var color: Color + + public func makeBody(configuration: Configuration) -> some View { + switch style { + case .available: + return AnyView(AvailableButton(configuration: configuration, color: color)) + case .unavailable: + return AnyView(UnAvailableButton(configuration: configuration, color: color)) + case .inUse: + return AnyView(InUseButton(configuration: configuration, color: color)) + case .empty: + return AnyView(EmptyButton()) + case .isSelect: + return AnyView(IsSelectButton(configuration: configuration, color: color)) + } + } +} + +// MARK: - Usage +extension Button { + func dmsStyle(_ style: SeatStatusType, color: Color) -> some View { + self.buttonStyle(DMSSeatButtonStyle(style: style, color: color)) + } +} + +// MARK: - Available +extension DMSSeatButtonStyle { + struct AvailableButton: View { + let configuration: ButtonStyle.Configuration + let color: Color + + var body: some View { + ZStack { + Circle() + .foregroundColor(color) + + configuration.label + .dmsFont(.etc(.overline), color: .GrayScale.gray1) + } + .frame(width: 40, height: 40) + } + } +} + +// MARK: - UnAvailable +extension DMSSeatButtonStyle { + struct UnAvailableButton: View { + let configuration: ButtonStyle.Configuration + let color: Color + + var body: some View { + ZStack { + Circle() + .foregroundColor(.GrayScale.gray4) + + Text("불가") + .dmsFont(.etc(.overline), color: .GrayScale.gray1) + } + .frame(width: 40, height: 40) + } + } +} + +// MARK: - InUse +extension DMSSeatButtonStyle { + struct InUseButton: View { + let configuration: ButtonStyle.Configuration + let color: Color + + var body: some View { + ZStack { + Circle() + .foregroundColor(color) + .opacity(0.4) + + configuration.label + .dmsFont(.etc(.overline), color: .GrayScale.gray1) + } + .frame(width: 40, height: 40) + } + } +} + +// MARK: - Empty +extension DMSSeatButtonStyle { + struct EmptyButton: View { + var body: some View { + ZStack { + Circle() + .foregroundColor(.clear) + } + .frame(width: 40, height: 40) + } + } +} + + +// MARK: - IsSelect +extension DMSSeatButtonStyle { + struct IsSelectButton: View { + let configuration: ButtonStyle.Configuration + let color: Color + + var body: some View { + ZStack { + Circle() + .stroke(color, lineWidth: 4) + + configuration.label + .dmsFont(.etc(.overline), color: .GrayScale.gray7) + } + .frame(width: 40, height: 40) + } + } +} From 0dbec0f1016e94c10a5a2c292eba88534ea5c992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=83=E1=85=A2=E1=84=92?= =?UTF-8?q?=E1=85=B4?= <0824dh@naver.com> Date: Tue, 27 Dec 2022 00:23:54 +0900 Subject: [PATCH 10/40] =?UTF-8?q?feat=20::=20SeatButton=20=EA=B7=B8?= =?UTF-8?q?=EB=A6=BC=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Button/Seat/DMSSeatButtonStyle.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift index 62d71d63..e55c303c 100644 --- a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift +++ b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift @@ -43,6 +43,8 @@ extension DMSSeatButtonStyle { .dmsFont(.etc(.overline), color: .GrayScale.gray1) } .frame(width: 40, height: 40) + .dmsShadow(style: .surface) + } } } @@ -62,6 +64,8 @@ extension DMSSeatButtonStyle { .dmsFont(.etc(.overline), color: .GrayScale.gray1) } .frame(width: 40, height: 40) + .dmsShadow(style: .surface) + } } } @@ -82,6 +86,8 @@ extension DMSSeatButtonStyle { .dmsFont(.etc(.overline), color: .GrayScale.gray1) } .frame(width: 40, height: 40) + .dmsShadow(style: .surface) + } } } @@ -95,11 +101,11 @@ extension DMSSeatButtonStyle { .foregroundColor(.clear) } .frame(width: 40, height: 40) + } } } - // MARK: - IsSelect extension DMSSeatButtonStyle { struct IsSelectButton: View { @@ -115,6 +121,7 @@ extension DMSSeatButtonStyle { .dmsFont(.etc(.overline), color: .GrayScale.gray7) } .frame(width: 40, height: 40) + .dmsShadow(style: .surface) } } } From bb67369b1eea27faae874c9179a22136c1e0c3b4 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Tue, 27 Dec 2022 19:15:35 +0900 Subject: [PATCH 11/40] =?UTF-8?q?feat=20::=20HexColor=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Utility/Sources/HexColor.swift | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Projects/Modules/Utility/Sources/HexColor.swift diff --git a/Projects/Modules/Utility/Sources/HexColor.swift b/Projects/Modules/Utility/Sources/HexColor.swift new file mode 100644 index 00000000..00308dda --- /dev/null +++ b/Projects/Modules/Utility/Sources/HexColor.swift @@ -0,0 +1,28 @@ +import SwiftUI + +public extension Color { + init(hex: String) { + let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) + var int: UInt64 = 0 + Scanner(string: hex).scanHexInt64(&int) + let alpha, red, grenn, blue: UInt64 + switch hex.count { + case 3: // RGB (12-bit) + (alpha, red, grenn, blue) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17) + case 6: // RGB (24-bit) + (alpha, red, grenn, blue) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF) + case 8: // ARGB (32-bit) + (alpha, red, grenn, blue) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF) + default: + (alpha, red, grenn, blue) = (1, 1, 1, 0) + } + + self.init( + .sRGB, + red: Double(red) / 255, + green: Double(grenn) / 255, + blue: Double(blue) / 255, + opacity: Double(alpha) / 255 + ) + } +} From 0d50dec6af7c25397809d797676509b4e2a9a412 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Tue, 27 Dec 2022 19:16:01 +0900 Subject: [PATCH 12/40] =?UTF-8?q?fix=20::=20DetailStudyRoomEntity=20?= =?UTF-8?q?=ED=9C=B4=EB=A8=BC=20=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Impl/DataTransfer/FetchDetailStudyRoomDataTransfer.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Services/NetworkModule/Sources/StudyRooms/Remote/Impl/DataTransfer/FetchDetailStudyRoomDataTransfer.swift b/Projects/Services/NetworkModule/Sources/StudyRooms/Remote/Impl/DataTransfer/FetchDetailStudyRoomDataTransfer.swift index df9047ee..b802d82f 100644 --- a/Projects/Services/NetworkModule/Sources/StudyRooms/Remote/Impl/DataTransfer/FetchDetailStudyRoomDataTransfer.swift +++ b/Projects/Services/NetworkModule/Sources/StudyRooms/Remote/Impl/DataTransfer/FetchDetailStudyRoomDataTransfer.swift @@ -14,7 +14,7 @@ public extension FetchDetailStudyRoomResponseDTO { westDescription: westDescription, southDescription: southDescription, northDescription: northDescription, - totalWidthSize: totalAvailableSeat, + totalWidthSize: totalWidthSize, totalHeightSize: totalHeightSize, seats: seats.map { $0.toDomain() } ) From 9b2a43a91ce8c12780597e315aaa0e04b90768b1 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Tue, 27 Dec 2022 19:16:55 +0900 Subject: [PATCH 13/40] =?UTF-8?q?feat=20::=EA=B0=81=EC=A2=85=20Entity?= =?UTF-8?q?=EC=97=90=20Hashable=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DomainModule/Sources/Entities/SeatEntity.swift | 2 +- .../DomainModule/Sources/Entities/SeatStudentEntity.swift | 2 +- .../Services/DomainModule/Sources/Entities/SeatTypeEntity.swift | 2 +- .../DesignSystem/Sources/Button/Seat/DMSSeatButton.swift | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Projects/Services/DomainModule/Sources/Entities/SeatEntity.swift b/Projects/Services/DomainModule/Sources/Entities/SeatEntity.swift index a746da80..515809ca 100644 --- a/Projects/Services/DomainModule/Sources/Entities/SeatEntity.swift +++ b/Projects/Services/DomainModule/Sources/Entities/SeatEntity.swift @@ -1,7 +1,7 @@ import Foundation import DataMappingModule -public struct SeatEntity: Equatable { +public struct SeatEntity: Equatable, Hashable { public init( id: String, widthLocation: Int, diff --git a/Projects/Services/DomainModule/Sources/Entities/SeatStudentEntity.swift b/Projects/Services/DomainModule/Sources/Entities/SeatStudentEntity.swift index 8b08c186..6541f781 100644 --- a/Projects/Services/DomainModule/Sources/Entities/SeatStudentEntity.swift +++ b/Projects/Services/DomainModule/Sources/Entities/SeatStudentEntity.swift @@ -1,6 +1,6 @@ import Foundation -public struct SeatStudentEntity: Equatable { +public struct SeatStudentEntity: Equatable, Hashable { public init(id: String, name: String) { self.id = id self.name = name diff --git a/Projects/Services/DomainModule/Sources/Entities/SeatTypeEntity.swift b/Projects/Services/DomainModule/Sources/Entities/SeatTypeEntity.swift index 02058630..bcc6e068 100644 --- a/Projects/Services/DomainModule/Sources/Entities/SeatTypeEntity.swift +++ b/Projects/Services/DomainModule/Sources/Entities/SeatTypeEntity.swift @@ -1,6 +1,6 @@ import Foundation -public struct SeatTypeEntity: Equatable, Decodable { +public struct SeatTypeEntity: Equatable, Decodable, Hashable { public init(id: String, name: String, color: String) { self.id = id self.name = name diff --git a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift index f4370947..fde93984 100644 --- a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift +++ b/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift @@ -1,6 +1,5 @@ import SwiftUI import DataMappingModule -import DesignSystem public struct DMSSeatButton: View { var text: String From afb5d452796c878cb4447b204f27776590253f03 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Tue, 27 Dec 2022 19:22:47 +0900 Subject: [PATCH 14/40] =?UTF-8?q?feat=20::=20=EC=9D=BC=EB=8B=A8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=A7=8C=EB=93=A4=EC=96=B4=20=EB=86=A8?= =?UTF-8?q?=EB=8A=94=EB=8D=B0=20ViewModel=20=EC=83=81=EC=86=8D=20=EC=95=88?= =?UTF-8?q?=EB=90=98=EC=84=9C=20=EB=B0=94=EA=BF=80=20=EC=98=88=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Component/StudyRoomSeatDetailView.swift | 34 ++++++++++ .../Component/StudyRoomSeatView.swift | 65 +++++++++++++++++++ .../StudyRoomDetail/StudyRoomDetailView.swift | 60 ++++++++++++++--- .../StudyRoomDetailViewModel.swift | 16 +++++ .../MainTabFeature/Sources/MainTabView.swift | 2 +- 5 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift create mode 100644 Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift new file mode 100644 index 00000000..5faac04a --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift @@ -0,0 +1,34 @@ +import DesignSystem +import DomainModule +import DataMappingModule +import SwiftUI +import Utility + +struct StudyRoomSeatDetailView: View { + var detailStudyRoom: DetailStudyRoomEntity + var columns: [GridItem] { + Array(repeating: GridItem(.flexible(), spacing: 40), count: detailStudyRoom.totalWidthSize) + } + + var body: some View { + ScrollView([.horizontal, .vertical]) { + LazyVGrid(columns: columns) { + ForEach(detailStudyRoom.seats, id: \.self) { singleSeat in + DMSSeatButton( + text: generateSeatButtonText(seat: singleSeat), + style: singleSeat.status, + color: Color(hex: singleSeat.type?.color ?? "") + ) + } + } + } + } + func generateSeatButtonText(seat: SeatEntity) -> String { + var text: String { + seat.status == .available ? + String(seat.number ?? 0) : + seat.student?.name ?? "" + } + return text + } +} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift new file mode 100644 index 00000000..5a898a90 --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift @@ -0,0 +1,65 @@ +import DesignSystem +import DomainModule +import SwiftUI +import Utility + +struct StudyRoomSeatView: View { + var detailStudyRoom: DetailStudyRoomEntity + +// @ViewBuilder +// func StudyRoomSeatView() -> some View { +// +// } + var body: some View { + VStack { + Spacer() + .frame(height: 66) + HStack { + Text(detailStudyRoom.westDescription) + .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) + .rotationEffect(.degrees(-90)) + .padding(.leading, 8) + +// Spacer() + + VStack(alignment: .center) { + Text(detailStudyRoom.northDescription) + .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) + .padding(.top, 8) + + StudyRoomSeatDetailView(detailStudyRoom: detailStudyRoom) + + Text(detailStudyRoom.southDescription) + .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) + .padding(.bottom, 8) + + } +// Spacer() + + Text(detailStudyRoom.eastDescription) + .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) + .rotationEffect(.degrees(90)) + .padding(.trailing, 8) + + } + .background { + Color.GrayScale.gray1 + .cornerRadius(20) + } + .overlay { + RoundedRectangle(cornerRadius: 20) + .stroke( + Color.PrimaryVariant.primary, + lineWidth: 1 + ) + } + .dmsShadow(style: .surface) + + } + } + + @ViewBuilder + func studyRoomSeatScrollview() -> some View { + + } +} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index aae78f10..13fee57c 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -1,9 +1,51 @@ -// -// StudyRoomDetailView.swift -// ApplyFeatureTests -// -// Created by 김대희 on 2022/12/25. -// Copyright © 2022 com.team.aliens. All rights reserved. -// - -import Foundation +import DesignSystem +import DomainModule +import SwiftUI + +struct StudyRoomDetailView: View { + @StateObject var viewModel: StudyRoomDetailViewModel + @Environment(\.dismiss) var dismiss + + init( + viewModel: StudyRoomDetailViewModel + ) { + _viewModel = StateObject(wrappedValue: viewModel) + } + + var body: some View { + VStack { + Spacer() + + studyRoomDetailBackView() + .padding(.top, 204) + .padding(.bottom, 0) + } + .dmsBackButton(dismiss: dismiss) + .onAppear { + viewModel.onAppear() + } + } + + @ViewBuilder + func studyRoomDetailBackView() -> some View { + VStack { + StudyRoomSeatView( + detailStudyRoom: viewModel.studyRoomDetail + ) + .padding(.bottom, 6) + + HStack(spacing: 10) { + DMSWideButton(text: "취소", style: .contained, color: .GrayScale.gray4) + DMSWideButton(text: "신청", style: .contained, color: .System.primary) + } + .padding(.bottom, 40) + + } + .padding(.horizontal, 24) + .background { + Color.GrayScale.gray1 + .cornerRadius(20) + } + .dmsShadow(style: .surface) + } +} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index a3bca407..d144e7f6 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -20,6 +20,7 @@ final class StudyRoomDetailViewModel: BaseViewModel { seats: [] ) @Published var seatTypes: [SeatTypeEntity] = [] + @Published var seat: [[SeatEntity]] = [[]] @Published var availableTime: String = "" var studyRoomID: String @@ -82,4 +83,19 @@ final class StudyRoomDetailViewModel: BaseViewModel { self?.studyRoomDetail = detailStudyRoom } } + + func detailRoomSeatTwoDimensional() { + let width = self.studyRoomDetail.totalWidthSize + let height = self.studyRoomDetail.totalHeightSize + let beforeSeat = self.studyRoomDetail.seats + var totalCount = 0 + + for widthCount in 0.. Date: Tue, 27 Dec 2022 21:53:42 +0900 Subject: [PATCH 15/40] =?UTF-8?q?fix=20::=20signUp=20Toast=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Features/SigninFeature/Sources/SigninView.swift | 2 +- .../SigninFeature/Sources/SigninViewModel.swift | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Projects/Features/SigninFeature/Sources/SigninView.swift b/Projects/Features/SigninFeature/Sources/SigninView.swift index fb34a7bc..dc5c3c4b 100644 --- a/Projects/Features/SigninFeature/Sources/SigninView.swift +++ b/Projects/Features/SigninFeature/Sources/SigninView.swift @@ -116,7 +116,7 @@ struct SigninView: View { } .navigationTitle("로그인") .navigationBarTitleDisplayMode(.inline) - .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .padding(.horizontal, 24) .dmsBackground() .navigate( diff --git a/Projects/Features/SigninFeature/Sources/SigninViewModel.swift b/Projects/Features/SigninFeature/Sources/SigninViewModel.swift index d165309c..45f0c969 100644 --- a/Projects/Features/SigninFeature/Sources/SigninViewModel.swift +++ b/Projects/Features/SigninFeature/Sources/SigninViewModel.swift @@ -7,8 +7,6 @@ final class SigninViewModel: BaseViewModel { @Published var password = "" @Published var isOnAutoSignin = true @Published var isSuccessSignin = false - @Published var isShowingToast = false - @Published var toastMessage = "" var isSigninEnabled: Bool { !id.isEmpty && !password.isEmpty @@ -22,7 +20,14 @@ final class SigninViewModel: BaseViewModel { func signinButtonDidTap() { guard isSigninEnabled else { return } - addCancellable(signinUseCase.execute(req: .init(accountID: id, password: password))) { [weak self] _ in + addCancellable( + signinUseCase.execute( + req: .init( + accountID: id, + password: password + ) + ) + ) { [weak self] _ in self?.isSuccessSignin = true } } From bc5047d02c9d2730859f022a3a54bceaa5821abc Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Tue, 27 Dec 2022 21:54:04 +0900 Subject: [PATCH 16/40] =?UTF-8?q?feat=20::=20SeatView=20=EC=9A=B0=EC=84=A0?= =?UTF-8?q?=20=EB=8C=80=EC=B6=A9=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Component/StudyRoomSeatDetailView.swift | 12 +++---- .../Component/StudyRoomSeatTypeView.swift | 27 ++++++++++++++ .../Component/StudyRoomSeatView.swift | 35 ++++++++----------- .../StudyRoomDetail/StudyRoomDetailView.swift | 13 ++++--- 4 files changed, 56 insertions(+), 31 deletions(-) create mode 100644 Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift index 5faac04a..85964710 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift @@ -4,16 +4,13 @@ import DataMappingModule import SwiftUI import Utility -struct StudyRoomSeatDetailView: View { - var detailStudyRoom: DetailStudyRoomEntity - var columns: [GridItem] { - Array(repeating: GridItem(.flexible(), spacing: 40), count: detailStudyRoom.totalWidthSize) - } +extension StudyRoomDetailView { - var body: some View { + @ViewBuilder + func studyRoomSeatDetailView() -> some View { ScrollView([.horizontal, .vertical]) { LazyVGrid(columns: columns) { - ForEach(detailStudyRoom.seats, id: \.self) { singleSeat in + ForEach(viewModel.studyRoomDetail.seats, id: \.self) { singleSeat in DMSSeatButton( text: generateSeatButtonText(seat: singleSeat), style: singleSeat.status, @@ -23,6 +20,7 @@ struct StudyRoomSeatDetailView: View { } } } + func generateSeatButtonText(seat: SeatEntity) -> String { var text: String { seat.status == .available ? diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift new file mode 100644 index 00000000..5d856309 --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift @@ -0,0 +1,27 @@ +import DesignSystem +import DomainModule +import SwiftUI +import Utility + +extension StudyRoomDetailView { + + @ViewBuilder + func studyRoomSeatTypeView() -> some View { + ScrollView(.horizontal) { + HStack { + ForEach(viewModel.seatTypes, id: \.self) { seatType in + HStack { + Circle() + .foregroundColor(Color(hex: seatType.color)) + .frame(width: 10, height: 10) + Spacer() + .frame(width: 4) + + Text(seatType.name) + .dmsFont(.etc(.overline), color: .System.backgroundTitle) + } + } + } + } + } +} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift index 5a898a90..bd716a05 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift @@ -3,40 +3,39 @@ import DomainModule import SwiftUI import Utility -struct StudyRoomSeatView: View { - var detailStudyRoom: DetailStudyRoomEntity +extension StudyRoomDetailView { -// @ViewBuilder -// func StudyRoomSeatView() -> some View { -// -// } - var body: some View { + @ViewBuilder + func studyRoomSeatView() -> some View { VStack { Spacer() - .frame(height: 66) + .frame(height: 30) + + studyRoomSeatTypeView() + + Spacer() + .frame(height: 15) + HStack { - Text(detailStudyRoom.westDescription) + Text(viewModel.studyRoomDetail.westDescription) .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .rotationEffect(.degrees(-90)) .padding(.leading, 8) -// Spacer() - VStack(alignment: .center) { - Text(detailStudyRoom.northDescription) + Text(viewModel.studyRoomDetail.northDescription) .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .padding(.top, 8) - StudyRoomSeatDetailView(detailStudyRoom: detailStudyRoom) + studyRoomSeatDetailView() - Text(detailStudyRoom.southDescription) + Text(viewModel.studyRoomDetail.southDescription) .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .padding(.bottom, 8) } -// Spacer() - Text(detailStudyRoom.eastDescription) + Text(viewModel.studyRoomDetail.eastDescription) .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .rotationEffect(.degrees(90)) .padding(.trailing, 8) @@ -58,8 +57,4 @@ struct StudyRoomSeatView: View { } } - @ViewBuilder - func studyRoomSeatScrollview() -> some View { - - } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index 13fee57c..7dd47a9a 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -12,6 +12,10 @@ struct StudyRoomDetailView: View { _viewModel = StateObject(wrappedValue: viewModel) } + var columns: [GridItem] { + Array(repeating: GridItem(.flexible(), spacing: 40), count: viewModel.studyRoomDetail.totalWidthSize) + } + var body: some View { VStack { Spacer() @@ -21,6 +25,9 @@ struct StudyRoomDetailView: View { .padding(.bottom, 0) } .dmsBackButton(dismiss: dismiss) + .navigationTitle("자습실 자리 신청") + .navigationBarTitleDisplayMode(.inline) + .dmsBackground() .onAppear { viewModel.onAppear() } @@ -29,10 +36,8 @@ struct StudyRoomDetailView: View { @ViewBuilder func studyRoomDetailBackView() -> some View { VStack { - StudyRoomSeatView( - detailStudyRoom: viewModel.studyRoomDetail - ) - .padding(.bottom, 6) + studyRoomSeatView() + .padding(.bottom, 6) HStack(spacing: 10) { DMSWideButton(text: "취소", style: .contained, color: .GrayScale.gray4) From 3e11d7aa8994320cbec0e2cc316b94c826f7f824 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 00:26:50 +0900 Subject: [PATCH 17/40] =?UTF-8?q?feat=20::=20=EB=8B=A4=ED=81=AC=EB=AA=A8?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift | 2 +- .../Sources/StudyRoomDetail/StudyRoomDetailView.swift | 2 +- .../HomeFeature/Sources/Component/MealCarouselView.swift | 2 +- .../Features/HomeFeature/Sources/Component/NoticeView.swift | 2 +- Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift index bd716a05..a682a342 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift @@ -42,7 +42,7 @@ extension StudyRoomDetailView { } .background { - Color.GrayScale.gray1 + Color.System.surface .cornerRadius(20) } .overlay { diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index 7dd47a9a..731a5b23 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -48,7 +48,7 @@ struct StudyRoomDetailView: View { } .padding(.horizontal, 24) .background { - Color.GrayScale.gray1 + Color.System.surface .cornerRadius(20) } .dmsShadow(style: .surface) diff --git a/Projects/Features/HomeFeature/Sources/Component/MealCarouselView.swift b/Projects/Features/HomeFeature/Sources/Component/MealCarouselView.swift index 0022d082..002fd8b6 100644 --- a/Projects/Features/HomeFeature/Sources/Component/MealCarouselView.swift +++ b/Projects/Features/HomeFeature/Sources/Component/MealCarouselView.swift @@ -80,7 +80,7 @@ struct MealCarouselView: View { UIScreen.main.bounds.height * 0.4103 ) .background { - Color.GrayScale.gray1 + Color.System.surface .cornerRadius(20) } .overlay { diff --git a/Projects/Features/HomeFeature/Sources/Component/NoticeView.swift b/Projects/Features/HomeFeature/Sources/Component/NoticeView.swift index 852cfc20..6a28affa 100644 --- a/Projects/Features/HomeFeature/Sources/Component/NoticeView.swift +++ b/Projects/Features/HomeFeature/Sources/Component/NoticeView.swift @@ -26,7 +26,7 @@ struct NoticeView: View { .padding(.trailing, 8) } .background { - Color.GrayScale.gray1 + Color.System.surface } .cornerRadius(100) .padding(.horizontal, 24) diff --git a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift index 7fac8370..442483eb 100644 --- a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift +++ b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift @@ -176,7 +176,7 @@ struct MyPageView: View { .padding(.vertical, 15) .padding(.horizontal, 20) .background { - Color.GrayScale.gray1 + Color.System.surface .dmsShadow(style: .surface) } } From edb7b9c0969174efb87eae14e08ed2133b812a15 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 00:33:45 +0900 Subject: [PATCH 18/40] =?UTF-8?q?fix=20::=20=EB=A8=B8=EC=A7=80=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Features/MainTabFeature/Sources/MainTabComponent.swift | 2 +- Projects/Features/MainTabFeature/Sources/MainTabView.swift | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift b/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift index ae577e2a..23f5babb 100644 --- a/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift +++ b/Projects/Features/MainTabFeature/Sources/MainTabComponent.swift @@ -7,7 +7,7 @@ import MyPageFeature public protocol MainTabDependency: Dependency { var homeComponent: HomeComponent { get } - var applyComponent: StudyRoomDetailComponent { get } + var studyRoomListComponent: StudyRoomListComponent { get } var noticeListComponent: NoticeListComponent { get } var myPageComponent: MyPageComponent { get } } diff --git a/Projects/Features/MainTabFeature/Sources/MainTabView.swift b/Projects/Features/MainTabFeature/Sources/MainTabView.swift index 263bd5dc..b315d65c 100644 --- a/Projects/Features/MainTabFeature/Sources/MainTabView.swift +++ b/Projects/Features/MainTabFeature/Sources/MainTabView.swift @@ -18,13 +18,13 @@ struct MainTabView: View { @State var tabbarHidden = false private let homeComponent: HomeComponent - private let applyComponent: StudyRoomDetailComponent + private let studyRoomListComponent: StudyRoomListComponent private let noticeComponent: NoticeListComponent private let myPageComponent: MyPageComponent init( homeComponent: HomeComponent, - applyComponent: StudyRoomDetailComponent, + studyRoomListComponent: StudyRoomListComponent, noticeComponent: NoticeListComponent, myPageComponent: MyPageComponent ) { @@ -40,7 +40,7 @@ struct MainTabView: View { homeComponent.makeView() .tag(TabFlow.home) - applyComponent.makeView(studyRoomID: "956e86a9-85ca-11ed-973c-27c0200c5ff2") + studyRoomListComponent.makeView() .tag(TabFlow.apply) noticeComponent.makeView() From b46d3a9e7ecfcb06b8cd9051a676c201c34f5cb0 Mon Sep 17 00:00:00 2001 From: sian7563 Date: Wed, 28 Dec 2022 00:58:27 +0900 Subject: [PATCH 19/40] =?UTF-8?q?feat=20::=20=ED=8F=B4=EB=8D=94=EB=A7=81?= =?UTF-8?q?=20=EB=8B=A4=EC=8B=9C=20=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Application/NeedleGenerated.swift | 7 +-- .../Component/StudyRoomListCellView.swift | 37 ++++++++++++++ .../Component}/StudyRoomNoticeView.swift | 2 +- .../StudyRoomListView.swift | 48 ++----------------- ...nt.swift => `StudyRoomListComponent.swift} | 0 5 files changed, 45 insertions(+), 49 deletions(-) create mode 100644 Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomListCellView.swift rename Projects/Features/ApplyFeature/Sources/{ => StudyroomApplication/Component}/StudyRoomNoticeView.swift (94%) rename Projects/Features/ApplyFeature/Sources/StudyroomApplication/{StudyRoomListComponent.swift => `StudyRoomListComponent.swift} (100%) diff --git a/Projects/App/Sources/Application/NeedleGenerated.swift b/Projects/App/Sources/Application/NeedleGenerated.swift index 3c161115..f3e83757 100644 --- a/Projects/App/Sources/Application/NeedleGenerated.swift +++ b/Projects/App/Sources/Application/NeedleGenerated.swift @@ -182,8 +182,8 @@ private class MainTabDependency2826cdb310ed0b17a725Provider: MainTabDependency { var homeComponent: HomeComponent { return appComponent.homeComponent } - var applyComponent: StudyRoomDetailComponent { - return appComponent.applyComponent + var studyRoomListComponent: StudyRoomListComponent { + return appComponent.studyRoomListComponent } var noticeListComponent: NoticeListComponent { return appComponent.noticeListComponent @@ -616,7 +616,7 @@ extension SignupProfileImageComponent: Registration { extension MainTabComponent: Registration { public func registerItems() { keyPathToName[\MainTabDependency.homeComponent] = "homeComponent-HomeComponent" - keyPathToName[\MainTabDependency.applyComponent] = "applyComponent-ApplyComponent" + keyPathToName[\MainTabDependency.studyRoomListComponent] = "studyRoomListComponent-StudyRoomListComponent" keyPathToName[\MainTabDependency.noticeListComponent] = "noticeListComponent-NoticeListComponent" keyPathToName[\MainTabDependency.myPageComponent] = "myPageComponent-MyPageComponent" } @@ -759,6 +759,7 @@ private func register1() { registerProviderFactory("^->AppComponent->SigninComponent", factory2882a056d84a613debccf47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->HomeComponent", factory67229cdf0f755562b2b1f47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->StudyRoomDetailComponent", factorya36f40c25dcb280bae0ff47b58f8f304c97af4d5) + registerProviderFactory("^->AppComponent->StudyRoomListComponent", factory7451c5364e65ee2d46bbf47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->AuthenticationEmailComponent", factory8798d0becd9d2870112af47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->ChangePasswordComponent", factoryab7c4d87dab53e0a51b9f47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->EnterInformationComponent", factory359a960501e79e833f64f47b58f8f304c97af4d5) diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomListCellView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomListCellView.swift new file mode 100644 index 00000000..5881a26a --- /dev/null +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomListCellView.swift @@ -0,0 +1,37 @@ +import DesignSystem +import DomainModule +import Utility +import SwiftUI + +struct StudyRoomListCellView: View { + var studyRoomEntity: StudyRoomEntity + + var body: some View { + ZStack { + Color.System.surface + .cornerRadius(6) + + VStack(alignment: .leading, spacing: 18) { + HStack(spacing: 14) { + Text("\(studyRoomEntity.floor)층") + .dmsFont(.body(.body3), color: .System.primary) + + Text(studyRoomEntity.name) + .dmsFont(.body(.body3), color: .System.backgroundTitle) + + Spacer() + + Text("\(studyRoomEntity.inUseHeadcount)/\(studyRoomEntity.totalAvailableSeat)") + .dmsFont(.body(.body3), color: .GrayScale.gray5) + } + + Text("\(studyRoomEntity.availableGrade)학년 \(studyRoomEntity.availableSex.displayString())") + .dmsFont(.body(.body3), color: .System.primary) + } + .padding(.vertical, 16) + .padding(.horizontal, 16) + } + .frame(height: 68) + .dmsShadow(style: .surface) + } +} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomNoticeView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomNoticeView.swift similarity index 94% rename from Projects/Features/ApplyFeature/Sources/StudyRoomNoticeView.swift rename to Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomNoticeView.swift index 63b6b9cc..2b1cde51 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomNoticeView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomNoticeView.swift @@ -18,7 +18,7 @@ struct StudyRoomNoticeView: View { Spacer() } .background { - Color.GrayScale.gray1 + Color.System.surface } .cornerRadius(100) .padding(.horizontal, 24) diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift index 24649439..f7dd119b 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift @@ -1,4 +1,5 @@ import DesignSystem +import DomainModule import Utility import SwiftUI @@ -24,15 +25,9 @@ struct StudyRoomListView: View { .frame(height: 10) ForEach(viewModel.studyRoomList, id: \.self) { studyRoomList in - studyRoomListCellView( - name: studyRoomList.name, - floor: studyRoomList.floor, - inUseHeadcount: studyRoomList.inUseHeadcount, - totalAvailableSeat: studyRoomList.totalAvailableSeat, - availableGrade: studyRoomList.availableGrade, - availableSex: studyRoomList.availableSex.displayString() - ) + StudyRoomListCellView(studyRoomEntity: studyRoomList) .padding(.top, 5) + .padding(.bottom, 10) .listRowInsets(EdgeInsets()) } } @@ -48,41 +43,4 @@ struct StudyRoomListView: View { } } } - - @ViewBuilder - func studyRoomListCellView( - name: String, - floor: Int, - inUseHeadcount: Int, - totalAvailableSeat: Int, - availableGrade: Int, - availableSex: String - ) -> some View { - ZStack { - Color.System.surface - .cornerRadius(6) - - VStack(alignment: .leading, spacing: 18) { - HStack(spacing: 14) { - Text("\(floor)층") - .dmsFont(.body(.body3), color: .System.primary) - - Text(name) - .dmsFont(.body(.body3), color: .System.backgroundTitle) - - Spacer() - - Text("\(inUseHeadcount)/\(totalAvailableSeat)") - .dmsFont(.body(.body3), color: .GrayScale.gray5) - } - - Text("\(availableGrade)학년 \(availableSex)") - .dmsFont(.body(.body3), color: .System.primary) - } - .padding(.vertical, 16) - .padding(.horizontal, 16) - } - .frame(height: 68) - .dmsShadow(style: .surface) - } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListComponent.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/`StudyRoomListComponent.swift similarity index 100% rename from Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListComponent.swift rename to Projects/Features/ApplyFeature/Sources/StudyroomApplication/`StudyRoomListComponent.swift From c14c1eec1e3e6ad0c825b1286220afe19f2325b6 Mon Sep 17 00:00:00 2001 From: sian7563 Date: Wed, 28 Dec 2022 08:34:39 +0900 Subject: [PATCH 20/40] =?UTF-8?q?feat=20::=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ent.swift => StudyRoomListComponent.swift} | 4 +- .../StudyRoomListView.swift | 37 +++++++++++-------- 2 files changed, 25 insertions(+), 16 deletions(-) rename Projects/Features/ApplyFeature/Sources/StudyroomApplication/{`StudyRoomListComponent.swift => StudyRoomListComponent.swift} (80%) diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/`StudyRoomListComponent.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListComponent.swift similarity index 80% rename from Projects/Features/ApplyFeature/Sources/StudyroomApplication/`StudyRoomListComponent.swift rename to Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListComponent.swift index cfc18565..a180eda6 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/`StudyRoomListComponent.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListComponent.swift @@ -6,6 +6,7 @@ import NeedleFoundation public protocol StudyRoomListDependency: Dependency { var fetchStudyRoomListUseCase: any FetchStudyRoomListUseCase { get } var fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase { get } + var studyRoomDetailComponent: StudyRoomDetailComponent { get } } public final class StudyRoomListComponent: Component { @@ -14,7 +15,8 @@ public final class StudyRoomListComponent: Component { viewModel: .init( fetchStudyRoomListUseCase: dependency.fetchStudyRoomListUseCase, fetchStudyAvailableTimeUseCase: dependency.fetchStudyAvailableTimeUseCase - ) + ), + studyRoomDetailComponent: dependency.studyRoomDetailComponent ) } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift index f7dd119b..89564daa 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift @@ -5,11 +5,14 @@ import SwiftUI struct StudyRoomListView: View { @StateObject var viewModel: StudyRoomListViewModel + private let studyRoomDetailComponent: StudyRoomDetailComponent init( - viewModel: StudyRoomListViewModel + viewModel: StudyRoomListViewModel, + studyRoomDetailComponent: StudyRoomDetailComponent ) { _viewModel = StateObject(wrappedValue: viewModel) + self.studyRoomDetailComponent = studyRoomDetailComponent } var body: some View { @@ -19,27 +22,31 @@ struct StudyRoomListView: View { if viewModel.isStudyRoomTime { StudyRoomNoticeView(text: viewModel.rangeString) } - LazyVStack(spacing: 16) { Spacer() .frame(height: 10) - ForEach(viewModel.studyRoomList, id: \.self) { studyRoomList in - StudyRoomListCellView(studyRoomEntity: studyRoomList) - .padding(.top, 5) - .padding(.bottom, 10) - .listRowInsets(EdgeInsets()) + NavigationLink( + destination: studyRoomDetailComponent.makeView( + studyRoomID: studyRoomList.id + ) + ) { + StudyRoomListCellView(studyRoomEntity: studyRoomList) + .padding(.top, 5) + .padding(.bottom, 10) + .listRowInsets(EdgeInsets()) + } } + .padding(.horizontal, 24) } - .padding(.horizontal, 24) } - } - .navigationTitle("자습실 신청") - .navigationBarTitleDisplayMode(.inline) - .dmsBackground() - .onAppear { - viewModel.fetchStudyRoomList() - viewModel.fetchStudyAvailableTime() + .navigationTitle("자습실 신청") + .navigationBarTitleDisplayMode(.inline) + .dmsBackground() + .onAppear { + viewModel.fetchStudyRoomList() + viewModel.fetchStudyAvailableTime() + } } } } From 35d2b82b416ed59389e637f310d3f8723ba51dbb Mon Sep 17 00:00:00 2001 From: sian7563 Date: Wed, 28 Dec 2022 08:52:51 +0900 Subject: [PATCH 21/40] =?UTF-8?q?feat=20::=20DesignSystem=20=EC=97=90=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=98=AE=EA=B8=B0?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/StudyRoomDetail/Component}/Seat/DMSSeatButton.swift | 0 .../StudyRoomDetail/Component}/Seat/DMSSeatButtonStyle.swift | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Projects/{UsertInterfaces/DesignSystem/Sources/Button => Features/ApplyFeature/Sources/StudyRoomDetail/Component}/Seat/DMSSeatButton.swift (100%) rename Projects/{UsertInterfaces/DesignSystem/Sources/Button => Features/ApplyFeature/Sources/StudyRoomDetail/Component}/Seat/DMSSeatButtonStyle.swift (100%) diff --git a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButton.swift similarity index 100% rename from Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButton.swift rename to Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButton.swift diff --git a/Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButtonStyle.swift similarity index 100% rename from Projects/UsertInterfaces/DesignSystem/Sources/Button/Seat/DMSSeatButtonStyle.swift rename to Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButtonStyle.swift From cb452c7f4b64068e1e1c2c4dd4cd78846535033f Mon Sep 17 00:00:00 2001 From: baegteun Date: Wed, 28 Dec 2022 09:10:39 +0900 Subject: [PATCH 22/40] feat :: Needle DI --- Projects/App/Sources/Application/DI/AppComponent.swift | 2 +- Projects/App/Sources/Application/NeedleGenerated.swift | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Projects/App/Sources/Application/DI/AppComponent.swift b/Projects/App/Sources/Application/DI/AppComponent.swift index d935387a..57b8290e 100644 --- a/Projects/App/Sources/Application/DI/AppComponent.swift +++ b/Projects/App/Sources/Application/DI/AppComponent.swift @@ -85,7 +85,7 @@ public extension AppComponent { var homeComponent: HomeComponent { HomeComponent(parent: self) } - var applyComponent: StudyRoomDetailComponent { + var studyRoomDetailComponent: StudyRoomDetailComponent { StudyRoomDetailComponent(parent: self) } var noticeListComponent: NoticeListComponent { diff --git a/Projects/App/Sources/Application/NeedleGenerated.swift b/Projects/App/Sources/Application/NeedleGenerated.swift index f3e83757..384903b9 100644 --- a/Projects/App/Sources/Application/NeedleGenerated.swift +++ b/Projects/App/Sources/Application/NeedleGenerated.swift @@ -372,6 +372,9 @@ private class StudyRoomListDependencyef56e26c25d5de596604Provider: StudyRoomList var fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase { return appComponent.fetchStudyAvailableTimeUseCase } + var studyRoomDetailComponent: StudyRoomDetailComponent { + return appComponent.studyRoomDetailComponent + } private let appComponent: AppComponent init(appComponent: AppComponent) { self.appComponent = appComponent @@ -514,7 +517,7 @@ extension AppComponent: Registration { localTable["signupTermsComponent-SignupTermsComponent"] = { self.signupTermsComponent as Any } localTable["mainTabComponent-MainTabComponent"] = { self.mainTabComponent as Any } localTable["homeComponent-HomeComponent"] = { self.homeComponent as Any } - localTable["applyComponent-StudyRoomDetailComponent"] = { self.applyComponent as Any } + localTable["studyRoomDetailComponent-StudyRoomDetailComponent"] = { self.studyRoomDetailComponent as Any } localTable["noticeListComponent-NoticeListComponent"] = { self.noticeListComponent as Any } localTable["myPageComponent-MyPageComponent"] = { self.myPageComponent as Any } localTable["changeProfileComponent-ChangeProfileComponent"] = { self.changeProfileComponent as Any } @@ -686,6 +689,7 @@ extension StudyRoomListComponent: Registration { public func registerItems() { keyPathToName[\StudyRoomListDependency.fetchStudyRoomListUseCase] = "fetchStudyRoomListUseCase-any FetchStudyRoomListUseCase" keyPathToName[\StudyRoomListDependency.fetchStudyAvailableTimeUseCase] = "fetchStudyAvailableTimeUseCase-any FetchStudyAvailableTimeUseCase" + keyPathToName[\StudyRoomListDependency.studyRoomDetailComponent] = "studyRoomDetailComponent-StudyRoomDetailComponent" } } extension AuthenticationEmailComponent: Registration { @@ -738,7 +742,7 @@ private func registerProviderFactory(_ componentPath: String, _ factory: @escapi #if !NEEDLE_DYNAMIC -private func register1() { +@inline(never) private func register1() { registerProviderFactory("^->AppComponent", factoryEmptyDependencyProvider) registerProviderFactory("^->AppComponent->SplashComponent", factoryace9f05f51d68f4c0677f47b58f8f304c97af4d5) registerProviderFactory("^->AppComponent->SchoolConfirmationQuestionsComponent", factoryd462667f0418a53210fcf47b58f8f304c97af4d5) From 6f5b1c8dad1f9a4ed0d9a0ce3a14aaa8224b397c Mon Sep 17 00:00:00 2001 From: baegteun Date: Wed, 28 Dec 2022 09:49:11 +0900 Subject: [PATCH 23/40] =?UTF-8?q?feat=20::=20=EB=94=94=ED=85=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=9E=90=EC=8A=B5=20=EA=B0=80=EB=8A=A5=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?View=20+=20=EC=9E=90=EC=8A=B5=EC=8B=A4=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=ED=85=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DI/Auth/AppComponent+Auth.swift | 4 +++- .../Component/StudyRoomListCellView.swift | 0 .../Component/StudyRoomNoticeView.swift | 0 .../StudyRoomDetailComponent.swift | 4 ++-- .../StudyRoomDetail/StudyRoomDetailView.swift | 13 ++++++++-- .../StudyRoomDetailViewModel.swift | 21 ++++++++-------- .../StudyRoomListView.swift | 8 +++++-- .../StudyRoomListViewModel.swift | 24 ++++++++----------- .../HomeFeature/Sources/HomeView.swift | 2 +- .../Modules/Utility/Sources/DateUtil.swift | 2 +- 10 files changed, 44 insertions(+), 34 deletions(-) rename Projects/Features/ApplyFeature/Sources/{StudyroomApplication => }/Component/StudyRoomListCellView.swift (100%) rename Projects/Features/ApplyFeature/Sources/{StudyroomApplication => }/Component/StudyRoomNoticeView.swift (100%) diff --git a/Projects/App/Sources/Application/DI/Auth/AppComponent+Auth.swift b/Projects/App/Sources/Application/DI/Auth/AppComponent+Auth.swift index 1bb1ccdd..3449f7fe 100644 --- a/Projects/App/Sources/Application/DI/Auth/AppComponent+Auth.swift +++ b/Projects/App/Sources/Application/DI/Auth/AppComponent+Auth.swift @@ -63,6 +63,8 @@ public extension AppComponent { } var logoutUseCase: any LogoutUseCase { - LogoutUseCaseImpl(authRepository: authRepository) + shared { + LogoutUseCaseImpl(authRepository: authRepository) + } } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomListCellView.swift b/Projects/Features/ApplyFeature/Sources/Component/StudyRoomListCellView.swift similarity index 100% rename from Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomListCellView.swift rename to Projects/Features/ApplyFeature/Sources/Component/StudyRoomListCellView.swift diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomNoticeView.swift b/Projects/Features/ApplyFeature/Sources/Component/StudyRoomNoticeView.swift similarity index 100% rename from Projects/Features/ApplyFeature/Sources/StudyroomApplication/Component/StudyRoomNoticeView.swift rename to Projects/Features/ApplyFeature/Sources/Component/StudyRoomNoticeView.swift diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift index f41750f2..6282caef 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailComponent.swift @@ -12,10 +12,10 @@ public protocol StudyRoomDetailDependency: Dependency { } public final class StudyRoomDetailComponent: Component { - public func makeView(studyRoomID: String) -> some View { + public func makeView(studyRoomEntity: StudyRoomEntity) -> some View { StudyRoomDetailView( viewModel: .init( - studyRoomID: studyRoomID, + studyRoomEntity: studyRoomEntity, fetchStudyAvailableTimeUseCase: dependency.fetchStudyAvailableTimeUseCase, fetchSeatTypesUseCase: dependency.fetchSeatTypesUseCase, fetchDetailStudyRoomUseCase: dependency.fetchDetailStudyRoomUseCase, diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index 731a5b23..d879b466 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -1,3 +1,4 @@ +import BaseFeature import DesignSystem import DomainModule import SwiftUI @@ -5,6 +6,7 @@ import SwiftUI struct StudyRoomDetailView: View { @StateObject var viewModel: StudyRoomDetailViewModel @Environment(\.dismiss) var dismiss + @Environment(\.tabbarHidden) var tabbarHidden init( viewModel: StudyRoomDetailViewModel @@ -18,10 +20,17 @@ struct StudyRoomDetailView: View { var body: some View { VStack { - Spacer() + StudyRoomNoticeView(text: viewModel.availableTimeString) + .padding(.top, 12) + + StudyRoomListCellView( + studyRoomEntity: viewModel.studyRoomEntity + ) + .padding(.horizontal, 24) + .padding(.top, 30) studyRoomDetailBackView() - .padding(.top, 204) + .padding(.top, 20) .padding(.bottom, 0) } .dmsBackButton(dismiss: dismiss) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index d144e7f6..8e32633b 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -2,6 +2,7 @@ import BaseFeature import DomainModule import DataMappingModule import Combine +import Foundation final class StudyRoomDetailViewModel: BaseViewModel { @Published var studyRoomDetail: DetailStudyRoomEntity = .init( @@ -21,9 +22,9 @@ final class StudyRoomDetailViewModel: BaseViewModel { ) @Published var seatTypes: [SeatTypeEntity] = [] @Published var seat: [[SeatEntity]] = [[]] - @Published var availableTime: String = "" + @Published var availableTimeString: String = "" - var studyRoomID: String + let studyRoomEntity: StudyRoomEntity private let fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase private let fetchSeatTypesUseCase: any FetchSeatTypesUseCase @@ -32,14 +33,14 @@ final class StudyRoomDetailViewModel: BaseViewModel { private let cancelStudyRoomSeatUseCase: any CancelStudyRoomSeatUseCase public init( - studyRoomID: String, + studyRoomEntity: StudyRoomEntity, fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase, fetchSeatTypesUseCase: any FetchSeatTypesUseCase, fetchDetailStudyRoomUseCase: any FetchDetailStudyRoomUseCase, applyStudyRoomSeatUseCase: any ApplyStudyRoomSeatUseCase, cancelStudyRoomSeatUseCase: any CancelStudyRoomSeatUseCase ) { - self.studyRoomID = studyRoomID + self.studyRoomEntity = studyRoomEntity self.fetchStudyAvailableTimeUseCase = fetchStudyAvailableTimeUseCase self.fetchSeatTypesUseCase = fetchSeatTypesUseCase self.fetchDetailStudyRoomUseCase = fetchDetailStudyRoomUseCase @@ -62,22 +63,20 @@ final class StudyRoomDetailViewModel: BaseViewModel { } func fetchStudyAvailableTime() { - var startTime: String = "" - var endTime: String = "" - addCancellable( fetchStudyAvailableTimeUseCase.execute() ) { [weak self] availableTime in - startTime = availableTime.startAt.toSmallDMSTimeString() - endTime = availableTime.endAt.toSmallDMSTimeString() - self?.availableTime = "\(startTime) ~ \(endTime)" + var startTime = availableTime.startAt.toSmallDMSTimeString() + var endTime = availableTime.endAt.toSmallDMSTimeString() + print(startTime, endTime) + self?.availableTimeString = "자습실 신청 시간은 \(startTime) ~ \(endTime) 까지 입니다." } } func fetchDetailStudyRoom() { addCancellable( fetchDetailStudyRoomUseCase.execute( - roomID: self.studyRoomID + roomID: self.studyRoomEntity.id ) ) { [weak self] detailStudyRoom in self?.studyRoomDetail = detailStudyRoom diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift index 89564daa..3d1ffc8b 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift @@ -6,6 +6,7 @@ import SwiftUI struct StudyRoomListView: View { @StateObject var viewModel: StudyRoomListViewModel private let studyRoomDetailComponent: StudyRoomDetailComponent + @Environment(\.tabbarHidden) var tabbarHidden init( viewModel: StudyRoomListViewModel, @@ -28,13 +29,12 @@ struct StudyRoomListView: View { ForEach(viewModel.studyRoomList, id: \.self) { studyRoomList in NavigationLink( destination: studyRoomDetailComponent.makeView( - studyRoomID: studyRoomList.id + studyRoomEntity: studyRoomList ) ) { StudyRoomListCellView(studyRoomEntity: studyRoomList) .padding(.top, 5) .padding(.bottom, 10) - .listRowInsets(EdgeInsets()) } } .padding(.horizontal, 24) @@ -46,6 +46,10 @@ struct StudyRoomListView: View { .onAppear { viewModel.fetchStudyRoomList() viewModel.fetchStudyAvailableTime() + tabbarHidden.wrappedValue = false + } + .onDisappear { + tabbarHidden.wrappedValue = true } } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift index ece69755..ac2ab062 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift @@ -12,6 +12,16 @@ final class StudyRoomListViewModel: BaseViewModel { @Published var toastMessage = "" @Published var studyAvailableTime: StudyAvailableTimeEntity? + var rangeString: String { + if let time = studyAvailableTime { + let text = "자습실 신청 시간은 " + time.startAt.toHourAndMinuteDSMDateString() + + " ~ " + time.endAt.toHourAndMinuteDSMDateString() + " 까지 입니다." + return text + } else { + return "" + } + } + private let fetchStudyRoomListUseCase: any FetchStudyRoomListUseCase private let fetchStudyAvailableTimeUseCase: any FetchStudyAvailableTimeUseCase @@ -29,8 +39,6 @@ final class StudyRoomListViewModel: BaseViewModel { fetchStudyRoomListUseCase.execute() ) { [weak self] studyRoomList in self?.studyRoomList = studyRoomList - } onReceiveError: { error in - print(error) } } @@ -39,18 +47,6 @@ final class StudyRoomListViewModel: BaseViewModel { fetchStudyAvailableTimeUseCase.execute() ) { [weak self] studyAvailableTime in self?.studyAvailableTime = studyAvailableTime - } onReceiveError: { error in - print(error) - } - } - - var rangeString: String { - if let time = studyAvailableTime { - let text = "자습실 신청 시간은 " + time.startAt.toHourAndMinuteDSMDateString() + - " ~ " + time.endAt.toHourAndMinuteDSMDateString() + " 까지 입니다." - return text - } else { - return "" } } } diff --git a/Projects/Features/HomeFeature/Sources/HomeView.swift b/Projects/Features/HomeFeature/Sources/HomeView.swift index d93e73c7..e0272f17 100644 --- a/Projects/Features/HomeFeature/Sources/HomeView.swift +++ b/Projects/Features/HomeFeature/Sources/HomeView.swift @@ -55,7 +55,7 @@ struct HomeView: View { } } } - .onChange(of: viewModel.selectedDate) { newValue in + .onChange(of: viewModel.selectedDate) { _ in viewModel.onChangeSelectedDate() } .onAppear { diff --git a/Projects/Modules/Utility/Sources/DateUtil.swift b/Projects/Modules/Utility/Sources/DateUtil.swift index 731da7ca..4739af21 100644 --- a/Projects/Modules/Utility/Sources/DateUtil.swift +++ b/Projects/Modules/Utility/Sources/DateUtil.swift @@ -17,7 +17,7 @@ public extension String { func toDMSTime() -> Date { let formatter = DateFormatter() - formatter.dateFormat = "hh:MM:dd" + formatter.dateFormat = "HH:mm:ss" formatter.locale = Locale(identifier: "ko_kr") return formatter.date(from: self) ?? .init() } From f5c64e2456f97af5fb9d0c993495fe491d23c50e Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 10:20:37 +0900 Subject: [PATCH 24/40] =?UTF-8?q?feat=20::=20=EB=8B=A4=ED=81=AC=20?= =?UTF-8?q?=EB=AA=A8=EB=93=9C=20=EB=A1=9C=EA=B3=A0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DMSHorizontal.imageset/Contents.json | 33 ++++++++++++++++++ .../LOGO - HORIZONTAL.png | Bin 0 -> 33351 bytes .../LOGO - HORIZONTAL@2x.png | Bin 0 -> 92605 bytes .../LOGO - HORIZONTAL@3x.png | Bin 0 -> 183417 bytes 4 files changed, 33 insertions(+) create mode 100644 Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/LOGO - HORIZONTAL.png create mode 100644 Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/LOGO - HORIZONTAL@2x.png create mode 100644 Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/LOGO - HORIZONTAL@3x.png diff --git a/Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/Contents.json b/Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/Contents.json index b63ec851..67a22184 100644 --- a/Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/Contents.json +++ b/Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/Contents.json @@ -5,15 +5,48 @@ "idiom" : "universal", "scale" : "1x" }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "LOGO - HORIZONTAL.png", + "idiom" : "universal", + "scale" : "1x" + }, { "filename" : "dms-horizontal 1.svg", "idiom" : "universal", "scale" : "2x" }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "LOGO - HORIZONTAL@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, { "filename" : "dms-horizontal 2.svg", "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "LOGO - HORIZONTAL@3x.png", + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/LOGO - HORIZONTAL.png b/Projects/UsertInterfaces/DesignSystem/Resources/Icons.xcassets/DMSHorizontal.imageset/LOGO - HORIZONTAL.png new file mode 100644 index 0000000000000000000000000000000000000000..4c287f08d13f74cb913cda2bcc3953e5d0e0a95e GIT binary patch literal 33351 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 givj}%1EdJ0B^zofLHg3Z(mwGx8*%wPDqY2 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 exBnl{9xN{@>bun3ivKyR_I@RYEy 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%0Dk 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%0AvMBhqp#NkAC4zB6?@-H2^SG=#$Zz%*A!uCM( zMQvpY)IhUL^%59Z{DNsjbg@hZCcr%1Dy?F%=i^~?R%WxYs*C>B$fV6BvYF9Y2%MHP z7teeuuu+vXG2O4%i_r=a9cnA1`b1iA###*>pf(+-a^mUz)hg<`4?zW88PP4BH>Xcn zX7lBR)a}WHaQby4CLPVcg7reQm?zpi{UFFl14UDp?U$pwM-%aPk%=2No2P9+#tZnB z&_oP8(EL|m-otT~kNQJLBe#@8L!l7R5gh>qmc1Ph6VD~?@g0jBqi81__@lfkVc_cs z>Wcn7fT2jNm)O<%<~_U26!=k}J}d89+qdiC;TLX0EF$+din`Dqu;R(@;HX?vnqkUh z4dbVfZw0cp{fh&C#f&WVf``_-w7>My;5-t0f6vnt_>w|vRypezqN*uxJ@tuZs`0pk zsM*ecJb%c9#!w%x4~g`12=S53hV&8942rU;$Hj7W*E%|lS`v9Wi- z=Jznm3!NF=0?#L<8TTiN>$|sW_eX=fiaX1F1B?S5RFial%qHf$`$p76yb;gd#V-bo z;!p^9i4hX{Awm81As@w8&k+zIyvlx9!SiN=G>3fefQxHp#7!dSDVUJoPxtmjo6UxS z4GgGnZ7#c1&5{k|Sact~umNBLArN~+>3jg=W%*==(Mo`k(e&FW;6;2l}~^SutGZM9>-0sJ0;;mSTvaNh=+wjB?>e?4M-3qzia8 zn2#XmgnlM`d3XzCAhJ>9tde|VL#S^CL2QJ5`4YNpaI4va#a)h6ntDDN)~GMXq5Sz77IQonWF1)5 zv@Bo^3x$pg`!3H5u!jOMN^y@ib@q&OCY=c-Saf4J`kNsE+kapDccBWOP`FTfxzUOS z%k)rcXHuXYv=+I34^JELK7^OFK&HO&a(t_Zpf1OVxyq&I=7K-Y3N_l}L3LDYxtCi` z0S`|cZ^aYNm9dX+X7Q+6wJ@NJyu;Z4>g2+f<=u4WBj8q%T^+5lorNr=yLIU%@4-E{ z{2V$ps}iAyEnVX$vAEeS*ZR--A)T^lS?N7aAjObCpa>&^9f4C7(*Gv$q*0XOISDt;P(C(NM~@YN5mUE}BdP(h;K0;@`9MJtqe`ijv(@fP1k1 zB3HoMJW}#pN6pF|P16D}8lecupp6aiK3{{Mj+rmcNMtPIwdF*MZ57b9XxtboOh)tz zdoA>i9Frn+*Z(bV3^}>y;rrFW$$uxc{g=yIQZrYigFlps7N9H#;beVJGb|(Cx%GO{_64SbV&18BgA*#y z)K6O0m|2HImN>u0S6nM!z8cjf-Y-05Ojvu}iRp`<=RrE{g=WUB=KQ_d`PL|HzG?D< zEJ>I?1m@EfTq6o_mr;xNvGdat>-hK#xAx}%I|lG~bjSJU*Pj8I?^1-mt~TYGxsV_> zWB)A%folUFr{>n(n<-N^w|B)$p{qw?l?0IW3-vGlJ*Awv*`fnd^&U4;^ntuI!mB2j5uwhmB*o6&uhp#N!$*!0VmT7JRx!&;SYy_M{%=q4=-FWCUvR$8F5;$+D#PS#)-1ADgH(z5H6EN_sR#aW)WZkc(Z#Wtf6gSZC$Rd zzj?Z`q3?bQ_`K#-8PNjA@4OcW@EP2&hZ&ruZ+6~R*Po(vFI}@$Um}fnsQs!SjkgjK zQWgrO(bOeX{k+@yI@!yD54MMlC`nZR>DVvA_bGKL@GH3TMNcM7D(7us-hDfnEhbCk zYLp|j*pebti)R&Z=nK|L-1oE8a)m_BKa?P8XN)W$OlYC;e+=M0jzDzV@g*rN zSGtCSP5Y|vA^X@l>_2WM{f%7LZ>y{1FS-MGUVmIa1p>7UtLTsg$#wCXhj{z*d3BX; zFB$vi@MUPD2(}S1rxcz1@AlM~yQ&3xWpU)Q$iGjKVRtnw|I;NZVHrL9TaKCty>y>V zsV4C;%|BkxR`EM727f94UxVFi2;9`h?>0ZsgRS2Ken<_j4i5jyXf8mOY(bdP$eATu zUR*S$cDy-yThEIJmnOUWXN%JRqJlEf5&|D2B}M-N1kn)PL`?cUV_o5XfsC4E^7*DC z*8cD&#T+?SbT%d;7^AP8Mw~+Pr$F$lz_wGGsW3cIT9EB|4<9raF|J5@ZC0?BqZVN` zY?}J-dP}P6EtKY)D77+yIZ%~m5@?H_BBTu#{zybAnl-*;Gr7wUp7j?-;Z>dfl;*NI z%EVB@lZJnazmGw&W+X~y)Ki4q2|kwuQ!YmOt+-ms2A>jJ+DYmlDITcjCrkxrE}^d^ ztny)OjAFd!7D%xyY1gv3*IBE?de6JVEx_p^{{O?h6fo2$(!LXVAahXxJ|{>jNBzmwwM6xRyZLX@P$hm zcR#N%X@cH5yt1g!zCs5>eSR|!8j-O5#TjCy5~s|oJQ=3N845SU;OpH;B90IP>929L z!gmU*ZM`KFops34$zJ5}v*@&~S7h2;I#wA8Mr{+jF+ERrgpmq@TosQ-Au7YPRXrlyX2Rt;+T3ee_TjI(jJ)+#MrKl0LPNz+NN4X(|23yjiyP zK^Cg3)&J!Xr12LUT!*FWl|uyd6FBtpdcij!Ku06$pU8ICiS9W@Bj8tNakGC>{wttZ zs2qjjVz}dt6%Cu~i_jB*@4PN{b*fT3mPSUy7(5M_+lt*kt4BexhO%)KyQ$)e^_QJ6 zzkT@X?L64CBWTL3nL-fiH6Gf|ZkfY!{S7@vC@`L?{Asv^NhrP&b*xxy`{Do}+?CGm zwS1yb9_8#p=H0L!q^ z?u+4Wj5j@fU72qQ5qLiq|8XdwiVdoBXjX)w?(t@nK^2o!)daPc-#%kvI4VmP% zclD{qtSd7}K|IHKU*BrM254p3PzLV*yobr{@0VLdUx){F5Kox>96(q)*%42Rwl`-P z(xXp*9EQAlc=2O{x;RuU1xZx97^}0aoVFNzzp{|QK6A5fi<9lQ#pOJ{B6FjSwZ_KO z5{hL;W_Dr#HAZPew20kHbe~)b=73aLiLwJkP4nF0WVx}e zvhsq3o+`rhs&&^grGxK%PNf4)`-B1re^+Z z8AKpF-)F&g;p?zsCCuDW*UHCc*GKKla`UY~W|j)f+K?gMe>m`33p^tFiF$BppGwN$ zAAB~e99jevWQgRjTVsUGT)*Sa>Cx6=CxWk{>uRD;}*49s1Od#@%&vtR)qf6V#aea{vtJcl>=xWS5 zVZB!MK`vsTinPcObFr{r=FT9G_N9DUpUBFZ1j`pQud2f$+@VEub@t*UPb#una5`JG zCch{xSR9@IjHgJI#~RuAL&V!8V2{pckJC$Ht9tr zU<0_BHAi{#=#lZ28-NoCV*y91p-blBuEzJ5eX`nBxY`_-3p3&?O_K5r9b2)|XkY)1 z$z7NWDTl4Fr!pPOKx<@UI!E5nK(kpCFhMG2b|>gV9w?&rQ4zm5S|d`}1{A<&_j)1~!j>f~22{ zJl^<&sd&*_AS(_U-%|3P|Q?i878VJQcnaA#0;y8Ojw z)XP8W+Hrm14mndBL^*vOJbn#6lD366Ax~t3y&@W6d4Mo+^kgG zz`M>Q2u(f35d#OJ77A5d_65zONq#gv}t)}+1j|nlCP&UStaqcb%CY8Jp9xTxC+gMJ)AcV(U&_5u5OL>`mHo#y5l(hht;D}Jr(y;M<-jyKNfK|x4$+&IOD z?3#=Yn`uUJRsvBndXG|m?4MmgEPDo@`3GhQR@Qp&?X9{*i&J9N00*L+kiTS85 z9HXKW49>|+NHJzjhB!17E66UUQLPxqngYK#s`5vSjkrEcb?iP|wa+#a7aNp}LxoaNd;)h}6 zM2<9HQ0{I!Rl`AZ==ek3|6tP7Gnc_K^;W$Vbky(KOMnU z&cq&Q${*-x@O3NyjleX4xRufg=dP2T$rWg&P9S~%x5 z<;vOeR_E8ti^${nnU^SZw!)-NHBG?KcYC(rxGTC8!8lm5-08ir4u=;d%5ef`#*YWT z1Uy3R3jJLizPHlO zC{G!Mr``5t{UM|pZOXlIh-y9k94!&y*T5N5A#gIL%_lz>(gx-ak%;~)LhtcT4(-GW z3BJzIkMduwUYh8J@UXIR05NL4_*Ch%EsY``;fNW$&}$aI#rRM309iS$&~bKO^(^E~ zX=Fv6@mCP1UBs1y#raMQTo}8UWx#y-M9gAJ_pS_)c^IDx9Q-B-6^$mGidskIVlTS7 zSR_8azeY2JB#F7HW~x=ulsfMx0s_2PukK%*jp=OXQ7}_edo@0RyLgb%szBlY@ zSvx5p6ACm(5|jmCASymixF0zExeBW~@HVfYW#|7znB!sUFmJ z21K~~j|`z2*TPZ{vn@G5V9t(xfJ`OuqlC_ty?ywmufYv~Jr6T5guH$@f|y9x+w}rM zj)0g2h#G&g`=fG6B7_Ql^-vFhFa0-)0Ocu>6CO}bO_TL&5~JJ_BISI^`{%;Qmnsv4 z>&ZNrq7o52055s{?N}8CPf+;R2*1`c#vAuF3Iz(Ewnzio z_^wQnK8(yIi(N>Cne)F}QrO;i7ueUuPZ_tC@Vgw)_8Pi|>_~krioRjO%Ma8ydCcoW ztsk176+<-cKxuIQ`7B<%oZDCO45%`;nzV&RV=^kRKPeP%pKtUgtA6$^?)(z!DKH4sv++tc>nEn9qs$Beia^x-Ub$U>-99wt0AZdEYi*xDp?GDY^aE=0Q=t zRA`fv&@-<%GYht}1?xbU`s?e6Z92(k{wU=}W2wl$!Eyf~Oawo@GJ0sxC?RMiLFC_u zl(9RFEwD7ucPh;P#&E7CZG_P4-_FQ)9nxJnV(IN5=(BW_|i&6RS`_-TA9 zw<@m6%_cF@vwd({4ugQE_uA4v(^AGY*+!mRswfaYF1vjr4qt5+5GMdKbub@#%7aCJ zjJ;VIHu#UwgCQKv$p80xs(>*;RMGrh8iW|e3HHn{9)A`yrkgp(R#$V>N?Ii8vacMF z_qM|?N&TYI(mM6y6mTXslX)l_DEW~p1nX{_l~t8b|M!PbFzG|XbuVg>8FGZoAkBxi7ScJ zLp{$*Rq*}&>qx$MFYBo2z|*Jqv59=#-QCsZ`2jG>pWi#q5`mTRCTmn_G?0LxkQ#Dm zP^J!bT(YrO?u9oV`cBWM7-vdmD?Zfz!@6a?QUMMv%hmEtTRj`NmZu&g_K-r2B2AbM z^9G$Y#vb*uwSo;Sh(bE*-W}6;5CZ?JAM*|j)eT@_w+}(eQ@f>t%Z{<+cD4@v8vAk- zL0ub}gB*#E;eHSC#_wWITU+1}F_h|@{$0Axf>)?Avqr@6JTK|O_?}Rt z0JimuaQm-}*ykTbl6n4d1IP-={%5bpq>D?uBTL2zqY-VMMk8>WRwROSc?3oDJQS@g zutyyBy7}qv6g%Ljhu8^+Mw##T8EtQOmVCRu z0_1>fF!D-?%V;vj*W~bxFfxK>Ty1wk*~dFH-`So%j@b|Xm9y!k(7bY!IiKZe*=e+agDlJm)lPWEEVb3=<(~tcTs2!2N{UH5s`D* z`_Cr&oDlhEfGAv(hIc7{V?c)8s$RUUTBl=YrU;`nF6J9whEZAHrPcruyo`M6X5SzbZ( zhu2;yQvh77xPo}uTwnQ~T(XIASj4wReC79~0;zy<81~)@sgL#LcLFT{8qD3XLW|l- z7>qUZRluYG=Y3*vvwOJQnLEEi@=032ib)wgI_>KdH~-^O?b;fC!ZjNU$t=07&m+UY zryY}#ey}Q-lN7D}x&1T8FFa_K=6Iz|R8Sj@V=LLZB`V1-do-U~ec`HG%k)jv1-CRU zCG{Kzp6rhMl@#a#4Daf%K2+sUnOm2ZD5qjOn|V8{sq0no;-P;n==Gk6JdXoYM72%U z+7G|r(f0kIVHMs0r{-xt%l;?Wwd`%Bny6tE#;=lcF>S6)~HOR77@f_skkNRbP2K*I(1BocsP{uTq&XQxVtq ziDql6g6EUvh5lo1;{Hdpjzq4Wj)CVb(~|@aIDn%00KNr$8|&-uz(zxE2S@Wp00aRP zARXyN{5*YA)r`de1&I{9av!iCJ<6>ikoZ^)s1ahBLWXEMS4m#xGk@dxV;teZ1lJ(WVKILi5+Yy!c}WgmpjR73D7RbE(8(bK@Dsk zo#(+{?EGfYpt990K3|AaU^a5;)Kv=KE`JcOI@D!YDpSS8X^$TZ)LAykNWXF-{#hIv zXT@UtTh-#+P+R#}`?;%g2%1OURyIm0n3ZWiYkJa!H_B-Tmi(USznRHCi?$>Yuw;dJ-7Q`psZQE=M`xUPuDctcy{)J@1!x2f4jpi1yY3A4R~ z*K<0EKs$hYOvBUVv;<~z058DW;I;Um<$p2%?e`VT2YvEY_7Y4bL5*;1k*E@9e8|{7 zz+g)%E!5favh6|?`^di`JS?_eSl2?wo9X@QV>qEf%c!xR2q`m?lj$+6lWW_{KiB4I zMe_+-sVuOY9<*p7qBV90U5*=^Wz(;D4mIE}lb}R^u(ljRsroq*`&4I2`v)2d`gZRh z9B3iIaRjbnIV&ERovwOd+V>5iVF*@)dJx&MZ_6TtuW3noyeoXa?cJL!3dd3kv`Q|eP7WD$Ve0U^`-4Wj4OFhj1< z-Lul&-Hl!0w{~cQ1XzI2n0{U|Z^4VZxCnooCUh+ zLeO5jcR*{dEhJ{*F_O_~6q4pP63n^9@rQ+eS$|~LPAT#0^p#wLj>Yys!ILTz{6ufY zT;NPxA1J{|2p0<>=O+KpHc?dfU~_;14R(aBNbY<3tGwN(CYI^;6_D#IPqeMq&W(98 z1%wuc&@h@OTZZmIOWMr?WD)Ry_Vxx|PM5X+xB*P_23y-~p230>piJ+VnYtR4dha(c z{1hiuGb@Lv>)Y>7oDV4Q^~nZ0X;!4XV@_E3$jNg@^Pz?h>VN4uWRu|K_nvrO9NqdsjXE1zd18YqT@JbW%v=nK_|o z%CdmF*!!VIfM0c~pi_^G=wCJakfGpW2A)3*fP!s#?3W9fNwuzDtL0tjAS3%tlcm2^CEvC(d=)k#zOYhF^^w zL_tzHkQq>0z2n14N+G@JFZ1o`y>=i;k3ajLA2^%%;J|ll?T;=5>s^}vNE@>2v&Qcs zNWD6_QYP!v2)mZOI*UNEm?qEu^_qHwrV6;PfH41%g)*l*svF<)p4cbSi z5D{ViBfJoY7C&6*+r(vv8{@U}YZfO)8pn(<+(LGrXFL(%S|8i_qIDr&N*mWb@VFzG zb}>b)Y0^1nqWsibIK#8eJXG!~N?G0jd^iW?QtH>yBfEwr$s>sF$M`#&23YRM!KA_f zUrL7sP`eweU$`_a0iC4>U_Af=BEq(YT<%0c^W28mK|PgBp1j7YYqh#|T({}c_&{&~ zXiK4Mxoj^BQ@q`wwm?c%^&w{W@BxY8WUeXZtzcB%d% zF#f~Mns4IlGd+@fr@Hm@ddB%)LG-#|10+oIxU8wMGXt9#N-r(G17X#I-&P&GLM4r# z_K?qr8EhfG(_mE$dDv6xH2lxb_WB=je_)1o1GLzSzl03=8m-NL)j+LWP|{Uv52o_> z!;n#hwS?*HL5HKj=PnOQ($cCU&fl1N_)U5|{`R~o;o!hFG}wCJ>p4>7s|7F8%^~9; zBc{&wag3+8VhTCD>pbZWA=~vG0wnQWqDwdOopQYi0d!CAr}H38@wa=c0Ph4!ACeqo zEcE2|E_=7ly_HpJIZ)leR^7nAM}n2l+g5EqZS_1a+Y=0IrM6XGoXfey zdGYIuhKJ6&m!ItL3XExaj7A1(`%fZss!l}C4>?g>x?`mic`$XJolP%n%$dh01XIm| zPfWi=MSE$er2R##v8v=nrZc4HQq}!rmXz9A^us=aRKgyi7L>mz+Xpn?#_tGI0&x40 zU?Q_r%2g?|-t%6RI!bD2M;+Ea-NAs^{HZYxNnw(rW7so_o(P?y=Wz@gK~0hSwrUK( zp%=^x&NAmV;#fBBou>v@k0yRV^Sw~f{PlX;TnT3Tu>m8|5|?rP`%X27kd0Csy6;Wz zHtdA3`_x3BU;be(cGSx(W|OpG0g=gsJgA$YZv#hiFKh$d97dTyN?o!2VuBt51dp}J zXQCCHs!dl7L17DfVSVkeD{iFIelg{L1UKIVoIeGI8R_%KT3C#L_1)>CNv$4=^#3`W zMITN<33!Svc`JSlTh?dx(taKPd^%+<@XTiV>qNI5SE42{u-$sZGyk%3jIlLD)Pv&v zY4c&vdB~oWgW=;Q+E&6+z?o@_>3$MZ$9x4!tY)O<_a#$_ts=2#v^ zS=pZim6&kqgFn3O-is6FT{%kY8$|prM3&cZKxA@-K*3BE=3azQrkwDI@0Zgl9Ab@Q zc65{k@$l3!>S@{W+ulTaQL<3#kX0ThN-KMLAFM(9_Au>EpB36Y%(Qgg3$3c))x9K# zB4+4<$CpsTK=s~Ub6#n;PTgxbWY4V{ecykM8GojmPzq(Yl5K1cN3rat26X3N9{r(f>b=#%f1Q#kxGGlub51&BU81CxKXHW}Ruu7}=Xeib z#TZ+=zX2q0QlIocEC9Sm-VZ3^bFd#v0}vNF4gd8I&ovnpz;sql?~fV^V1-5Oprdtf zr+e3j%@8SwKf=QyQKPkn=2rFKTcvLPi%dHz9SyiZ9{ZCaC{#1OGNX=4zIY-!*PG1R;qQtLHyQ^NsP~pF2@$;fwx%cMv7)YC>QjHlII65s!qm`IQy= zx(Ptq*Yxq>e*h)Oe@ZD6wCLWhF9u#H{|TN4I9A*Kwf<{uX#QNgZxAPsq=hDu}aEgAlI z6Db(RL3u3>LV$O)1DjY9PvWR!r?{;)ul(=jSK+Z?h#@EQP8+s~5mB{_WPrSDT5tM< zy`G}6bqC7#-$UzTyMYWemKQaH0?+5)ACIpHs(*<811ZE@7ce&rf{CXUQ3C72`j9SD zGhqO9zoR-rOuf8U|CdEqxerfb7r#7!B;tHeBE7PjpyJ^K#ZkP)aEli-hbafxs$B0?}~|XAYuwhDdl!inS1*^wf0{PB2btoV)IQ`)8S8A{|ksZEb-_BvRL}yx!LOkXOz3+JsX*6NKeB?QUd%LJJagl_x!j z@x{q%&%;OtmZVQrUxnmc*i9qQ$L~sfZf{ku13#z!(5)R0{O&C9fTT8xmI8@kdemyHZuQZRs+p0SfSH2u#$TQ&}T?fx!r3@BB)0vgPM)Nj$^EnN&q%H08G(T5fNOY3rAV)>iPxb${qO?WXRPgchaE z>$Mkc^x<$0&2|t#e*gU!_4P`k>Ied;&>xQ;AV&$fZDcNKY>|UeLIF3kAhIb=V!2WY z44&Y{G@uppHJUbT?bt1m^jy2$zj4UgJjE|#I3(DfeObjVj+Hm{NXse};g=BJo?)P1 zZEkBcEnD6oUe1nRH2-{_bKDCX1C$G6K!i|o$fat2!1L_brO{`!O5x6ce5a>6=tSNd zbb$Y61=@=xY2{mxf3*%>tU=TS>aJ!IrGUGoG(#oSUnLoe0qO^G`8rCF;P^1!IGZp) zdwKizwKG_)^0bnKCFY9I9&5{zxi9aiIDCpqZvg6sN}Njf%-q~(94u&``7h1@FIa%Z zuShT`(af&Czgo*Mk|jJYIHpTgs|`GJqN?Gf@N^|+SWI$rHtDbCY0SIlXtGKubSFBC zdSXn!^E?d~(1>+kjEgKMT5DB|sSCO9ZgPEPMcQU9m_6uYEO6#Q!%TVV!a zq8Mo*!QWR~OB>Hp)>A1h64&>KdZphsgX^~?MN>36Mlv%`PW3>aLg@peRY%|4ERkvz z5MFl?8?9b$5e6Rkf~hOoQgOl>i~Meuga(kB!|f)4#r?OTB9{;_ZJQ(NMPE8%smpm+^}(26u}G9u7~{ zftW@=VvaGN-j~><>_1EXGDl$|)gw?6mI&Rt+1Rjlpxg3zrorOGzJ@d3QU5{cAjE|x z3)W%6L4q?v;~qup^~{;wpTS~v2%Ikd?899&ZGzN&f&W)(vs{d_G&k?#drzb_&7u}~ z%f=&BfP`m22r-n)lWO`!zC#huQT(k^%%54<(CSrDFomsf6JhkOfGxLkA)v{(w25;H zwN+FI5#cZ9oWrcBdY#HruKAKwZLH*xpbEQTbC9Td|)s7BF`oah4XckXvimg?Kt z;p%{-QMTFOq>57;MZ6-KM3pGv&ye{(+3l{xg8Gy7tK_sC#WU?5xNPg z+k}iiv;~9E6?4#6=K6gm_UYHXY}P;yjF4!{DRH5Yyp6$M(?NcVKVPkCq?3ch4xXlp z!Ownu!<5B8CLDNsyrEQv$eL1`2qs(?=y%u)6wY0CFZsO*^N}}$;9clI`bdGi=L^V3 zzMyC8nY%DX2!~|A5^oPN1+D#+H(&9n~;zwI3MO7w?-b!x|4q0uYPbjsa4wB za;=|tusq%&Az4wo!lmok+L%j_BHkvM*Fk@{X??(nxJDE*S`R?cJ3g6@@MPC(@3R}z zD^26U&GtrtRFgROaeA|vOw0P4Nl(My?0lE3vgMs56>rQ^VpuaS9Kga1l?5}WE_D`1 z#%Qxjz~ec@?LWis{!<=P-Y2+z2yckEBHt0(Es7%lZgCwF**^3!aQn2F+cywbHmUIj zTpH zwB_O*Hz$drZC398Bnke?bfN2gRfvDgsBNY$Qjm{=(qG`sk)zs**AvS3zXB@EfDyDv zgbnkN5$xT(hu}dgMB8S!%#acznp4GINklS2+$tB$?AF1wX>2>+JT_2}-Y$5O3&34V+qS7`cRJ_sj>5Y_ zV)kD$UEnL~zFI25muln5rGooa$Yj!-I>7iLSuweMrjIDyw1ba9MXN z3TtbXEa%6&0{q#Y>X66VCebrR6dq9a)#rq1Y?7y9wg>%8ren-;Xp3=%+RB8t5Z1HT z&nigpTs+hXa9q30TbN%|=Vpu9Sx)ds&rESfpz0o2&jRo(pUi{`3| zx|Q6?G2)v!6SZ#Xc>W?zM*m8;r&|mWcK=%gV^uj3LU7QXvK%>1Zf9f*O9m`XqpwBF zte)Q4OdttNMEsYheOQCsRZ=QaC67KUUjEDbzgp-jWHO3ueuk@?lSHruW@|DN%@9g^ zxC&vOEay&tiN;_KkqWz_J^m~)q!d*!Ok~8YnI;!Z;fKD0V+S1)>2=h&8FME(u|n#&3N1=_`aM$H(EH$yej? zdLZG+blBxAcXDg7ZBDLg93@xDX0KfDpS6UDGdqd?SURt%eIDRxm5hcraF^NE)h+JR z!oW1bbuX=+cyfs7g0)sHkJzr;w6|63ZpvcZ;BxlkZ_I;czvE=bhpUN`A>ibVpj?Qz8^|0ZrvTt;7WfV+!%7&7@3WFwh1T)ktZg~ zaVfYoD`S6dK z1qlMtILVLuiZLWpvkCT3w&q$rEE&*SC5{E999tn>i}!-1F9>5I3j=21oTL}UEBu$C&7Z)o|- zPko^bT?Pn?$Kws2D$~;C$>8Yh^0@IOPDHV+fvMqFTZs$lp9+e!6#l^Z#NFP|;LHQ0 z^dE9q+~kN%W8|Ncoo?{0tZHDWO0>G&!Lm`|Bev1h^Nnp45)h16l38U5f-N2{)tCO*a5RX8>W+5}}GC+CF4?K7Bep zKO51tu(p1aFQcBL>*?EyEW9a|T{Nd@k44JptJ-)Dv#Y@_yDyKPS?F}TEk}Is=_@@P zB(?|pJX#bBKzi6MH-sx$i~rfcaA(s-vp%wHD1P^rRh1{k!C63L{fZ)-V;2Fc`(j%{ zDjq%&8AI^&UD(pcc6Ek!KByMT8-oiX1}2oQk5l^Ei0L7A;4>vz7+B3n>yEkpD;-sMRBnVef=D&TLHFw1NUK0M7$X2uRKExjcw-S%yq-`>QgjM3ws7F zQLe(%wU?#6D({Lo} z_qWI0eJnsc|q-Waew(NHv< zu_9+jo>%?knqKLU;VTD%%*Rl(D_1SdGkA~jGo;B~8tYt_|4c1-4aG{=AwjwGA8+jf zlOaBFiQA+zk>fOcsZdPw<%F{LgKjCeq=GLc=9eFg*%Pe^pOkmgzgflXgq>wx@n@RU zPy1=g8OrwDf=k!Whc2+y*{LY-uy2dmMir@uyCH_u8&e$oeG7ts=9)z4BQUa%{6Mn2 zz9)-$P`hQz_yjI66hXj{w{f~npaL&7@voKpi}R=9TGTyV65pPu{sH%8CcJ@{PK=vp z)13sypcZSS>YDFYjP)idv&m2Q3!iqy{Sa%1A8l^r5}<_##4cP6Z%I&(`ytshn#`Lpfu{vD}B~Q^77+C*4ML3 zY-yTDZErb53h7Dczvuw@qWIpmlzen8GRDuYO~92*>y90FD7hB}(9(9EyPqRFJ3GJq z0QS#Mc8Cp7#2l+gw*~md;H?rZGn|5+|GqZY#tVFEiyaa0Oz&x*kvWSHF`)T}cGheLbN*{3Lf)aE6fa@>j`3ELpn zdFMrkC_@a^q-uNKGt@FLdGYlI`&O){#M{PKGaODvk{GjRi7i)TN*rbsXrFVCCUsm> z;UE||q?Sz*_xgeV$J19vMcI9CD4c*;J_YA2tNH?e;ozfxQDS~u&cO#8-cSs}M z9q$d#@Be<953|;+HD{f(_Z2(ro^$Pdo%+Mp~+TnEqgE@8-&My_a2nwvf2(zH@ zGcP*3Uuof0{)Pj~OBT_*hrz&R!HVKrzcN?O(S7>=pqB?! z0~vl5Fb(Jkzx=Qw0}hsy=sBA4pY*QJ;-ZRvcN*U10akLF-bFc4nFe`9$2{Fp4$9HM zjhz>_ga>TQWoqqK0ds`LVhsT8s%h}N7SW8})~a^uSF{w4U>7@MJ0UR5^Ppe)M}<$kM;Lp=tfvc)ma7gUc=Yc);{XP-HdUIx|WK=KB+ghL)N3l3-p`QSnx5A z%yEqdKYclqXvj3E7V|ZsA>QvVh`dv)m#vELE z-V-rA5>stCJTe1;6Z1!6c`BklC5yj)xGrROtg7r38gF!%d{7+4EKVDHM!og?ND)Zk zL0rh}Qqz9t^c_Jz=A#vzyCoUc1x)4Vlm^Vpo*>Qa0c&6}75ePWl=ms>C~J6E@?GBx z_>S;eYCh(UoH{!H$_184!!CyWaOuA)L8MLZyb&U`@-{anKC*Ex*XcicJV59BGlIS> zfQ>)jjcV2nJAEPh^8D4q0h;y8J7}E43PY;#l8uRP3^S}#T>d!X+jjr%B@_9% zwA3<>spIw<`yXx3c2-#QfASo(FU~uIyASC(93k>i^4&{bGICHq=pa(WW4*gu1v+EO z%C!2zWvHW^k3d6WWR9|`Wg}l#5dWn4ojnNbzF;3b>$06Bz9bE9X?{7sVsdcbj)ad6 z=Z?f0dnE;-NXLj9_Vov{GYwqmC&>59{XHR+`s%Mr#ESDwsc`%cYWirF3jvwPXQUud zf1|lly@90wjgV!77vWtgJv4vIW1z>Aht|>KPfCzuCND)1cmKn8{?I(%lck)PF8sMH z|Fa3j%Nt$w3lhd~W%1Mc!4WpZx8NoS<3@L>FT4fxDa)*@pzesN(foD%E`v`h z)?nTAP32KjyvCGb3m{9fCjJTSIv9rE+paUieJe{{v)P9OgDl&N-nvuZLDr@3SCEbi}jgd3pVnDScX_bJZ0s$uGoh+ zC0*`%w_N&9`x9)ROiaoyQ7;=Te*JVNgHG_V{YMAro)G1!025~yOcI%2T6*}WdQ5v#2#3`;-amibnv9xOhq~-qmCKU0o6#ML zAIxLIhNTIP?y%gMcdg9Mh{HltN9Aeyc2q6w8eK0YL(m}V=}{J2zxJNN5QZ6iCZ~nz zQ*G^SWF@)oS&TA18ta{3rQUSE9E8592F{%NeEP2&7J<{CG#%f!ew2{1RAu&w&)U^r z)TF9Hhr)Uvdzff=q!|1=WKumtt9ObZ3;WB48EA`O#k#;d$5q!Wo#?_-?ZO-C<<9q! z`kLcsjbV+4j=(G*3J-m$g#X^pelt^)y;^d!1b8OKG>^;4GWdOMEJ)%%^CU0 zGC@KJ8d9094($jgRpi8tWlD=QwIpmpJN`g7Oy06|(Ba})O)f{AwwUgdm9+w513l>q z>El$b(nyN4!IaA6`?_+e8Ym_^T&H`P{MCt&S+s1UA<|?vrsSj|$nF|kd=RP0G&m|h zW&u)s-c?K zIX134UD4$HTl7x-w~nD4BMh!BDFgK-!!$wD54yJO5=7e{R%n-hx@3DC+@@_MNPmv{-6qqa_54NhUYg z4A@>L{4t}Dt9`!G2B`rvhzDQ{Y(%S5uI{C34Jt zj|g~qip=Y@p=k#BCRqy8f}Kpu1X$|=VB|%`01*RW3_ByB8|9f}cGNo^Enj!<-a(}e zu5T{?JE9`0fK_leme}ctKZYFzs14=885peBYlqa34HJB_g7b83W+7=l(lWI_-O`Hc zfLwAS$yejsViZ8cV(vmoB=)&~EvDLil$iNbmF)@Jb3`VO#SdPf7%N<@H{XwYv~>>} zxQ!o%H&3)kO`&(EN7!3lfG$~a7bmp^prJ5NvMIKGKZbsic(V8BML3|XJIj1bEKzh2 zHeU;8&))s?3Z;oq^{*p;iALqt>IhmS*H?v znCuGiK~M@bNDA3w2v*_zmVq|PzeF_PajJAm`Fc)HtvL4D{uSGW*X~PBTBN3r;)UPa z+j}OR?Tf7*cTx@qaxjrV8}KqdaDMnuJQT+FQ>% z0aWNUH$U%6A0H$G{E%EixE_$U#d!6EbyLcYr^`K3Pa`w9xC1>sC^V@v%$;IUS-ceX zizfe?w}DqfXw*X6ReUo}hc=ZT9lZ2`SLf+reZj@~Hq_a-+|M`^DWxB05(%%hrw&*0 z-Y8oV9VXwwTb4G(bJK*49!d6IO%SPhzr^q0b~Uc0K%q01-YiJ94jQ|0LGEH93h{n- zixQ$7)8?10@td6nkM7T3VUv^ZT|6mm6j}(osE?}kt5T+0-E<|l8Q;n=6E~s=_(Qol z^Br+ciAn*0*G^APc%j{F ztg+H-gnqNUuS4%Vv^S1UHqPW5hHg*XPsx>->{f{D^y^I4^Kf6 zn{;pZfLo*mwH4@w`}e+Wf;rIweKLJxUinWpPycoy^hQWw5ejDhfQW(WNDuy3@nrDB zX&rJRJ~EoRS6QoX+83!%)&q%)HKS(psKI@R4^p*-@=HR3jS@f@ZW^+k9JH$t%LP#f z#Wz7df#V@V_UVvOMQD+C=$mf0=-3im5HAO$l(M%B@x~q>wa0%i?_BdC6NM02B=Yc! z*6q<^U&2LfB$)yfNy)2BC+&2W95r580_*vx8vg7b90=jqG4_aD18J-Spz<*UV&)bW z7VghrfR*N1{$dZM3Gj+^ce-vm0rK4;5by0$1)F6lgJl?_fWLje&T;yb^XEOE^MQCS zgKiNSp@Q3W3=z6}Z#ALnnDETM_7aMjwr9!XySqbO8fo~SbQuh7)!)sKS^kU9qi9Ft zgLO+RZ}4#l={-C-DIuooapKSb!TmqE!h?6%x5 zoE?Sz)*pHwDns$Be(lDZbY7JCnG2lNY}U#XtreF7Yn~6QKeozCzJ@16j(u%Ac)9I% zXXn*`17-DzJOo7!Tn8YgwFnqj)n(zkIqE#k`M%l`BP6mNF$JkTY@H~7McrSU$dp1v zRW){wqy%diHb;zD8V4yna3mCGqOfy@Xy3No@G)zr8kjO`EGuOjK}-#Eb4sV!oT#%o%_E+$Ag?5#&EtnT|SbUm3 z1kJ1<2V2*(6Lo*co$F9-O-n`1GL`OvGBWw$@Dm}Icoy8pH@N{?2zv@+J!&jK2gPYPxjh$Ko|&?oTJL(7-EVgx1oBy!8^J>_|UveSMbu$#^4o?hC`-$?nJSFp$TVi`uJG zYF^JaTUzYt_o5J4A$J~Cqx%CEMP$u0ms{R#b3qhe& z%0FN%c~~Nh)ljH!{6DH=@HK5Qsd#Zlh$#)S&(!UbiZ}m;*^)lyHvc-ze~4eKcm8=O zk=wm}mf+$nu8SPmI;j+pu!jL~iv^PEMB8loHC%o2r)-#bQc~IKIv}GHZQ%GSqt(NVA{Pix-BEw zce!KMP(FbgM+^kW`j$1h_2?Ez_CED4w=QO&f3tfXrbnH+c&Hz`OyWxTeV>9nU^apD zd-`kLh4N;?zG$SMvs24F_h8757i=6kzdObUu3W`hPRgQFO+u>0h4RuAE5k>O%eJAzw(OtM0(#g}I;+gng zjB&lB@4A;1zu-tUbCCR-cfFx^p7-74A=_g_DRb`B;6yO-H7-4!9^WYY_6-n){?3%i zsMANK*6NVUaGBJTjI_B2Jjo@@eQ01>1ck6D-<+|CBC8zp2#s z-NSaIBIGLKb@(K|G7Eb!tzLt{I5K&1SYZ%i@i13&!ftXB5%qHDKRnSLG?LEy>`Fo{ z_56k8ykJJ!K4YZL)E51XNB*4ex81K*e{3lW{M1X$J!l^GNIRP?Od|8cRl+fPf6am7 zU5%{riOYps~aeJ4gDAYh6DAi6H$hp5EeYTB8))y#8tftOR zU$;%6R;1RqceqFvfg!7l1V2<X@0ztk;ypru*3E2uG(sVUuN=M?(-=D6RScPD=${}J_#g?2X!I*4)ZhP-$&%#vJ z3e{v~c@7(@$Mxi@@QJO&*o1h-G~4=TgMiw_b2RgfX)xtOfG6%IjuTG=d1#kZ8H!x3BpPL5ED>H;gP z4;e?uS2M{wQlj}MO)H*SewcDO8OALOHHiXtF4y5Nj3ybr>~t?`um4y|)isKIBc@Z4 zXa@g9+P1@T^+9@1!MEcQvS>rfj2Eg-8RIMg6HKM)g|Kh@NT5rPL=U7qcPsVb3XhE$8eUeiy#Y^!ow84A>dn^j{(sGBYK z^gsGWeifv@^XZ`yV}PB$N{wzkIZbEBGheWV?snZC3!W=UK=ZoYSTWdGkI$4O)K7#~ z{U~#?ZtDB#L;A?&epoA{M5QA_?L;cjDQVm#>d3}h9^|&qJY?m#*IwtT{GmiTxr@;( z^frOc)1hg@-;f zJ^lDq<7xZ$%14IO$an+CkoyrD5xMj)sSs+4Du9^Alb6C)JQV~EGfHghQFmmWP7>mb z9`FnWlumed*J#mEy|7wK&U?wxQI-}iQl>wF<%=BEQh%~ko6`fEIefU=J#Nw_8rS^D zm+291k85ox$b2f=1Uqv|2@zn0*gka!g>agMQBsf9wpr=Gba-z-C_`Uud7Azz)52rE zFkK3SNM(7|FCyZJHyd{E z)IG<9eWx|9p2rTtdd7MPrcKn#biTl0u&}4u?zMI;if8Sm;V+C{^Za~Qnfmqeu8!3)=`k$_+-OP2D6gM>gjP~PHV0;0Z zzXMYW3lv>-hK|lcQDmA@GFnuTQoJId(ROC_Z}T}`G{l1z3mTb#-y}VjP@iJ}fsEnP z4;tatlgz5nIg3(6@JS>AA>LIml)WQ!N>9j6p81Tx}jJey}2@htSVm$y7OR_kWOBiXgwJeCiy#M-YRJ4f*%S(94XYYCzUWR>MS zsBiA<%RQx_`tPofg>oKlw@|PWFow!m3bTKO$22|0$v;hH+0=f9=tUcKeU@yOZk zaLI<7+`}*QR|jq*q#mz606}JVsFCmF${(R%JT=m%e5VY97WGt}Gko zaQ3W4O2!$Q#espl}4!DZe{gqgBO>7|B9vxdyKh)qkqoo4LoM3zd(o5 zw}3$;g3QO^Fr&~n<(t7>3jbVj2asX{|M)WsuM|WBf z_l9=OL>hj)-8dd#YL+I4%&?=-=CTFV)Z0hGGlP{{I4THbPO8>jOHaceU~hIGTQN=x zuXjqXkQG6@^j1+3(tx79nW$!siPf*6ai{y;-yxOh4B;uLlzu%`%ztnkQ~0+nsXz#S zh&1dZEkNHeQY&37CH9tqXaVcg-noqw-;slOJ_*4Z7!&LnA$ z8tRT#F>kB7Vy4?#qoQ7oYu3=B?xgM?E~KyQr0|HY8Sa3?%M9`05o zPw?h`pn=g5e~&}>-N6C%OX9-}vwHVJS0wa-^XP9^BvL2(FMMl4*sz}~hDd68#7rZk zpnbUOfLu-o*lg&VVGU4HYRTv>eUhcHbM?+|cNo#)CzK~#1*Fv8n<#JqlZ0Wi- zN~M8d1$*VU^pdY7iV{Z+OxnlyYG@A=iWII$^fQtikW-8dKHr|*$t$tK z><-6v=t{|fQ}sybS$@=Rt&Md*Z*@SJVqQgpKmL1npt4-qA4V1QZky=<0;@)iGs+D@ zzEkc=SMFwTW+~vVH2tiV7h3L)b7+02qJu)XB^1VSC8HD-EsnQ-LMHqGy}bH4CE)j= z>QJZcQk(N{+a`cWFSz^mb#TrAsFQ6io{B1uu$nL;QOuhYYgppDQ7 z@V8D9?YwvMBPtTG^y8ynJVQpa!P_MqnMt7{Mx`aDlTu>tc%VUJm6?Xbwu!s~D|=iM z3jdt9CyxeW<2*$!>kniq#tFgubM2otl?yWDK)dhbn%tte52n}rDb4g=tuAlRW1CN2 zHPJfu*AsPGxZmvma;TVh3WfdeK2ZRZKPKF|7ziFk&&2`j77IvwG5@7KrjZ?ZB&aTRp5%8F!AL*4?=@O*fJfkAa^q zx@afy`*3l1(&$;{TaL{o(;bFdFc%vXe?)~r$v<2k-&nCe0&u4f;3fOjq`vCUa1@89 z9Txk}WIXj-Cu}?&HmK*@*c4@$q(yYvduQ$<+m*;H4voNVf+A~+`Fy?|M5bMPmhh;K zzq*R^!Dm{fG;Q#Q?s%%sn4+bNiNe>zUz28#q$g2oD*GrA6}C9zc-2Je)J_vzYak<3 zND;l|(0qL*4=ieo0PF&iuf8`krJ4O*HG6qQ8Jy!M=NB9 z`}^+t!$C~6QPadqJyQD5^_jm5q2TY?w6N#4gh$1LN4*ghSVKG@ z<;V2X)TRvyX&%$nihMnf$@AM@yNe*jeNHi=<2z;Z@5e;Ql-jLgnelcZ$BHs+2r_z# zKNjBYYfqf6O#Vz+=ypxw5tHo4W+#_au84vl@c2UEH;!Pc)A|x!rY*hi<)p>VCcjyc zf3&-t=CG(5mXgT9pyFci*2ljKBK4`KjV!88>aw8k1DCZpS5UpVqkvO3Y5ec?QFa~~ zd$DYM1SW?GV*x&|KX80#{~aGK$76)ua~Fn@Mug$hJJ;Wo_=5^{wY8-E1U3?47WY-j z1m;%?pG!N+vP@2A#{Ri-PUk`kg}ok*37aJm-8J>9a__Y!Vw4V7hf^1|S^cBVzJRJY zUI(m~XKPnP6+7c~*cz|ko#^kpp-@s`J*V2{(i}@;b`|CD_Ivx@853R(Z@%a3OR=0A z*Qo!h*wL+3sn^u`VQ-cuCq)Y0KoQI&iLLwFPzIaSyh{r_ynOFta%6Sp<~IXE{T*;C zSv?sNw+g6F6fH`VcJ%%4QP-Qd?yv@MA>yeB`4}^~?P_;)ko~MtToy`{K0aM-QsTbY zUWFtMg8w96iuEHCfbE4CqLBe&!Uq70tHb;k%(MO&@&!CJ@iF&C-TSUu??3%sG45m9 zYM-BNbD)7K4wZt37i0)`WWaQ|J6A*$D$? zHERodNu_I;hUvLFLbF18r}Jr>^C#B|swBy1I6nOk38)tcn?E>hb*RcwFoCM)BXr>7@EK-u6iF}R>xjULZm)k`XA-ar+bHTSUkKe5B6jn>{q`0y*w z7^VDZHtl*2Tf$;Q(%sO)6TA#P=Cv+3Mv3yA0$bQ_KLi5Fn=(gNy)MvMaEEwdx()oW z(rmPp&l$pph)TW5EB%g^gC%|c?n5{t7x|9nK`3ghi2JR-_*%<;%gTSS;9cj@d-NV~ zCR85w3FCbq*Y^x=R-Tt@)7y&u8KX;HMf}mlySyVq-JR zCs@Gg&^-YTdnGFn2`DMu+ijTu;yx6(Rc{1VM9TVS6o&Pv^#UwQtLZ`x2OR}jkj}i? z`2|VL-qKta_pDZ(8!^fL8k5; zv3z!LJ4YU$A$$m~jvlUk+!~Fe(HmTbWwt_R$f}+p=uHEK>_pb26Nl$xW0i9UoqJqfrW`E{x~;%wjxSC< z+EWpb@#fdH+KL+rSC^Yf0stU)QR=WrxJz%HZE#D)%f@4HK-7XFAT*RFEz$V~R^v;HdTWN4@xj`PNMr&2zF*1;np zF?GDpA|~e)D!Z?0W@^T19Pik}y274msAG=BY}HuEOst$2^C^JxTg%MZ1o@_JXi zjJisGX!p1S+VxFmL6NSt%zm0Jt<@&3iz_|w$?xAWRF5I_j`kUVQke7^Ra}oi44TSU=PVfL~;}psnPn= z1P{~0RLFkavX143X7lmP&yiT&qf$9-itbp2dEfmTig~t^qEA;e_V251<4!X@SBb+L za@@KbXA?gF$mez>;SK5G{-2pkpkD5bJaCS_$31$g1L3Uam_EpcGEjq?)F-Y5Q;#0} zSKza1^LNtlxpeq^PCOUq0LyM?fr|``55^aBp|5j01!zz}u0FB%+&07bAMf3h_#hw9 zV1a_rcOT`Y1+EZa*akX~F?>u(H4gRT`0AY!0^~jtwhuZGANsPrLCpgd8iu71k;RI4 zlvq!rhw%lm7?|zyEw<66`MyCq*?a7`xsNh8$B}%|7Tm#}X_;?=Ro>nctpW8brMS

    Y<7EMFhE(VX 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 l+&-w>@7lVEk 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 literal 0 HcmV?d00001 From e1f680a6dcbaafc401f1a8f6c5c30b18336e6c23 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 10:21:22 +0900 Subject: [PATCH 25/40] =?UTF-8?q?feat=20::=20=EB=B7=B0=20=EB=84=98?= =?UTF-8?q?=EA=B8=B0=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyRoomDetail/StudyRoomDetailView.swift | 3 ++- .../StudyRoomListView.swift | 20 +++++++++++-------- .../StudyRoomListViewModel.swift | 11 ++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index d879b466..22fcee48 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -57,7 +57,8 @@ struct StudyRoomDetailView: View { } .padding(.horizontal, 24) .background { - Color.System.surface + Color.System.background + .ignoresSafeArea() .cornerRadius(20) } .dmsShadow(style: .surface) diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift index 3d1ffc8b..a71460fa 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift @@ -27,11 +27,10 @@ struct StudyRoomListView: View { Spacer() .frame(height: 10) ForEach(viewModel.studyRoomList, id: \.self) { studyRoomList in - NavigationLink( - destination: studyRoomDetailComponent.makeView( - studyRoomEntity: studyRoomList - ) - ) { + Button { + viewModel.isNavigateDetail.toggle() + viewModel.studyRoomDetail = studyRoomList + } label: { StudyRoomListCellView(studyRoomEntity: studyRoomList) .padding(.top, 5) .padding(.bottom, 10) @@ -46,11 +45,16 @@ struct StudyRoomListView: View { .onAppear { viewModel.fetchStudyRoomList() viewModel.fetchStudyAvailableTime() - tabbarHidden.wrappedValue = false } - .onDisappear { - tabbarHidden.wrappedValue = true + .onChange(of: viewModel.isNavigateDetail) { newValue in + withAnimation { + tabbarHidden.wrappedValue = newValue + } } + .navigate( + to: studyRoomDetailComponent.makeView(studyRoomEntity: viewModel.studyRoomDetail), + when: $viewModel.isNavigateDetail + ) } } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift index ac2ab062..f31e5654 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListViewModel.swift @@ -11,6 +11,17 @@ final class StudyRoomListViewModel: BaseViewModel { @Published var isShowingToast = false @Published var toastMessage = "" @Published var studyAvailableTime: StudyAvailableTimeEntity? + @Published var isNavigateDetail: Bool = false + @Published var studyRoomDetail: StudyRoomEntity = .init( + id: "", + floor: 0, + name: "", + availableGrade: 0, + availableSex: .all, + inUseHeadcount: 0, + totalAvailableSeat: 0, + isMine: false + ) var rangeString: String { if let time = studyAvailableTime { From 9b38fcf8c386b7084f33ff04f0181f3aae3e1c68 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 10:32:42 +0900 Subject: [PATCH 26/40] =?UTF-8?q?feat=20::=20StudyRoomListCellView=20?= =?UTF-8?q?=ED=95=99=EB=85=84=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Component/StudyRoomListCellView.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Projects/Features/ApplyFeature/Sources/Component/StudyRoomListCellView.swift b/Projects/Features/ApplyFeature/Sources/Component/StudyRoomListCellView.swift index 5881a26a..28ec5c93 100644 --- a/Projects/Features/ApplyFeature/Sources/Component/StudyRoomListCellView.swift +++ b/Projects/Features/ApplyFeature/Sources/Component/StudyRoomListCellView.swift @@ -25,7 +25,7 @@ struct StudyRoomListCellView: View { .dmsFont(.body(.body3), color: .GrayScale.gray5) } - Text("\(studyRoomEntity.availableGrade)학년 \(studyRoomEntity.availableSex.displayString())") + Text("\(gradeToString(studyRoomEntity.availableGrade)) \(studyRoomEntity.availableSex.displayString())") .dmsFont(.body(.body3), color: .System.primary) } .padding(.vertical, 16) @@ -34,4 +34,8 @@ struct StudyRoomListCellView: View { .frame(height: 68) .dmsShadow(style: .surface) } + + func gradeToString(_ grade: Int) -> String { + return grade == 0 ? "전학년" : String(grade) + "학년" + } } From a150cf668b8c8b9f1058dc84c4b7c37e7e53aff5 Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 11:22:48 +0900 Subject: [PATCH 27/40] =?UTF-8?q?feat=20::=20toast=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/StudyRoomDetail/StudyRoomDetailView.swift | 1 + .../Sources/StudyroomApplication/StudyRoomListView.swift | 1 + Projects/Features/FindIDFeature/Sources/FindIDView.swift | 1 + Projects/Features/HomeFeature/Sources/HomeView.swift | 5 +++-- .../Sources/ChangeProfile/ChangeProfileView.swift | 1 + .../Sources/CheckPassword/CheckPasswordView.swift | 1 + .../Sources/ModifyPassword/ModifyPasswordView.swift | 1 + .../Features/MyPageFeature/Sources/MyPage/MyPageView.swift | 2 +- .../Sources/RewardPointDetail/RewardPointDetailView.swift | 1 + .../NoticeFeature/Sources/Detail/NoticeDetailView.swift | 1 + .../NoticeFeature/Sources/NoticeList/NoticeListView.swift | 1 + .../AuthenticationEmail/AuthenticationEmailView.swift | 2 +- .../Sources/ChangePassword/ChangePasswordView.swift | 1 + .../Sources/EnterInformation/EnterInformationView.swift | 1 + Projects/Features/SigninFeature/Sources/SigninView.swift | 7 ++++++- .../SignupFeature/Sources/SchoolCode/SchoolCodeView.swift | 1 + .../EmailAuthCodeVerifyView.swift | 1 + .../Sources/SignupEmailVerify/SignupEmailVerifyView.swift | 1 + .../Sources/SignupPassword/SignupPasswordView.swift | 1 + .../SignupProfileImage/SignupProfileImageView.swift | 1 + .../Sources/SignupTerms/SignupTermsView.swift | 1 + 21 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index 22fcee48..83846692 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -37,6 +37,7 @@ struct StudyRoomDetailView: View { .navigationTitle("자습실 자리 신청") .navigationBarTitleDisplayMode(.inline) .dmsBackground() + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .onAppear { viewModel.onAppear() } diff --git a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift index a71460fa..08aa565e 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyroomApplication/StudyRoomListView.swift @@ -42,6 +42,7 @@ struct StudyRoomListView: View { .navigationTitle("자습실 신청") .navigationBarTitleDisplayMode(.inline) .dmsBackground() + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .onAppear { viewModel.fetchStudyRoomList() viewModel.fetchStudyAvailableTime() diff --git a/Projects/Features/FindIDFeature/Sources/FindIDView.swift b/Projects/Features/FindIDFeature/Sources/FindIDView.swift index 3793bdf2..64d0250d 100644 --- a/Projects/Features/FindIDFeature/Sources/FindIDView.swift +++ b/Projects/Features/FindIDFeature/Sources/FindIDView.swift @@ -62,6 +62,7 @@ struct FindIDView: View { .disabled(!viewModel.isFindEnabled) .padding(.bottom, 40) } + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) .padding(.horizontal, 24) .dmsBackground() diff --git a/Projects/Features/HomeFeature/Sources/HomeView.swift b/Projects/Features/HomeFeature/Sources/HomeView.swift index e0272f17..a419a0fb 100644 --- a/Projects/Features/HomeFeature/Sources/HomeView.swift +++ b/Projects/Features/HomeFeature/Sources/HomeView.swift @@ -68,8 +68,9 @@ struct HomeView: View { .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .navigationBarLeading) { - Text("로고") - .dmsFont(.title(.title1), color: .GrayScale.gray7) + DMSImage(.logoHorizontal, renderingMode: .original) + .scaledToFit() + .frame(height: 28) } } .dmsBackground() diff --git a/Projects/Features/MyPageFeature/Sources/ChangeProfile/ChangeProfileView.swift b/Projects/Features/MyPageFeature/Sources/ChangeProfile/ChangeProfileView.swift index 817ad2c7..414561a8 100644 --- a/Projects/Features/MyPageFeature/Sources/ChangeProfile/ChangeProfileView.swift +++ b/Projects/Features/MyPageFeature/Sources/ChangeProfile/ChangeProfileView.swift @@ -63,6 +63,7 @@ struct ChangeProfileView: View { } .imagePicker(isShow: $isShowingImagePicker, uiImage: $viewModel.selectedImage) .cameraPicker(isShow: $isShowingCameraPicker, uiImage: $viewModel.selectedImage) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsBackButton(dismiss: dismiss) .padding(.horizontal, 24) .dmsBackground() diff --git a/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift b/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift index ecad5502..f9becfcd 100644 --- a/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift +++ b/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift @@ -45,6 +45,7 @@ struct CheckPasswordView: View { .padding(.horizontal, 24) .dmsBackground() .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .ignoresSafeArea(.keyboard, edges: .bottom) .navigate( to: modifyPasswordComponent.makeView( diff --git a/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift b/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift index d9765c00..9480c58b 100644 --- a/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift +++ b/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift @@ -69,6 +69,7 @@ struct ModifyPasswordView: View { .padding(.horizontal, 24) .dmsBackground() .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .ignoresSafeArea(.keyboard, edges: .bottom) .onChange(of: viewModel.isSuccessRenewalPassword) { newValue in if newValue { diff --git a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift index 9ab1301b..bfb3685e 100644 --- a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift +++ b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift @@ -38,7 +38,7 @@ struct MyPageView: View { Spacer() ZStack(alignment: .bottomTrailing) { - AsyncImage(url: URL(string: "")) { image in + AsyncImage(url: viewModel.profile?.profileImageURL) { image in image .resizable() .frame(width: 74, height: 74) diff --git a/Projects/Features/MyPageFeature/Sources/RewardPointDetail/RewardPointDetailView.swift b/Projects/Features/MyPageFeature/Sources/RewardPointDetail/RewardPointDetailView.swift index ac796a22..c5fac704 100644 --- a/Projects/Features/MyPageFeature/Sources/RewardPointDetail/RewardPointDetailView.swift +++ b/Projects/Features/MyPageFeature/Sources/RewardPointDetail/RewardPointDetailView.swift @@ -54,6 +54,7 @@ struct RewardPointDetailView: View { .navigationTitle("상벌점 현황") .navigationBarTitleDisplayMode(.inline) .dmsBackground() + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) } @ViewBuilder diff --git a/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift b/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift index e4302817..9db06721 100644 --- a/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift +++ b/Projects/Features/NoticeFeature/Sources/Detail/NoticeDetailView.swift @@ -32,6 +32,7 @@ struct NoticeDetailView: View { Spacer() } } + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .navigationTitle("공지") .navigationBarTitleDisplayMode(.inline) .padding(.horizontal, 24) diff --git a/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift b/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift index f38e04b2..8164637f 100644 --- a/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift +++ b/Projects/Features/NoticeFeature/Sources/NoticeList/NoticeListView.swift @@ -55,6 +55,7 @@ struct NoticeListView: View { .navigationTitle("공지") .navigationBarTitleDisplayMode(.inline) .dmsBackground() + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .onAppear { viewModel.onAppear() } diff --git a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift index 45e74337..c8420d6f 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift @@ -62,6 +62,6 @@ struct AuthenticationEmailView: View { when: $viewModel.isNavigateChangePassword ) .dmsBackButton(dismiss: dismiss) - + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) } } diff --git a/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordView.swift b/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordView.swift index a115bc4e..8251a91f 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordView.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordView.swift @@ -66,6 +66,7 @@ struct ChangePasswordView: View { .dmsBackButton(dismiss: dismiss) .padding(.horizontal, 24) .dmsBackground() + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) .ignoresSafeArea(.keyboard, edges: .bottom) .alert("비밀번호가 변경되었습니다.", isPresented: $viewModel.isSuccessRenewalPassword) { diff --git a/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift b/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift index bb812373..45064831 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift @@ -88,6 +88,7 @@ struct EnterInformationView: View { ), when: $viewModel.isNavigateAuthenticationEmail ) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsBackButton(dismiss: dismiss) .frame(maxWidth: .infinity) .ignoresSafeArea(.keyboard, edges: .bottom) diff --git a/Projects/Features/SigninFeature/Sources/SigninView.swift b/Projects/Features/SigninFeature/Sources/SigninView.swift index dc5c3c4b..6d8a8b12 100644 --- a/Projects/Features/SigninFeature/Sources/SigninView.swift +++ b/Projects/Features/SigninFeature/Sources/SigninView.swift @@ -49,7 +49,12 @@ struct SigninView: View { .textContentType(.username) .focused($focusField, equals: .id) - SecureDMSFloatingTextField("비밀번호", text: $viewModel.password) { + SecureDMSFloatingTextField( + "비밀번호", + text: $viewModel.password, + isError: viewModel.isErrorOcuured, + errorMessage: viewModel.errorMessage + ) { viewModel.signinButtonDidTap() } .textContentType(.password) diff --git a/Projects/Features/SignupFeature/Sources/SchoolCode/SchoolCodeView.swift b/Projects/Features/SignupFeature/Sources/SchoolCode/SchoolCodeView.swift index 05a06ca8..964ae943 100644 --- a/Projects/Features/SignupFeature/Sources/SchoolCode/SchoolCodeView.swift +++ b/Projects/Features/SignupFeature/Sources/SchoolCode/SchoolCodeView.swift @@ -39,6 +39,7 @@ struct SchoolCodeView: View { viewModel.schoolCode = "" } .hideKeyboardWhenTap() + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .padding(.horizontal, 24) .ignoresSafeArea(.keyboard, edges: .bottom) .dmsBackground() diff --git a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift index 687bbeb1..97276354 100644 --- a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift @@ -52,6 +52,7 @@ struct SignupEmailAuthCodeVerifyView: View { viewModel.sendEmailAuthCode() } .ignoresSafeArea(.keyboard, edges: .bottom) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) .onChange(of: viewModel.isNavigateSignupID, perform: { newValue in print("navigate-signup-id", newValue) diff --git a/Projects/Features/SignupFeature/Sources/SignupEmailVerify/SignupEmailVerifyView.swift b/Projects/Features/SignupFeature/Sources/SignupEmailVerify/SignupEmailVerifyView.swift index 588a23a0..a73b6c81 100644 --- a/Projects/Features/SignupFeature/Sources/SignupEmailVerify/SignupEmailVerifyView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupEmailVerify/SignupEmailVerifyView.swift @@ -68,6 +68,7 @@ struct SignupEmailVerifyView: View { } } .dmsBackButton(dismiss: dismiss) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .padding(.horizontal, 24) } } diff --git a/Projects/Features/SignupFeature/Sources/SignupPassword/SignupPasswordView.swift b/Projects/Features/SignupFeature/Sources/SignupPassword/SignupPasswordView.swift index cfb1f066..7117bf5e 100644 --- a/Projects/Features/SignupFeature/Sources/SignupPassword/SignupPasswordView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupPassword/SignupPasswordView.swift @@ -66,6 +66,7 @@ struct SignupPasswordView: View { .onAppear { focusField = .password } + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsBackButton(dismiss: dismiss) .navigate( to: signupProfileImageComponent.makeView( diff --git a/Projects/Features/SignupFeature/Sources/SignupProfileImage/SignupProfileImageView.swift b/Projects/Features/SignupFeature/Sources/SignupProfileImage/SignupProfileImageView.swift index f1cbe725..6fa9dacb 100644 --- a/Projects/Features/SignupFeature/Sources/SignupProfileImage/SignupProfileImageView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupProfileImage/SignupProfileImageView.swift @@ -64,6 +64,7 @@ struct SignupProfileImageView: View { } .imagePicker(isShow: $isShowingImagePicker, uiImage: $viewModel.selectedImage) .cameraPicker(isShow: $isShowingCameraPicker, uiImage: $viewModel.selectedImage) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsBackButton(dismiss: dismiss) .padding(.horizontal, 24) .dmsBackground() diff --git a/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift b/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift index 255b70e5..689f7970 100644 --- a/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift @@ -50,6 +50,7 @@ struct SignupTermsView: View { } .dmsBackground() .dmsBackButton(dismiss: dismiss) + .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .padding(.horizontal, 24) .alert(viewModel.alertMessage, isPresented: $viewModel.isShowingAlert) { Button("로그인 화면으로", role: .cancel) { From 82fa6e43347fee476e2c02ace833e716b633d71b Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 15:11:28 +0900 Subject: [PATCH 28/40] =?UTF-8?q?feat=20::=20fetchDetailStudyRoom=20=20500?= =?UTF-8?q?=20=EC=83=88=EB=A1=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/Modules/ErrorModule/Sources/DmsError.swift | 4 ++++ Projects/Services/APIKit/Sources/StudyRoomsAPI.swift | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/Projects/Modules/ErrorModule/Sources/DmsError.swift b/Projects/Modules/ErrorModule/Sources/DmsError.swift index 2f164055..4c28eccb 100644 --- a/Projects/Modules/ErrorModule/Sources/DmsError.swift +++ b/Projects/Modules/ErrorModule/Sources/DmsError.swift @@ -35,6 +35,7 @@ public enum DmsError: Error { // MARK: - Users case currentPasswordMismatch + case photoCapacityIsLarge // MARK: - StudyRooms case seatIsAlreadyExist @@ -109,6 +110,9 @@ extension DmsError: LocalizedError { case .currentPasswordMismatch: return "유효하지 않은 비밀번호입니다." + case .photoCapacityIsLarge: + return "사진의 최대 용량을 초과했습니다." + // MARK: - StudyRooms case .seatIsAlreadyExist: return "이미 신청된 자리입니다" diff --git a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift index c4c62876..16108aa6 100644 --- a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift +++ b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift @@ -68,6 +68,12 @@ extension StudyRoomsAPI: DmsAPI { 500: .internalServerError ] + case .fetchDetailStudyRoom: + return [ + 400: .badRequest, + 500: .photoCapacityIsLarge + ] + default: return [ 400: .badRequest, From 78dbf7d8a7802e3abc38aabefc4244f9f9201ebd Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 16:21:45 +0900 Subject: [PATCH 29/40] =?UTF-8?q?feat=20::=20LazyHGrid=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyRoomDetail/Component/StudyRoomSeatDetailView.swift | 2 +- .../Sources/StudyRoomDetail/StudyRoomDetailView.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift index 85964710..276c3373 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift @@ -9,7 +9,7 @@ extension StudyRoomDetailView { @ViewBuilder func studyRoomSeatDetailView() -> some View { ScrollView([.horizontal, .vertical]) { - LazyVGrid(columns: columns) { + LazyHGrid(rows: rows) { ForEach(viewModel.studyRoomDetail.seats, id: \.self) { singleSeat in DMSSeatButton( text: generateSeatButtonText(seat: singleSeat), diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index 83846692..96c0d54c 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -14,8 +14,8 @@ struct StudyRoomDetailView: View { _viewModel = StateObject(wrappedValue: viewModel) } - var columns: [GridItem] { - Array(repeating: GridItem(.flexible(), spacing: 40), count: viewModel.studyRoomDetail.totalWidthSize) + var rows: [GridItem] { + Array(repeating: GridItem(.flexible(), spacing: 40), count: viewModel.studyRoomDetail.totalHeightSize) } var body: some View { From 5761a762d9eddf656c7df3c45362b50f868f2a6c Mon Sep 17 00:00:00 2001 From: Daehee Kim <0824dh@naver.com> Date: Wed, 28 Dec 2022 16:22:27 +0900 Subject: [PATCH 30/40] =?UTF-8?q?feat=20::=20apply,=20del=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyRoomDetailViewModel.swift | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index 8e32633b..7e918f24 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -23,6 +23,14 @@ final class StudyRoomDetailViewModel: BaseViewModel { @Published var seatTypes: [SeatTypeEntity] = [] @Published var seat: [[SeatEntity]] = [[]] @Published var availableTimeString: String = "" + @Published var isShowingToast = false + @Published var toastMessage = "" + @Published var selectSeat: SeatEntity = .init( + id: "", + widthLocation: 0, + heightLocation: 0, + status: .empty + ) let studyRoomEntity: StudyRoomEntity @@ -83,18 +91,23 @@ final class StudyRoomDetailViewModel: BaseViewModel { } } - func detailRoomSeatTwoDimensional() { - let width = self.studyRoomDetail.totalWidthSize - let height = self.studyRoomDetail.totalHeightSize - let beforeSeat = self.studyRoomDetail.seats - var totalCount = 0 + func applyStudyRoomSeat(id: String) { + addCancellable( + applyStudyRoomSeatUseCase.execute(seatID: id) + ) { [weak self] _ in + self?.fetchDetailStudyRoom() + self?.isShowingToast = true + self?.toastMessage = "자습실 신청이 완료되었습니다." + } + } - for widthCount in 0.. Date: Wed, 28 Dec 2022 19:04:07 +0900 Subject: [PATCH 31/40] =?UTF-8?q?feat=20::=20empty=EA=B0=92=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyRoomDetailViewModel.swift | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index 7e918f24..c8fc36d9 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -82,12 +82,34 @@ final class StudyRoomDetailViewModel: BaseViewModel { } func fetchDetailStudyRoom() { + var newSeatArray: [SeatEntity] = [] addCancellable( fetchDetailStudyRoomUseCase.execute( roomID: self.studyRoomEntity.id ) ) { [weak self] detailStudyRoom in - self?.studyRoomDetail = detailStudyRoom +// self?.studyRoomDetail = detailStudyRoom + newSeatArray = self?.addEmptySeat( + width: detailStudyRoom.totalWidthSize, + height: detailStudyRoom.totalHeightSize, + beforeArray: detailStudyRoom.seats + ) ?? [] + + self?.studyRoomDetail = .init( + floor: detailStudyRoom.floor, + name: detailStudyRoom.name, + totalAvailableSeat: detailStudyRoom.totalAvailableSeat, + inUseHeadcount: detailStudyRoom.inUseHeadcount, + availableSex: detailStudyRoom.availableSex, + availableGrade: detailStudyRoom.availableGrade, + eastDescription: detailStudyRoom.eastDescription, + westDescription: detailStudyRoom.westDescription, + southDescription: detailStudyRoom.southDescription, + northDescription: detailStudyRoom.northDescription, + totalWidthSize: detailStudyRoom.totalWidthSize, + totalHeightSize: detailStudyRoom.totalHeightSize, + seats: newSeatArray + ) } } @@ -110,4 +132,27 @@ final class StudyRoomDetailViewModel: BaseViewModel { self?.toastMessage = "자습실 취소가 완료되었습니다." } } + + func addEmptySeat(width: Int, height: Int, beforeArray: [SeatEntity]) -> [SeatEntity] { + if beforeArray.count == width * height { + return beforeArray + } + + var newArray = [SeatEntity]( + repeating: SeatEntity( + id: "", + widthLocation: 1, + heightLocation: 1, + status: .empty + ), + count: width * height + ) + + beforeArray.forEach { value in + let index = (value.widthLocation - 1) * height + value.heightLocation - 1 + newArray[index] = value + } + return newArray + } + } From de5a54d76587ab53158a3258f55dcaa410642230 Mon Sep 17 00:00:00 2001 From: baegteun Date: Wed, 28 Dec 2022 19:57:47 +0900 Subject: [PATCH 32/40] =?UTF-8?q?feat=20::=20=EC=9E=90=EC=8A=B5=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Component/Seat/DMSSeatButton.swift | 9 ++-- .../Component/Seat/DMSSeatButtonStyle.swift | 53 +++++++------------ .../Component/StudyRoomSeatDetailView.swift | 33 ++++++++++-- .../Component/StudyRoomSeatTypeView.swift | 2 +- .../StudyRoomDetail/StudyRoomDetailView.swift | 10 +++- .../StudyRoomDetailViewModel.swift | 20 +++---- .../BaseFeature/Sources/DMSSelectionTab.swift | 12 +++++ .../BaseFeature/Sources/TabFlow.swift | 8 +++ .../HomeFeature/Sources/HomeView.swift | 7 ++- .../MainTabFeature/Sources/MainTabView.swift | 10 ++-- .../Sources/Enum/SeatStatusType.swift | 1 - 11 files changed, 99 insertions(+), 66 deletions(-) create mode 100644 Projects/Features/BaseFeature/Sources/DMSSelectionTab.swift create mode 100644 Projects/Features/BaseFeature/Sources/TabFlow.swift diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButton.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButton.swift index fde93984..216194b6 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButton.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButton.swift @@ -3,19 +3,22 @@ import DataMappingModule public struct DMSSeatButton: View { var text: String - var style: SeatStatusType + var style: DMSSeatButtonStyle.Style var color: Color + var isSelected: Bool var action: () -> Void public init( text: String = "", - style: SeatStatusType = .empty, + style: DMSSeatButtonStyle.Style = .empty, color: Color = .blue, + isSelected: Bool = false, action: @escaping () -> Void = {} ) { self.text = text self.style = style self.color = color + self.isSelected = isSelected self.action = action } @@ -23,6 +26,6 @@ public struct DMSSeatButton: View { Button(action: action) { Text(text) } - .buttonStyle(DMSSeatButtonStyle(style: style, color: color)) + .buttonStyle(DMSSeatButtonStyle(style: style, color: color, isSelected: isSelected)) } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButtonStyle.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButtonStyle.swift index e55c303c..a6580333 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButtonStyle.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/Seat/DMSSeatButtonStyle.swift @@ -2,49 +2,52 @@ import SwiftUI import DataMappingModule public struct DMSSeatButtonStyle: ButtonStyle { - var style: SeatStatusType + public enum Style { + case available + case unavailable + case inUse + case empty + } + var style: Style var color: Color + var isSelected: Bool public func makeBody(configuration: Configuration) -> some View { switch style { case .available: - return AnyView(AvailableButton(configuration: configuration, color: color)) + return AnyView(AvailableButton(configuration: configuration, color: color, isSelected: isSelected)) case .unavailable: return AnyView(UnAvailableButton(configuration: configuration, color: color)) case .inUse: return AnyView(InUseButton(configuration: configuration, color: color)) case .empty: return AnyView(EmptyButton()) - case .isSelect: - return AnyView(IsSelectButton(configuration: configuration, color: color)) } } } -// MARK: - Usage -extension Button { - func dmsStyle(_ style: SeatStatusType, color: Color) -> some View { - self.buttonStyle(DMSSeatButtonStyle(style: style, color: color)) - } -} - // MARK: - Available extension DMSSeatButtonStyle { struct AvailableButton: View { let configuration: ButtonStyle.Configuration let color: Color + let isSelected: Bool var body: some View { ZStack { - Circle() - .foregroundColor(color) + if isSelected { + Circle() + .strokeBorder(color) + } else { + Circle() + .foregroundColor(color) + } configuration.label - .dmsFont(.etc(.overline), color: .GrayScale.gray1) + .dmsFont(.etc(.overline), color: isSelected ? .GrayScale.gray7 : .GrayScale.gray1) } .frame(width: 40, height: 40) .dmsShadow(style: .surface) - } } } @@ -105,23 +108,3 @@ extension DMSSeatButtonStyle { } } } - -// MARK: - IsSelect -extension DMSSeatButtonStyle { - struct IsSelectButton: View { - let configuration: ButtonStyle.Configuration - let color: Color - - var body: some View { - ZStack { - Circle() - .stroke(color, lineWidth: 4) - - configuration.label - .dmsFont(.etc(.overline), color: .GrayScale.gray7) - } - .frame(width: 40, height: 40) - .dmsShadow(style: .surface) - } - } -} diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift index 276c3373..ab63a3f7 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift @@ -13,9 +13,20 @@ extension StudyRoomDetailView { ForEach(viewModel.studyRoomDetail.seats, id: \.self) { singleSeat in DMSSeatButton( text: generateSeatButtonText(seat: singleSeat), - style: singleSeat.status, - color: Color(hex: singleSeat.type?.color ?? "") - ) + style: seatStatusToSeatStyle(status: singleSeat.status), + color: Color(hex: singleSeat.type?.color ?? ""), + isSelected: singleSeat == viewModel.selectedSeat + ) { + if viewModel.selectedSeat?.id == singleSeat.id || singleSeat.status != .available { + withAnimation { + viewModel.selectedSeat = nil + } + } else { + withAnimation { + viewModel.selectedSeat = singleSeat + } + } + } } } } @@ -29,4 +40,20 @@ extension StudyRoomDetailView { } return text } + + func seatStatusToSeatStyle(status: SeatStatusType) -> DMSSeatButtonStyle.Style { + switch status { + case .available: + return .available + + case .unavailable: + return .unavailable + + case .inUse: + return .inUse + + case .empty: + return .empty + } + } } diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift index 5d856309..d329a52e 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatTypeView.swift @@ -7,7 +7,7 @@ extension StudyRoomDetailView { @ViewBuilder func studyRoomSeatTypeView() -> some View { - ScrollView(.horizontal) { + ScrollView(.horizontal, showsIndicators: false) { HStack { ForEach(viewModel.seatTypes, id: \.self) { seatType in HStack { diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index 96c0d54c..a9670616 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -50,8 +50,14 @@ struct StudyRoomDetailView: View { .padding(.bottom, 6) HStack(spacing: 10) { - DMSWideButton(text: "취소", style: .contained, color: .GrayScale.gray4) - DMSWideButton(text: "신청", style: .contained, color: .System.primary) + DMSWideButton(text: "취소",style: .contained, color: .GrayScale.gray4) { + viewModel.cancelStudyRoomSeat() + } + + DMSWideButton(text: "신청", style: .contained, color: .System.primary) { + viewModel.applyStudyRoomSeat() + } + .disabled(viewModel.selectedSeat == nil) } .padding(.bottom, 40) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index c8fc36d9..35652a73 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -25,12 +25,7 @@ final class StudyRoomDetailViewModel: BaseViewModel { @Published var availableTimeString: String = "" @Published var isShowingToast = false @Published var toastMessage = "" - @Published var selectSeat: SeatEntity = .init( - id: "", - widthLocation: 0, - heightLocation: 0, - status: .empty - ) + @Published var selectedSeat: SeatEntity? let studyRoomEntity: StudyRoomEntity @@ -74,9 +69,8 @@ final class StudyRoomDetailViewModel: BaseViewModel { addCancellable( fetchStudyAvailableTimeUseCase.execute() ) { [weak self] availableTime in - var startTime = availableTime.startAt.toSmallDMSTimeString() - var endTime = availableTime.endAt.toSmallDMSTimeString() - print(startTime, endTime) + let startTime = availableTime.startAt.toSmallDMSTimeString() + let endTime = availableTime.endAt.toSmallDMSTimeString() self?.availableTimeString = "자습실 신청 시간은 \(startTime) ~ \(endTime) 까지 입니다." } } @@ -88,7 +82,6 @@ final class StudyRoomDetailViewModel: BaseViewModel { roomID: self.studyRoomEntity.id ) ) { [weak self] detailStudyRoom in -// self?.studyRoomDetail = detailStudyRoom newSeatArray = self?.addEmptySeat( width: detailStudyRoom.totalWidthSize, height: detailStudyRoom.totalHeightSize, @@ -113,9 +106,10 @@ final class StudyRoomDetailViewModel: BaseViewModel { } } - func applyStudyRoomSeat(id: String) { + func applyStudyRoomSeat() { + guard let selectedSeat else { return } addCancellable( - applyStudyRoomSeatUseCase.execute(seatID: id) + applyStudyRoomSeatUseCase.execute(seatID: selectedSeat.id) ) { [weak self] _ in self?.fetchDetailStudyRoom() self?.isShowingToast = true @@ -123,7 +117,7 @@ final class StudyRoomDetailViewModel: BaseViewModel { } } - func cancelStudyRoomSeat(id: String) { + func cancelStudyRoomSeat() { addCancellable( cancelStudyRoomSeatUseCase.execute() ) { [weak self] _ in diff --git a/Projects/Features/BaseFeature/Sources/DMSSelectionTab.swift b/Projects/Features/BaseFeature/Sources/DMSSelectionTab.swift new file mode 100644 index 00000000..1441299e --- /dev/null +++ b/Projects/Features/BaseFeature/Sources/DMSSelectionTab.swift @@ -0,0 +1,12 @@ +import SwiftUI + +struct DMSSelectionTabbKey: EnvironmentKey { + static var defaultValue: Binding = .constant(.home) +} + +public extension EnvironmentValues { + var dmsSelectionTabbKey: Binding { + get { self[DMSSelectionTabbKey.self] } + set { self[DMSSelectionTabbKey.self] = newValue } + } +} diff --git a/Projects/Features/BaseFeature/Sources/TabFlow.swift b/Projects/Features/BaseFeature/Sources/TabFlow.swift new file mode 100644 index 00000000..4e858a7b --- /dev/null +++ b/Projects/Features/BaseFeature/Sources/TabFlow.swift @@ -0,0 +1,8 @@ +import Foundation + +public enum TabFlow: Int { + case home + case apply + case notice + case myPage +} diff --git a/Projects/Features/HomeFeature/Sources/HomeView.swift b/Projects/Features/HomeFeature/Sources/HomeView.swift index a419a0fb..b4c8cdba 100644 --- a/Projects/Features/HomeFeature/Sources/HomeView.swift +++ b/Projects/Features/HomeFeature/Sources/HomeView.swift @@ -6,6 +6,7 @@ struct HomeView: View { @StateObject var viewModel: HomeViewModel @State var isShowingCalendar = false @Environment(\.tabbarHidden) var tabbarHidden + @Environment(\.dmsSelectionTabbKey) var dmsSelectionTabbKey init(viewModel: HomeViewModel) { _viewModel = StateObject(wrappedValue: viewModel) @@ -36,7 +37,11 @@ struct HomeView: View { ScrollView(showsIndicators: false) { if viewModel.isExistNewNotice { - NoticeView() + Button { + dmsSelectionTabbKey.wrappedValue = .notice + } label: { + NoticeView() + } } Text("오늘의 급식") diff --git a/Projects/Features/MainTabFeature/Sources/MainTabView.swift b/Projects/Features/MainTabFeature/Sources/MainTabView.swift index b315d65c..780ee63a 100644 --- a/Projects/Features/MainTabFeature/Sources/MainTabView.swift +++ b/Projects/Features/MainTabFeature/Sources/MainTabView.swift @@ -7,12 +7,6 @@ import BaseFeature import DesignSystem import Utility -enum TabFlow: Int { - case home - case apply - case notice - case myPage -} struct MainTabView: View { @State var selection: TabFlow = .home @State var tabbarHidden = false @@ -61,10 +55,12 @@ struct MainTabView: View { .cornerRadius(24, corners: [.topLeft, .topRight]) .ignoresSafeArea() } - .dmsShadow(style: .tabbar) + .dmsShadow(style: .tabbar) + .environment(\.dmsSelectionTabbKey, $selection) } } } + .environment(\.dmsSelectionTabbKey, $selection) .onAppear { UITabBar.hideTabBar() } diff --git a/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift b/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift index 35f689cf..85f29d3c 100644 --- a/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift +++ b/Projects/Services/DataMappingModule/Sources/Enum/SeatStatusType.swift @@ -5,5 +5,4 @@ public enum SeatStatusType: String, Decodable { case unavailable = "UNAVAILABLE" case inUse = "IN_USE" case empty = "EMPTY" - case isSelect = "IS_SELECT" } From 51649877367d8e73ede36dc2f6c34dfc7b41d40b Mon Sep 17 00:00:00 2001 From: baegteun Date: Wed, 28 Dec 2022 21:12:16 +0900 Subject: [PATCH 33/40] =?UTF-8?q?feat=20::=20=EB=B0=94=ED=85=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/StudyRoomDetail/StudyRoomDetailView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index a9670616..fb471f45 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -32,6 +32,7 @@ struct StudyRoomDetailView: View { studyRoomDetailBackView() .padding(.top, 20) .padding(.bottom, 0) + .edgesIgnoringSafeArea(.bottom) } .dmsBackButton(dismiss: dismiss) .navigationTitle("자습실 자리 신청") From d4c5567a97f5e6094f6e40ff2c400e1684bb8ccf Mon Sep 17 00:00:00 2001 From: baegteun Date: Sat, 31 Dec 2022 08:47:58 +0900 Subject: [PATCH 34/40] feat :: default value -> optional --- .../Component/StudyRoomSeatDetailView.swift | 4 ++-- .../Component/StudyRoomSeatView.swift | 8 ++++---- .../StudyRoomDetail/StudyRoomDetailView.swift | 5 ++++- .../StudyRoomDetailViewModel.swift | 16 +--------------- 4 files changed, 11 insertions(+), 22 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift index ab63a3f7..0aeda1d1 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatDetailView.swift @@ -10,12 +10,12 @@ extension StudyRoomDetailView { func studyRoomSeatDetailView() -> some View { ScrollView([.horizontal, .vertical]) { LazyHGrid(rows: rows) { - ForEach(viewModel.studyRoomDetail.seats, id: \.self) { singleSeat in + ForEach(viewModel.studyRoomDetail?.seats ?? [], id: \.self) { singleSeat in DMSSeatButton( text: generateSeatButtonText(seat: singleSeat), style: seatStatusToSeatStyle(status: singleSeat.status), color: Color(hex: singleSeat.type?.color ?? ""), - isSelected: singleSeat == viewModel.selectedSeat + isSelected: singleSeat.id == viewModel.selectedSeat?.id ?? "" ) { if viewModel.selectedSeat?.id == singleSeat.id || singleSeat.status != .available { withAnimation { diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift index a682a342..6ad74657 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift @@ -17,25 +17,25 @@ extension StudyRoomDetailView { .frame(height: 15) HStack { - Text(viewModel.studyRoomDetail.westDescription) + Text(viewModel.studyRoomDetail?.westDescription ?? "동") .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .rotationEffect(.degrees(-90)) .padding(.leading, 8) VStack(alignment: .center) { - Text(viewModel.studyRoomDetail.northDescription) + Text(viewModel.studyRoomDetail?.northDescription ?? "북") .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .padding(.top, 8) studyRoomSeatDetailView() - Text(viewModel.studyRoomDetail.southDescription) + Text(viewModel.studyRoomDetail?.southDescription ?? "ska") .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .padding(.bottom, 8) } - Text(viewModel.studyRoomDetail.eastDescription) + Text(viewModel.studyRoomDetail?.eastDescription ?? "서") .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .rotationEffect(.degrees(90)) .padding(.trailing, 8) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift index fb471f45..ed401628 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailView.swift @@ -15,7 +15,10 @@ struct StudyRoomDetailView: View { } var rows: [GridItem] { - Array(repeating: GridItem(.flexible(), spacing: 40), count: viewModel.studyRoomDetail.totalHeightSize) + Array( + repeating: GridItem(.flexible(), spacing: 40), + count: viewModel.studyRoomDetail?.totalHeightSize ?? 0 + ) } var body: some View { diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index 35652a73..61a72471 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -5,21 +5,7 @@ import Combine import Foundation final class StudyRoomDetailViewModel: BaseViewModel { - @Published var studyRoomDetail: DetailStudyRoomEntity = .init( - floor: 0, - name: "", - totalAvailableSeat: 0, - inUseHeadcount: 0, - availableSex: .all, - availableGrade: 0, - eastDescription: "", - westDescription: "", - southDescription: "", - northDescription: "", - totalWidthSize: 0, - totalHeightSize: 0, - seats: [] - ) + @Published var studyRoomDetail: DetailStudyRoomEntity? @Published var seatTypes: [SeatTypeEntity] = [] @Published var seat: [[SeatEntity]] = [[]] @Published var availableTimeString: String = "" From 5d951d45128676e333b217e1a06bac99a00349cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8C=80=ED=9D=AC?= <0824dh@naver.com> Date: Mon, 2 Jan 2023 20:25:20 +0900 Subject: [PATCH 35/40] =?UTF-8?q?fix=20::=20fetchSchoolList=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/Services/APIKit/Sources/SchoolAPI.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Services/APIKit/Sources/SchoolAPI.swift b/Projects/Services/APIKit/Sources/SchoolAPI.swift index e23d5cf9..d897e744 100644 --- a/Projects/Services/APIKit/Sources/SchoolAPI.swift +++ b/Projects/Services/APIKit/Sources/SchoolAPI.swift @@ -19,7 +19,7 @@ extension SchoolAPI: DmsAPI { public var urlPath: String { switch self { case .fetchSchoolList: - return "/" + return "" case let .fetchSchoolQuestion(authCode): return "/question/\(authCode)" From 047057ac3d02870b1056900a7e2f895b047ea865 Mon Sep 17 00:00:00 2001 From: baegteun Date: Mon, 2 Jan 2023 20:26:18 +0900 Subject: [PATCH 36/40] =?UTF-8?q?feat=20::=20=EC=98=A4=EB=A5=98s=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0s=20:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Component/SchoolSelectButtonView.swift | 43 ++++++++++--------- .../HomeFeature/Sources/HomeView.swift | 2 + .../MainTabFeature/Sources/MainTabView.swift | 27 ++++++++---- .../CheckPasswordViewModel.swift | 1 + .../ModifyPasswordViewModel.swift | 1 + .../Sources/MyPage/MyPageComponent.swift | 1 + .../AuthenticationEmailView.swift | 6 ++- .../AuthenticationEmailViewModel.swift | 12 ++---- .../SigninFeature/Sources/SigninView.swift | 6 +++ .../Sources/SigninViewModel.swift | 4 +- .../SchoolConfirmationQuestionsView.swift | 4 +- .../EmailAuthCodeVerifyView.swift | 11 +++-- .../EmailAuthCodeVerifyViewModel.swift | 11 +---- .../Sources/SignupTerms/SignupTermsView.swift | 4 +- .../Services/APIKit/Sources/SchoolAPI.swift | 2 +- .../Sources/Base/DmsFeaturesResponseDTO.swift | 8 +--- .../Stub/AuthRepositoryStub.swift | 4 +- .../UseCases/Fake/SigninUseCaseFake.swift | 2 +- .../Sources/Entities/DmsFeatures.swift | 16 ++----- .../Stub/RemoteAuthDataSourceStub.swift | 4 +- .../DmsFeaturesDataTransfer.swift | 4 +- 21 files changed, 86 insertions(+), 87 deletions(-) diff --git a/Projects/Features/FindIDFeature/Sources/Component/SchoolSelectButtonView.swift b/Projects/Features/FindIDFeature/Sources/Component/SchoolSelectButtonView.swift index 2f1d5b37..cd3bf9a1 100644 --- a/Projects/Features/FindIDFeature/Sources/Component/SchoolSelectButtonView.swift +++ b/Projects/Features/FindIDFeature/Sources/Component/SchoolSelectButtonView.swift @@ -21,34 +21,35 @@ struct SchoolSelectButtonView: View { } public var body: some View { - VStack(alignment: .leading, spacing: 10) { - HStack(alignment: .bottom) { - Text(placeholderText) - .dmsFont(.body(.body1), color: textColor) + Menu { + ForEach(schoolList) { school in + Button("\(school.name)", action: { + placeholderText = school.name + onCommit(school) + }) + } + .labelsHidden() + .pickerStyle(InlinePickerStyle()) + } label: { + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .bottom) { + Text(placeholderText) + .dmsFont(.body(.body1), color: textColor) - Spacer() + Spacer() - Menu { - ForEach(schoolList) { school in - Button("\(school.name)", action: { - placeholderText = school.name - onCommit(school) - }) - } - .labelsHidden() - .pickerStyle(InlinePickerStyle()) - } label: { Image(systemName: "chevron.down") .foregroundColor(.GrayScale.gray5) .frame(width: 24, height: 24) } - } - .overlay(alignment: .bottom) { - Rectangle() - .foregroundColor(.GrayScale.gray5) - .frame(height: 1) - .offset(y: 7) + .overlay(alignment: .bottom) { + Rectangle() + .foregroundColor(.GrayScale.gray5) + .frame(height: 1) + .offset(y: 7) + } } } + } } diff --git a/Projects/Features/HomeFeature/Sources/HomeView.swift b/Projects/Features/HomeFeature/Sources/HomeView.swift index b4c8cdba..094599ee 100644 --- a/Projects/Features/HomeFeature/Sources/HomeView.swift +++ b/Projects/Features/HomeFeature/Sources/HomeView.swift @@ -1,3 +1,4 @@ +import BaseFeature import DesignSystem import SwiftUI import Utility @@ -7,6 +8,7 @@ struct HomeView: View { @State var isShowingCalendar = false @Environment(\.tabbarHidden) var tabbarHidden @Environment(\.dmsSelectionTabbKey) var dmsSelectionTabbKey + @EnvironmentObject var appState: AppState init(viewModel: HomeViewModel) { _viewModel = StateObject(wrappedValue: viewModel) diff --git a/Projects/Features/MainTabFeature/Sources/MainTabView.swift b/Projects/Features/MainTabFeature/Sources/MainTabView.swift index 780ee63a..2f5b8736 100644 --- a/Projects/Features/MainTabFeature/Sources/MainTabView.swift +++ b/Projects/Features/MainTabFeature/Sources/MainTabView.swift @@ -7,9 +7,23 @@ import BaseFeature import DesignSystem import Utility +// swiftlint: disable large_tuple struct MainTabView: View { @State var selection: TabFlow = .home @State var tabbarHidden = false + @EnvironmentObject var appState: AppState + + var tabItem: [(String, String, TabFlow)] { + var tabItems: [(String, String, TabFlow)] = [ + ("house", "홈", .home), + ("megaphone", "안내", .notice), + ("person", "마이페이지", .myPage) + ] + if appState.features.studyRoomService { + tabItems.insert(("plus.bubble", "신청", .apply), at: 1) + } + return tabItems + } private let homeComponent: HomeComponent private let studyRoomListComponent: StudyRoomListComponent @@ -34,8 +48,10 @@ struct MainTabView: View { homeComponent.makeView() .tag(TabFlow.home) - studyRoomListComponent.makeView() - .tag(TabFlow.apply) + if appState.features.studyRoomService { + studyRoomListComponent.makeView() + .tag(TabFlow.apply) + } noticeComponent.makeView() .tag(TabFlow.notice) @@ -68,13 +84,6 @@ struct MainTabView: View { @ViewBuilder func tabbarView() -> some View { - let tabItem: [(String, String, TabFlow)] = [ - ("house", "홈", .home), - ("plus.bubble", "신청", .apply), - ("megaphone", "안내", .notice), - ("person", "마이페이지", .myPage) - ] - HStack { Spacer() diff --git a/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordViewModel.swift b/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordViewModel.swift index ce79f6d7..be0f0c27 100644 --- a/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordViewModel.swift +++ b/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordViewModel.swift @@ -1,6 +1,7 @@ import BaseFeature import Combine import DomainModule +import Utility final class CheckPasswordViewModel: BaseViewModel { @Published var password = "" { diff --git a/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordViewModel.swift b/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordViewModel.swift index 32a64b56..a63faa89 100644 --- a/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordViewModel.swift +++ b/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordViewModel.swift @@ -1,6 +1,7 @@ import BaseFeature import Combine import DomainModule +import Utility final class ModifyPasswordViewModel: BaseViewModel { @Published var password = "" { diff --git a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageComponent.swift b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageComponent.swift index 959d78fd..6283aca0 100644 --- a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageComponent.swift +++ b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageComponent.swift @@ -23,5 +23,6 @@ public final class MyPageComponent: Component { checkPasswordComponent: self.dependency.checkPasswordComponent ) } + .navigationViewStyle(.stack) } } diff --git a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift index c8420d6f..cec884ba 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift @@ -46,8 +46,10 @@ struct AuthenticationEmailView: View { } .padding(.horizontal, 24) .hideKeyboardWhenTap() - .onAppear { - viewModel.sendEmailAuthCode() + .onChange(of: viewModel.authCode) { newValue in + if newValue.count == 6 { + viewModel.verifyEmailAuthCode() + } } .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) .navigate( diff --git a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift index 07e657bc..56d1e9c4 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift @@ -36,13 +36,7 @@ final class AuthenticationEmailViewModel: BaseViewModel { self.authenticationEmailParam = authenticationEmailParam super.init() - addCancellable( - $authCode.setFailureType(to: DmsError.self).eraseToAnyPublisher() - ) { [weak self] code in - if code.count >= 6 { - self?.verifyEmailAuthCode() - } - } + sendEmailAuthCode() addCancellable( timer.setFailureType(to: DmsError.self).eraseToAnyPublisher() ) { [weak self] _ in @@ -65,9 +59,11 @@ final class AuthenticationEmailViewModel: BaseViewModel { } func verifyEmailAuthCode() { + let email = authenticationEmailParam.email + .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" addCancellable( verifyAuthCodeUseCase.execute( - req: .init(email: authenticationEmailParam.email, authCode: authCode, type: .signup) + req: .init(email: email, authCode: authCode, type: .password) ) ) { [weak self] _ in self?.isNavigateChangePassword = true diff --git a/Projects/Features/SigninFeature/Sources/SigninView.swift b/Projects/Features/SigninFeature/Sources/SigninView.swift index 6d8a8b12..a1bb9931 100644 --- a/Projects/Features/SigninFeature/Sources/SigninView.swift +++ b/Projects/Features/SigninFeature/Sources/SigninView.swift @@ -130,6 +130,12 @@ struct SigninView: View { ) .ignoresSafeArea(.keyboard, edges: .bottom) } + .hideKeyboardWhenTap() + .onChange(of: viewModel.dmsFeatures) { newValue in + if let newValue { + appState.features = newValue + } + } .onChange(of: viewModel.isSuccessSignin) { newValue in guard newValue else { return } appState.sceneFlow = .main diff --git a/Projects/Features/SigninFeature/Sources/SigninViewModel.swift b/Projects/Features/SigninFeature/Sources/SigninViewModel.swift index 45f0c969..4586be6e 100644 --- a/Projects/Features/SigninFeature/Sources/SigninViewModel.swift +++ b/Projects/Features/SigninFeature/Sources/SigninViewModel.swift @@ -7,6 +7,7 @@ final class SigninViewModel: BaseViewModel { @Published var password = "" @Published var isOnAutoSignin = true @Published var isSuccessSignin = false + @Published var dmsFeatures: DmsFeatures? var isSigninEnabled: Bool { !id.isEmpty && !password.isEmpty @@ -27,7 +28,8 @@ final class SigninViewModel: BaseViewModel { password: password ) ) - ) { [weak self] _ in + ) { [weak self] feature in + self?.dmsFeatures = feature self?.isSuccessSignin = true } } diff --git a/Projects/Features/SignupFeature/Sources/SchoolConfirmationQuestions/SchoolConfirmationQuestionsView.swift b/Projects/Features/SignupFeature/Sources/SchoolConfirmationQuestions/SchoolConfirmationQuestionsView.swift index 7a07cd3e..81b391bc 100644 --- a/Projects/Features/SignupFeature/Sources/SchoolConfirmationQuestions/SchoolConfirmationQuestionsView.swift +++ b/Projects/Features/SignupFeature/Sources/SchoolConfirmationQuestions/SchoolConfirmationQuestionsView.swift @@ -63,6 +63,7 @@ struct SchoolConfirmationQuestionsView: View { .padding(.top, 24) .padding(.bottom, 40) } + .hideKeyboardWhenTap() .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) .dmsBackButton(dismiss: dismiss) .padding(.horizontal, 24) @@ -79,6 +80,7 @@ struct SchoolConfirmationQuestionsView: View { schoolAnswer: viewModel.answer ) ), - when: $viewModel.isNavigateSignupEmailVerify) + when: $viewModel.isNavigateSignupEmailVerify + ) } } diff --git a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift index 97276354..91503b4f 100644 --- a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift @@ -44,19 +44,18 @@ struct SignupEmailAuthCodeVerifyView: View { .padding(.top, 32) .padding(.bottom, 40) } + .onChange(of: viewModel.authCode) { newValue in + if newValue.count == 6 { + viewModel.verifyEmailAuthCode() + } + } .dmsBackButton(dismiss: dismiss) .padding(.horizontal, 24) .dmsBackground() .hideKeyboardWhenTap() - .onAppear { - viewModel.sendEmailAuthCode() - } .ignoresSafeArea(.keyboard, edges: .bottom) .dmsToast(isShowing: $viewModel.isErrorOcuured, message: viewModel.errorMessage, style: .error) .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) - .onChange(of: viewModel.isNavigateSignupID, perform: { newValue in - print("navigate-signup-id", newValue) - }) .navigate( to: idSettingComponent.makeView( idSettingParam: .init( diff --git a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift index dda8134c..72137ec6 100644 --- a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift +++ b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift @@ -32,6 +32,7 @@ final class SignupEmailAuthCodeVerifyViewModel: BaseViewModel { self.verifyAuthCodeUseCase = verifyAuthCodeUseCase self.signupEmailAuthCodeVerifyParam = signupEmailAuthCodeVerifyParam super.init() + sendEmailAuthCode() addCancellable( timer.setFailureType(to: DmsError.self).eraseToAnyPublisher() @@ -39,16 +40,6 @@ final class SignupEmailAuthCodeVerifyViewModel: BaseViewModel { guard let self, self.timeRemaining > 0 else { return } self.timeRemaining -= 1 } - - addCancellable( - $authCode.setFailureType(to: DmsError.self) - .debounce(for: 0.5, scheduler: RunLoop.main) - .eraseToAnyPublisher() - ) { [weak self] code in - if code.count == 6 { - self?.verifyEmailAuthCode() - } - } } func sendEmailAuthCode() { diff --git a/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift b/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift index 689f7970..6fea5d04 100644 --- a/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupTerms/SignupTermsView.swift @@ -1,9 +1,9 @@ import DesignSystem import SwiftUI +import Utility struct SignupTermsView: View { @StateObject var viewModel: SignupTermsViewModel - @Environment(\.rootPresentationMode) var rootPresentationMode @Environment(\.dismiss) var dismiss init( @@ -54,7 +54,7 @@ struct SignupTermsView: View { .padding(.horizontal, 24) .alert(viewModel.alertMessage, isPresented: $viewModel.isShowingAlert) { Button("로그인 화면으로", role: .cancel) { - rootPresentationMode.wrappedValue.toggle() + NavigationUtil.popToRootView() } } } diff --git a/Projects/Services/APIKit/Sources/SchoolAPI.swift b/Projects/Services/APIKit/Sources/SchoolAPI.swift index e23d5cf9..d897e744 100644 --- a/Projects/Services/APIKit/Sources/SchoolAPI.swift +++ b/Projects/Services/APIKit/Sources/SchoolAPI.swift @@ -19,7 +19,7 @@ extension SchoolAPI: DmsAPI { public var urlPath: String { switch self { case .fetchSchoolList: - return "/" + return "" case let .fetchSchoolQuestion(authCode): return "/question/\(authCode)" diff --git a/Projects/Services/DataMappingModule/Sources/Base/DmsFeaturesResponseDTO.swift b/Projects/Services/DataMappingModule/Sources/Base/DmsFeaturesResponseDTO.swift index f02870c9..679522b5 100644 --- a/Projects/Services/DataMappingModule/Sources/Base/DmsFeaturesResponseDTO.swift +++ b/Projects/Services/DataMappingModule/Sources/Base/DmsFeaturesResponseDTO.swift @@ -5,13 +5,9 @@ public struct DmsFeaturesResponseDTO: Decodable { } public struct DmsFeaturesDTO: Decodable { - public let mealService: Bool - public let noticeService: Bool - public let pointService: Bool + public let studyRoomService: Bool enum CodingKeys: String, CodingKey { - case mealService = "meal_service" - case noticeService = "notice_service" - case pointService = "point_service" + case studyRoomService = "study_room_service" } } diff --git a/Projects/Services/DataModule/Sources/Auth/Repositories/Stub/AuthRepositoryStub.swift b/Projects/Services/DataModule/Sources/Auth/Repositories/Stub/AuthRepositoryStub.swift index c7a851dd..78fbb2fb 100644 --- a/Projects/Services/DataModule/Sources/Auth/Repositories/Stub/AuthRepositoryStub.swift +++ b/Projects/Services/DataModule/Sources/Auth/Repositories/Stub/AuthRepositoryStub.swift @@ -9,7 +9,7 @@ public struct AuthRepositoryStub: AuthRepository { public func logout() {} public func signin(req: SigninRequestDTO) -> AnyPublisher { - Just(DmsFeatures(mealService: false, noticeService: false, pointService: false)) + Just(DmsFeatures(studyRoomService: false)) .setFailureType(to: DmsError.self) .eraseToAnyPublisher() } @@ -25,7 +25,7 @@ public struct AuthRepositoryStub: AuthRepository { } public func reissueToken() -> AnyPublisher { - Just(DmsFeatures(mealService: false, noticeService: false, pointService: false)) + Just(DmsFeatures(studyRoomService: false)) .setFailureType(to: DmsError.self) .eraseToAnyPublisher() } diff --git a/Projects/Services/DataModule/Sources/Auth/UseCases/Fake/SigninUseCaseFake.swift b/Projects/Services/DataModule/Sources/Auth/UseCases/Fake/SigninUseCaseFake.swift index 1fdd1bd9..5c9197b8 100644 --- a/Projects/Services/DataModule/Sources/Auth/UseCases/Fake/SigninUseCaseFake.swift +++ b/Projects/Services/DataModule/Sources/Auth/UseCases/Fake/SigninUseCaseFake.swift @@ -9,7 +9,7 @@ public struct SigninUseCaseFake: SigninUseCase { public func execute(req: SigninRequestDTO) -> AnyPublisher { if req.accountID == "baekteun" && req.password == "baekteun" { - return Just(DmsFeatures(mealService: false, noticeService: false, pointService: false)) + return Just(DmsFeatures(studyRoomService: false)) .setFailureType(to: DmsError.self) .delay(for: 1, scheduler: DispatchQueue.main) .eraseToAnyPublisher() diff --git a/Projects/Services/DomainModule/Sources/Entities/DmsFeatures.swift b/Projects/Services/DomainModule/Sources/Entities/DmsFeatures.swift index 3a354850..f0c9f1f6 100644 --- a/Projects/Services/DomainModule/Sources/Entities/DmsFeatures.swift +++ b/Projects/Services/DomainModule/Sources/Entities/DmsFeatures.swift @@ -2,22 +2,14 @@ import Foundation public struct DmsFeatures: Equatable { public init( - mealService: Bool, - noticeService: Bool, - pointService: Bool + studyRoomService: Bool ) { - self.mealService = mealService - self.noticeService = noticeService - self.pointService = pointService + self.studyRoomService = studyRoomService } public init() { - self.mealService = false - self.noticeService = false - self.pointService = false + self.studyRoomService = false } - public let mealService: Bool - public let noticeService: Bool - public let pointService: Bool + public let studyRoomService: Bool } diff --git a/Projects/Services/NetworkModule/Sources/Auth/Remote/Stub/RemoteAuthDataSourceStub.swift b/Projects/Services/NetworkModule/Sources/Auth/Remote/Stub/RemoteAuthDataSourceStub.swift index bdca3f12..3f8fef41 100644 --- a/Projects/Services/NetworkModule/Sources/Auth/Remote/Stub/RemoteAuthDataSourceStub.swift +++ b/Projects/Services/NetworkModule/Sources/Auth/Remote/Stub/RemoteAuthDataSourceStub.swift @@ -7,7 +7,7 @@ public struct RemoteAuthDataSourceStub: RemoteAuthDataSource { public init() {} public func signin(req: SigninRequestDTO) -> AnyPublisher { - Just(DmsFeatures(mealService: false, noticeService: false, pointService: false)) + Just(DmsFeatures(studyRoomService: false)) .setFailureType(to: DmsError.self) .eraseToAnyPublisher() } @@ -23,7 +23,7 @@ public struct RemoteAuthDataSourceStub: RemoteAuthDataSource { } public func reissueToken() -> AnyPublisher { - Just(DmsFeatures(mealService: false, noticeService: false, pointService: false)) + Just(DmsFeatures(studyRoomService: false)) .setFailureType(to: DmsError.self) .eraseToAnyPublisher() } diff --git a/Projects/Services/NetworkModule/Sources/Base/DataTransfer/DmsFeaturesDataTransfer.swift b/Projects/Services/NetworkModule/Sources/Base/DataTransfer/DmsFeaturesDataTransfer.swift index 49a76481..7f4af614 100644 --- a/Projects/Services/NetworkModule/Sources/Base/DataTransfer/DmsFeaturesDataTransfer.swift +++ b/Projects/Services/NetworkModule/Sources/Base/DataTransfer/DmsFeaturesDataTransfer.swift @@ -4,9 +4,7 @@ import DomainModule public extension DmsFeaturesResponseDTO { func toDomain() -> DmsFeatures { DmsFeatures( - mealService: features.mealService, - noticeService: features.noticeService, - pointService: features.pointService + studyRoomService: features.studyRoomService ) } } From c29ccb3dc96710decd5c470c6fd5580ddfe87e13 Mon Sep 17 00:00:00 2001 From: baegteun Date: Mon, 2 Jan 2023 20:37:28 +0900 Subject: [PATCH 37/40] =?UTF-8?q?feat=20::=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=B3=80=EA=B2=BD=20rootPresentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/CheckPassword/CheckPasswordView.swift | 3 ++- .../Sources/ModifyPassword/ModifyPasswordView.swift | 4 +++- .../Features/MyPageFeature/Sources/MyPage/MyPageView.swift | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift b/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift index f9becfcd..66a6f20e 100644 --- a/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift +++ b/Projects/Features/MyPageFeature/Sources/CheckPassword/CheckPasswordView.swift @@ -7,6 +7,7 @@ struct CheckPasswordView: View { @StateObject var viewModel: CheckPasswordViewModel let modifyPasswordComponent: ModifyPasswordComponent @Environment(\.dismiss) var dismiss + @Environment(\.rootPresentationMode) var rootPresentationMode init( viewModel: CheckPasswordViewModel, @@ -50,7 +51,7 @@ struct CheckPasswordView: View { .navigate( to: modifyPasswordComponent.makeView( currentPassword: viewModel.password - ), + ).environment(\.rootPresentationMode, rootPresentationMode), when: $viewModel.isSuccessCheckPassword ) } diff --git a/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift b/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift index 9480c58b..c31e53ba 100644 --- a/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift +++ b/Projects/Features/MyPageFeature/Sources/ModifyPassword/ModifyPasswordView.swift @@ -11,6 +11,7 @@ struct ModifyPasswordView: View { @FocusState private var focusField: FocusField? @StateObject var viewModel: ModifyPasswordViewModel @Environment(\.dismiss) var dismiss + @Environment(\.rootPresentationMode) var rootPresentationMode init( viewModel: ModifyPasswordViewModel @@ -73,7 +74,8 @@ struct ModifyPasswordView: View { .ignoresSafeArea(.keyboard, edges: .bottom) .onChange(of: viewModel.isSuccessRenewalPassword) { newValue in if newValue { - NavigationUtil.popToRootView() + print("A") + rootPresentationMode.wrappedValue.dismiss() } } } diff --git a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift index bfb3685e..bc7407a7 100644 --- a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift +++ b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift @@ -166,7 +166,8 @@ struct MyPageView: View { when: $viewModel.isNavigateChangeProfile ) .navigate( - to: checkPasswordComponent.makeView(), + to: checkPasswordComponent.makeView() + .environment(\.rootPresentationMode, $viewModel.isNavigateChangePassword), when: $viewModel.isNavigateChangePassword ) .navigate( From e4593056a931b3c837c2dd1e5cc2638de2f33090 Mon Sep 17 00:00:00 2001 From: baegteun Date: Mon, 2 Jan 2023 21:05:49 +0900 Subject: [PATCH 38/40] =?UTF-8?q?feat=20::=20=EC=9E=90=EC=8A=B5=EC=8B=A4?= =?UTF-8?q?=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Component/StudyRoomSeatView.swift | 1 - .../StudyRoomDetailViewModel.swift | 19 ++++++++++--------- .../ErrorModule/Sources/DmsError.swift | 4 ++++ .../APIKit/Sources/StudyRoomsAPI.swift | 7 +++++++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift index 6ad74657..a9575107 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/Component/StudyRoomSeatView.swift @@ -32,7 +32,6 @@ extension StudyRoomDetailView { Text(viewModel.studyRoomDetail?.southDescription ?? "ska") .dmsFont(.etc(.button), color: Color.PrimaryVariant.lighten1) .padding(.bottom, 8) - } Text(viewModel.studyRoomDetail?.eastDescription ?? "서") diff --git a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift index 61a72471..de71fcc9 100644 --- a/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift +++ b/Projects/Features/ApplyFeature/Sources/StudyRoomDetail/StudyRoomDetailViewModel.swift @@ -118,13 +118,8 @@ final class StudyRoomDetailViewModel: BaseViewModel { return beforeArray } - var newArray = [SeatEntity]( - repeating: SeatEntity( - id: "", - widthLocation: 1, - heightLocation: 1, - status: .empty - ), + var newArray = [SeatEntity?]( + repeating: nil, count: width * height ) @@ -132,7 +127,13 @@ final class StudyRoomDetailViewModel: BaseViewModel { let index = (value.widthLocation - 1) * height + value.heightLocation - 1 newArray[index] = value } - return newArray + return newArray.compactMap { + $0 ?? SeatEntity( + id: UUID().uuidString, + widthLocation: 1, + heightLocation: 1, + status: .empty + ) + } } - } diff --git a/Projects/Modules/ErrorModule/Sources/DmsError.swift b/Projects/Modules/ErrorModule/Sources/DmsError.swift index 4c28eccb..bc9453ba 100644 --- a/Projects/Modules/ErrorModule/Sources/DmsError.swift +++ b/Projects/Modules/ErrorModule/Sources/DmsError.swift @@ -39,6 +39,7 @@ public enum DmsError: Error { // MARK: - StudyRooms case seatIsAlreadyExist + case notFoundAppliedSeat } extension DmsError: LocalizedError { @@ -116,6 +117,9 @@ extension DmsError: LocalizedError { // MARK: - StudyRooms case .seatIsAlreadyExist: return "이미 신청된 자리입니다" + + case .notFoundAppliedSeat: + return "신청한 자리가 없습니다" } } } diff --git a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift index 16108aa6..e47b32b9 100644 --- a/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift +++ b/Projects/Services/APIKit/Sources/StudyRoomsAPI.swift @@ -74,6 +74,13 @@ extension StudyRoomsAPI: DmsAPI { 500: .photoCapacityIsLarge ] + case .cancelStudyRoomSeat: + return [ + 400: .badRequest, + 404: .notFoundAppliedSeat, + 500: .internalServerError + ] + default: return [ 400: .badRequest, From 05c4f0766a15819344ce43b9b950d121bf5be432 Mon Sep 17 00:00:00 2001 From: baegteun Date: Mon, 2 Jan 2023 23:45:23 +0900 Subject: [PATCH 39/40] =?UTF-8?q?fix=20::=20=EB=AC=B4=EC=B0=A8=EB=B3=84=20?= =?UTF-8?q?=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EC=9D=B8=EC=A6=9D=20=ED=8F=AD?= =?UTF-8?q?=EA=B2=A9=20=EA=B3=A0=EC=B9=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyPageFeature/Sources/MyPage/MyPageView.swift | 1 + .../AuthenticationEmail/AuthenticationEmailView.swift | 8 +++++++- .../AuthenticationEmailViewModel.swift | 1 - .../Sources/EnterInformation/EnterInformationView.swift | 6 ++---- .../EnterInformation/EnterInformationViewModel.swift | 2 +- .../EmailAuthCodeVerifyView.swift | 6 ++++++ .../EmailAuthCodeVerifyViewModel.swift | 1 - Projects/Services/APIKit/Sources/StudentsAPI.swift | 2 +- 8 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift index bc7407a7..35b95f07 100644 --- a/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift +++ b/Projects/Features/MyPageFeature/Sources/MyPage/MyPageView.swift @@ -43,6 +43,7 @@ struct MyPageView: View { .resizable() .frame(width: 74, height: 74) .clipShape(Circle()) + .scaledToFill() } placeholder: { Color.GrayScale.gray5 .frame(width: 74, height: 74) diff --git a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift index cec884ba..02dd58e5 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailView.swift @@ -3,8 +3,9 @@ import DesignSystem struct AuthenticationEmailView: View { @StateObject var viewModel: AuthenticationEmailViewModel - let changePasswordComponent: ChangePasswordComponent + private let changePasswordComponent: ChangePasswordComponent @Environment(\.dismiss) var dismiss + @State var isViewDidLoad = false init( viewModel: AuthenticationEmailViewModel, @@ -51,6 +52,11 @@ struct AuthenticationEmailView: View { viewModel.verifyEmailAuthCode() } } + .onAppear { + if !isViewDidLoad { + viewModel.sendEmailAuthCode() + } + } .dmsToast(isShowing: $viewModel.isShowingToast, message: viewModel.toastMessage, style: .success) .navigate( to: changePasswordComponent.makeView( diff --git a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift index 56d1e9c4..8c46408c 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/AuthenticationEmail/AuthenticationEmailViewModel.swift @@ -36,7 +36,6 @@ final class AuthenticationEmailViewModel: BaseViewModel { self.authenticationEmailParam = authenticationEmailParam super.init() - sendEmailAuthCode() addCancellable( timer.setFailureType(to: DmsError.self).eraseToAnyPublisher() ) { [weak self] _ in diff --git a/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift b/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift index 45064831..441827ce 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationView.swift @@ -10,7 +10,7 @@ struct EnterInformationView: View { @FocusState private var focusField: FocusField? @StateObject var viewModel: EnterInformationViewModel - let authenticationEmailComponent: AuthenticationEmailComponent + private let authenticationEmailComponent: AuthenticationEmailComponent @Environment(\.dismiss) var dismiss public init( @@ -45,7 +45,6 @@ struct EnterInformationView: View { if viewModel.isShowFoundEmail { BlockEmailView(email: $viewModel.blockEmail) } - } .padding(.top, 68) .transition(.slide) @@ -72,7 +71,7 @@ struct EnterInformationView: View { DMSWideButton(text: "다음", color: .PrimaryVariant.primary) { viewModel.nextButtonDidTap() } - .disabled(!viewModel.isNextButtonEnabled ) + .disabled(!viewModel.isNextButtonEnabled) .padding(.bottom, 40) } .onAppear { @@ -93,6 +92,5 @@ struct EnterInformationView: View { .frame(maxWidth: .infinity) .ignoresSafeArea(.keyboard, edges: .bottom) .padding(.horizontal, 24) - } } diff --git a/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationViewModel.swift b/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationViewModel.swift index 4b92c11d..233237a2 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationViewModel.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/EnterInformation/EnterInformationViewModel.swift @@ -6,7 +6,7 @@ final class EnterInformationViewModel: BaseViewModel { @Published var email = "" { didSet { isErrorOcuured = false } } - @Published var blockEmail = "082****@naver.com" + @Published var blockEmail = "" @Published var id = "" { didSet { isErrorOcuured = false } } diff --git a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift index 91503b4f..263292cb 100644 --- a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift +++ b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyView.swift @@ -5,6 +5,7 @@ import SwiftUI struct SignupEmailAuthCodeVerifyView: View { @StateObject var viewModel: SignupEmailAuthCodeVerifyViewModel @Environment(\.dismiss) var dismiss + @State var isViewDidLoad = false private let idSettingComponent: IDSettingComponent init( @@ -44,6 +45,11 @@ struct SignupEmailAuthCodeVerifyView: View { .padding(.top, 32) .padding(.bottom, 40) } + .onAppear { + if !isViewDidLoad { + viewModel.sendEmailAuthCode() + } + } .onChange(of: viewModel.authCode) { newValue in if newValue.count == 6 { viewModel.verifyEmailAuthCode() diff --git a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift index 72137ec6..51691e88 100644 --- a/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift +++ b/Projects/Features/SignupFeature/Sources/SignupEmailAuthCodeVerify/EmailAuthCodeVerifyViewModel.swift @@ -32,7 +32,6 @@ final class SignupEmailAuthCodeVerifyViewModel: BaseViewModel { self.verifyAuthCodeUseCase = verifyAuthCodeUseCase self.signupEmailAuthCodeVerifyParam = signupEmailAuthCodeVerifyParam super.init() - sendEmailAuthCode() addCancellable( timer.setFailureType(to: DmsError.self).eraseToAnyPublisher() diff --git a/Projects/Services/APIKit/Sources/StudentsAPI.swift b/Projects/Services/APIKit/Sources/StudentsAPI.swift index e52f4953..e35c6657 100644 --- a/Projects/Services/APIKit/Sources/StudentsAPI.swift +++ b/Projects/Services/APIKit/Sources/StudentsAPI.swift @@ -31,7 +31,7 @@ extension StudentsAPI: DmsAPI { return "/email/duplication" case .renewalPassword: - return "/password/intialization" + return "/password/initialization" case let .findID(req): return "/account-id/\(req.schoolID)" From 6e2bff834926888755d97ed926248cd422f93a0d Mon Sep 17 00:00:00 2001 From: baegteun Date: Tue, 3 Jan 2023 14:59:11 +0900 Subject: [PATCH 40/40] =?UTF-8?q?:sparkles:=20::=20=EB=B9=84=EB=B2=88=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/ChangePassword/ChangePasswordViewModel.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordViewModel.swift b/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordViewModel.swift index 6ca2b972..80f8c525 100644 --- a/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordViewModel.swift +++ b/Projects/Features/RenewalPasswordFeature/Sources/ChangePassword/ChangePasswordViewModel.swift @@ -58,8 +58,6 @@ final class ChangePasswordViewModel: BaseViewModel { ) ) { [weak self] _ in self?.isSuccessRenewalPassword = true - } onReceiveError: { [weak self] _ in - self?.isShowingToast = true } }