From b603f1b93284f61f8d65070eec02b9b026cb7248 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Thu, 12 Sep 2024 01:25:21 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[IDLE-000]=20=EC=84=BC=ED=84=B0=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=ED=94=84=EB=A6=AC=EB=B7=B0=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterProfileRegisterCoordinator.swift | 14 +- .../RegisterCenterInfoCoordinator.swift | 15 +- .../ProfileRegisterOverviewVC.swift | 295 ++++++++++++++++++ .../RegisterCenterInfoVM.swift | 51 ++- .../CenterProfileRegisterCoordinatable.swift | 4 +- 5 files changed, 331 insertions(+), 48 deletions(-) create mode 100644 project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift index d499aeab..582dbaa4 100644 --- a/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift @@ -51,14 +51,12 @@ class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable { extension CenterProfileRegisterCoordinator { - func showCompleteScreen(cardVO: Entity.CenterProfileCardVO) { - let coordinator = ProfileRegisterCompleteCoordinator( - cardVO: cardVO, - navigationController: navigationController - ) - addChildCoordinator(coordinator) - coordinator.parent = self - coordinator.start() + func showCompleteScreen() { + + } + + func showPreviewScreen(stateObject: CenterProfileRegisterState) { + } func showMyCenterProfile() { diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift index cbbd3a24..8bc78f79 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift @@ -16,14 +16,13 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { public weak var parent: CenterProfileRegisterCoordinatable? public let navigationController: UINavigationController - - public let viewModel: RegisterCenterInfoViewModelable + let profileUseCase: CenterProfileUseCase public init( profileUseCase: CenterProfileUseCase, navigationController: UINavigationController ) { - self.viewModel = RegisterCenterInfoVM(profileUseCase: profileUseCase) + self.profileUseCase = profileUseCase self.navigationController = navigationController } @@ -33,7 +32,11 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { public func start() { let vc = RegisterCenterInfoVC(coordinator: self) - vc.bind(viewModel: viewModel) + let vm = RegisterCenterInfoVM( + coordinator: self, + profileUseCase: profileUseCase + ) + vc.bind(viewModel: vm) viewControllerRef = vc @@ -47,8 +50,8 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { extension RegisterCenterInfoCoordinator { - func showCompleteScreen(cardVO: CenterProfileCardVO) { - parent?.showCompleteScreen(cardVO: cardVO) + func showPreviewScreen(stateObject: CenterProfileRegisterState) { + parent?.showPreviewScreen(stateObject: stateObject) } func registerFinished() { diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift new file mode 100644 index 00000000..af808adf --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift @@ -0,0 +1,295 @@ +// +// ProfileRegisterOverviewVC.swift +// CenterFeature +// +// Created by choijunios on 9/12/24. +// + +import UIKit +import BaseFeature +import PresentationCore +import RxCocoa +import RxSwift +import Entity +import DSKit + +public class ProfileRegisterOverviewVC: BaseViewController { + + // Init + + // View + lazy var navigationBar: IdleNavigationBar = { + let bar = IdleNavigationBar(innerViews: []) + return bar + }() + + let confirmLabel: IdleLabel = { + let label = IdleLabel(typography: .Heading1) + label.textString = "다음의 센터 정보가 맞는지\n확인해주세요" + label.textAlignment = .left + label.numberOfLines = 2 + return label + }() + + /// Center name label + let centerNameLabel: IdleLabel = { + let label = IdleLabel(typography: .Heading1) + return label + }() + + /// Center location label + let centerLocationLabel: IdleLabel = { + let label = IdleLabel(typography: .Body2) + + return label + }() + + /// ☑️ 센터 상세정보 ☑️ + let centerDetailLabel: IdleLabel = { + let label = IdleLabel(typography: .Body2) + label.textString = "센터 상세 정보" + label.textAlignment = .left + return label + }() + + /// ☑️ "전화번호" 라벨 ☑️ + let centerPhoneNumeberTitleLabel: IdleLabel = { + let label = IdleLabel(typography: .Subtitle4) + label.textString = "전화번호" + label.textColor = DSKitAsset.Colors.gray500.color + return label + }() + + /// 센터 전화번호가 표시되는 라벨 + let centerPhoneNumeberLabel: IdleLabel = { + let label = IdleLabel(typography: .Body3) + return label + }() + /// ☑️ "센토 소개" 라벨 ☑️ + let centerIntroductionTitleLabel: IdleLabel = { + let label = IdleLabel(typography: .Subtitle4) + label.textString = "센터 소개" + label.textColor = DSKitAsset.Colors.gray500.color + return label + }() + + /// 센터 소개가 표시되는 라벨 + let centerIntroductionLabel: IdleLabel = { + let label = IdleLabel(typography: .Body3) + label.numberOfLines = 0 + return label + }() + /// ☑️ "센터 사진" 라벨 ☑️ + let centerPictureLabel: IdleLabel = { + let label = IdleLabel(typography: .Subtitle4) + label.textString = "센터 사진" + label.textColor = DSKitAsset.Colors.gray500.color + return label + }() + private lazy var centerImageView: ImageSelectView = { + let view = ImageSelectView(state: .editing, viewController: self) + return view + }() + + // buttons + let prevButton: IdleThirdinaryButton = { + let button = IdleThirdinaryButton(level: .medium) + button.label.textString = "이전" + return button + }() + let confirmButton: IdlePrimaryButton = { + let button = IdlePrimaryButton(level: .medium) + button.label.textString = "확인했어요" + return button + }() + + + public init() { + super.init(nibName: nil, bundle: nil) + } + + public required init?(coder: NSCoder) { fatalError() } + + public override func viewDidLoad() { + super.viewDidLoad() + + setAppearance() + setLayout() + setObservable() + } + + private func setAppearance() { + view.backgroundColor = DSColor.gray0.color + } + + private func setLayout() { + + // MARK: UpperView + let locationIcon = DSIcon.location.image.toView() + locationIcon.tintColor = DSColor.gray700.color + let centerLocationLabelStack = HStack([locationIcon,centerLocationLabel], spacing: 2) + let centerInfoStack = VStack([centerNameLabel, centerLocationLabelStack], spacing: 8, alignment: .leading) + + let upperStack = HStack([VStack([confirmLabel, centerInfoStack], spacing: 32, alignment: .leading), Spacer()], alignment: .fill) + + let upperStackBackView = UIView() + upperStackBackView.layoutMargins = .init( + top: 36, + left: 20, + bottom: 24, + right: 0 + ) + upperStackBackView.addSubview(upperStack) + upperStack.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + upperStack.topAnchor.constraint(equalTo: upperStackBackView.topAnchor), + upperStack.leftAnchor.constraint(equalTo: upperStackBackView.leftAnchor), + upperStack.rightAnchor.constraint(equalTo: upperStackBackView.rightAnchor), + upperStack.bottomAnchor.constraint(equalTo: upperStackBackView.bottomAnchor), + ]) + + // MARK: BelowView + let phoneNumberStack = VStack([ + centerPhoneNumeberTitleLabel, + centerPhoneNumeberLabel + ], alignment: .leading) + + let introduceStack = VStack([ + centerIntroductionTitleLabel, + centerIntroductionLabel + ], alignment: .leading) + + let centerPhotoStack = VStack([ + centerPictureLabel, + centerImageView + ], alignment: .leading) + + var belowStack = VStack([ + phoneNumberStack, + introduceStack, + centerPhotoStack + ], spacing: 32, alignment: .fill) + + belowStack = VStack([ + centerDetailLabel, + belowStack + ], alignment: .fill) + + let belowStackBackView = UIView() + belowStackBackView.layoutMargins = .init( + top: 24, + left: 20, + bottom: 48, + right: 20 + ) + belowStackBackView.addSubview(belowStack) + belowStack.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + belowStack.topAnchor.constraint(equalTo: belowStackBackView.topAnchor), + belowStack.leftAnchor.constraint(equalTo: belowStackBackView.leftAnchor), + belowStack.rightAnchor.constraint(equalTo: belowStackBackView.rightAnchor), + belowStack.bottomAnchor.constraint(equalTo: belowStackBackView.bottomAnchor), + ]) + + // MARK: ButtonStack + + let buttonStack = HStack([prevButton, confirmButton], spacing: 8, distribution: .fillEqually) + buttonStack.layoutMargins = .init(top: 12, left: 20, bottom: 14, right: 20) + + let scrollView = UIScrollView() + + let divider = Spacer(height: 8) + divider.backgroundColor = DSColor.gray050.color + let contentView = VStack([ + upperStackBackView, + divider, + belowStackBackView, + buttonStack, + ]) + + scrollView.addSubview(contentView) + contentView.translatesAutoresizingMaskIntoConstraints = false + + let contentGuide = scrollView.contentLayoutGuide + NSLayoutConstraint.activate([ + contentView.topAnchor.constraint(equalTo: contentGuide.topAnchor), + contentView.leftAnchor.constraint(equalTo: contentGuide.leftAnchor), + contentView.rightAnchor.constraint(equalTo: contentGuide.rightAnchor), + contentView.bottomAnchor.constraint(equalTo: contentGuide.bottomAnchor), + + contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor), + ]) + + // MARK: main + + [ + navigationBar, + scrollView, + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + view.addSubview($0) + } + + NSLayoutConstraint.activate([ + navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + navigationBar.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor), + navigationBar.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor), + + scrollView.topAnchor.constraint(equalTo: navigationBar.topAnchor), + scrollView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor), + scrollView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor), + scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + ]) + } + + private func setObservable() { + + } + + public func bind(viewModel: CenterProfileViewModelable) { + + super.bind(viewModel: viewModel) + + // input + + rx.viewDidLoad + .bind(to: viewModel.readyToFetch) + .disposed(by: disposeBag) + + navigationBar + .backButton + .rx.tap + .bind(to: viewModel.exitButtonClicked) + .disposed(by: disposeBag) + + // output + + navigationBar.titleLabel.textString = viewModel.navigationBarTitle + + viewModel + .centerName? + .drive(centerNameLabel.rx.textString) + .disposed(by: disposeBag) + + viewModel + .centerLocation? + .drive(centerLocationLabel.rx.textString) + .disposed(by: disposeBag) + + viewModel + .centerPhoneNumber? + .drive(centerPhoneNumeberLabel.rx.textString) + .disposed(by: disposeBag) + + viewModel + .centerIntroduction? + .drive(centerIntroductionLabel.rx.textString) + .disposed(by: disposeBag) + + viewModel + .displayingImage? + .drive(centerImageView.displayingImage) + .disposed(by: disposeBag) + } +} + diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift index 2141efe2..929ae14a 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift @@ -15,6 +15,9 @@ import BaseFeature public class RegisterCenterInfoVM: BaseViewModel, RegisterCenterInfoViewModelable { + // Init + weak var coordinator: RegisterCenterInfoCoordinator? + // Input public var editingName: PublishRelay = .init() public var editingCenterNumber: PublishRelay = .init() @@ -34,8 +37,8 @@ public class RegisterCenterInfoVM: BaseViewModel, RegisterCenterInfoViewModelabl // StatObject private let stateObject = CenterProfileRegisterState() - public init(profileUseCase useCase: CenterProfileUseCase) { - + public init(coordinator: RegisterCenterInfoCoordinator, profileUseCase useCase: CenterProfileUseCase) { + self.coordinator = coordinator super.init() // Set stream @@ -114,41 +117,25 @@ public class RegisterCenterInfoVM: BaseViewModel, RegisterCenterInfoViewModelabl } .asDriver(onErrorJustReturn: .init()) - let profileRegisterResult = self.completeButtonPressed - .flatMap { [useCase, stateObject] _ in -#if DEBUG - return Single>.just(.success(())) -#endif - return useCase.registerCenterProfile(state: stateObject) - } - - profileRegisterSuccess = profileRegisterResult - .compactMap { $0.value } - .map { [stateObject] in - let cardVO = CenterProfileCardVO( - name: stateObject.centerName, - location: stateObject.roadNameAddress - ) - return cardVO - } - .asDriver(onErrorJustReturn: .default) - - let profileRegisterFailure = profileRegisterResult - .compactMap { $0.error } - .map { error in - DefaultAlertContentVO( - title: "센터정보 등록 실패", - message: error.message - ) - } + self.completeButtonPressed + .subscribe(onNext: { [weak self] _ in + + guard let self else { return } + + // 프리뷰화면으로 이동 + coordinator.showPreviewScreen(stateObject: stateObject) + }) + .disposed(by: disposeBag) // Alert Observable .merge( - imageValidationFailure, - profileRegisterFailure + imageValidationFailure ) - .subscribe(alert) + .subscribe(onNext: { [weak self] alertVO in + + self?.alert.onNext(alertVO) + }) .disposed(by: disposeBag) } diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift index a08e4579..301459a3 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift +++ b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift @@ -11,6 +11,6 @@ import Entity public protocol CenterProfileRegisterCoordinatable: ParentCoordinator { func registerFinished() - func showCompleteScreen(cardVO: CenterProfileCardVO) - func showMyCenterProfile() + func showPreviewScreen(stateObject: CenterProfileRegisterState) + func showCompleteScreen() } From f5ae9d196742035ddc44cd0e3a33c93b432bcb4a Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Thu, 12 Sep 2024 02:25:11 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[IDLE-000]=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=ED=9B=84=20=EB=AF=B8=EB=A6=AC=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=ED=99=94=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterProfileRegisterCoordinator.swift | 11 +- .../RootCoordinator+Extension.swift | 1 + .../Auth/AuthRepository.swift | 1 - .../ExampleApp/Sources/SceneDelegate.swift | 6 +- .../ProfileRegisterCompleteCoordinator.swift | 2 +- .../ProfileRegisterOverviewCO.swift | 65 ++++++++++ .../RegisterCenterInfoCoordinator.swift | 5 +- .../View/CenterAuth/CenterAuthVC.swift | 1 + .../CenterCertificateIntroductionVC.swift | 44 ------- .../ProfileRegisterOverviewVC.swift | 113 ++++++++---------- .../RegisterCenterInfoVC.swift | 18 +-- .../RegisterCenterInfoVM.swift | 3 +- .../RegisterProfileOverviewVM.swift | 74 ++++++++++++ .../InitialScreen/InitialScreenVM.swift | 6 +- 14 files changed, 215 insertions(+), 135 deletions(-) create mode 100644 project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift create mode 100644 project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift index 582dbaa4..305e4517 100644 --- a/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift @@ -56,7 +56,16 @@ extension CenterProfileRegisterCoordinator { } func showPreviewScreen(stateObject: CenterProfileRegisterState) { - + let coordinator = ProfileRegisterOverviewCO( + dependency: .init( + navigationController: navigationController, + stateObject: stateObject, + profileUseCase: injector.resolve(CenterProfileUseCase.self) + ) + ) + addChildCoordinator(coordinator) + coordinator.parent = self + coordinator.start() } func showMyCenterProfile() { diff --git a/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift b/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift index e86a8b5a..0c1772a9 100644 --- a/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift +++ b/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift @@ -57,6 +57,7 @@ extension RootCoordinator: RootCoorinatable { addChildCoordinator(coordinator) coordinator.start() + } /// 요양보호사 메인화면을 실행합니다. func workerMain() { diff --git a/project/Projects/Domain/RepositoryInterface/Auth/AuthRepository.swift b/project/Projects/Domain/RepositoryInterface/Auth/AuthRepository.swift index 5191ee75..f3297653 100644 --- a/project/Projects/Domain/RepositoryInterface/Auth/AuthRepository.swift +++ b/project/Projects/Domain/RepositoryInterface/Auth/AuthRepository.swift @@ -24,5 +24,4 @@ public protocol AuthRepository: RepositoryBase { func requestWorkerLogin(phoneNumber: String, authNumber: String) -> Single func signoutWorkerAccount() -> Single func deregisterWorkerAccount(reasons: [DeregisterReasonVO]) -> Single - func getCenterJoinStatus() -> RxSwift.Single } diff --git a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift index 6a8b298f..b9734af1 100644 --- a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift @@ -12,6 +12,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? + var coordinator: RegisterCenterInfoCoordinator! + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = scene as? UIWindowScene else { return } @@ -23,9 +25,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(windowScene: windowScene) - window?.rootViewController = AuthStateDisplayVC(state: .requestCenterInfo) + window?.rootViewController = navigationController window?.makeKeyAndVisible() - + coordinator.start() } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift index 6fa76389..827cef61 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift @@ -45,7 +45,7 @@ public class ProfileRegisterCompleteCoordinator: ChildCoordinator { extension ProfileRegisterCompleteCoordinator { func showCenterProfile() { - parent?.showMyCenterProfile() + } func registerFinished() { diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift new file mode 100644 index 00000000..b671a773 --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift @@ -0,0 +1,65 @@ +// +// ProfileRegisterOverviewCO.swift +// CenterFeature +// +// Created by choijunios on 9/12/24. +// + +import UIKit +import Entity +import PresentationCore +import UseCaseInterface + +public class ProfileRegisterOverviewCO: ChildCoordinator { + + public struct Dependency { + let navigationController: UINavigationController + let stateObject: CenterProfileRegisterState + let profileUseCase: CenterProfileUseCase + + public init(navigationController: UINavigationController, stateObject: CenterProfileRegisterState, profileUseCase: CenterProfileUseCase) { + self.navigationController = navigationController + self.stateObject = stateObject + self.profileUseCase = profileUseCase + } + } + + public weak var viewControllerRef: UIViewController? + public weak var parent: CenterProfileRegisterCoordinatable? + + public let navigationController: UINavigationController + let stateObject: CenterProfileRegisterState + let profileUseCase: CenterProfileUseCase + + public init(dependency: Dependency) { + self.navigationController = dependency.navigationController + self.stateObject = dependency.stateObject + self.profileUseCase = dependency.profileUseCase + } + + deinit { + printIfDebug("\(String(describing: RegisterRecruitmentCoordinator.self))") + } + + public func start() { + let vc = ProfileRegisterOverviewVC() + let vm = RegisterProfileOverviewVM( + coordinator: self, + stateObject: stateObject, + profileUseCase: profileUseCase + ) + vc.bind(viewModel: vm) + + viewControllerRef = vc + navigationController.pushViewController(vc, animated: true) + } + + public func coordinatorDidFinish() { + parent?.removeChildCoordinator(self) + popViewController() + } + + func showCompleteScreen() { + parent?.showCompleteScreen() + } +} diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift index 8bc78f79..d39ccf37 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift @@ -32,10 +32,7 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { public func start() { let vc = RegisterCenterInfoVC(coordinator: self) - let vm = RegisterCenterInfoVM( - coordinator: self, - profileUseCase: profileUseCase - ) + let vm = RegisterCenterInfoVM(coordinator: self) vc.bind(viewModel: vm) viewControllerRef = vc diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/CenterAuth/CenterAuthVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/CenterAuth/CenterAuthVC.swift index 8c8f58f1..91214eca 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/CenterAuth/CenterAuthVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/CenterAuth/CenterAuthVC.swift @@ -200,3 +200,4 @@ class PageControllerDotView: HStack { } } } + diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/CenterCertificate/CenterCertificateIntroductionVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/CenterCertificate/CenterCertificateIntroductionVC.swift index 12c56129..f69794db 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/CenterCertificate/CenterCertificateIntroductionVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/CenterCertificate/CenterCertificateIntroductionVC.swift @@ -220,47 +220,3 @@ extension CenterCertificateIntroductionVC: UIPageViewControllerDelegate, UIPageV dotView.activateView(index) } } - -class PageControllerDotView: HStack { - - let accentColor = DSColor.orange500.color - let normalColor = DSColor.gray100.color - - // Init - let pageCnt: Int - - // View - private var dotViews: [Int: UIView] = [:] - - init(pageCnt: Int) { - self.pageCnt = pageCnt - super.init([], spacing: 12) - setLayout() - } - required init(coder: NSCoder) { fatalError() } - - func setLayout() { - - let viewList = (0..? { get } var imageValidation: Driver? { get } - var profileRegisterSuccess: Driver? { get } } fileprivate protocol RegisterCenterInfoVCViews: UIView { @@ -509,39 +508,32 @@ extension RegisterCenterInfoVC { ]) } - public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + public func bind(viewModel: RegisterCenterInfoViewModelable) { // Input centerIntroductionField .rx.text .compactMap { $0 } - .bind(to: vm.editingCenterIntroduction) + .bind(to: viewModel.editingCenterIntroduction) .disposed(by: disposeBag) centerImageView .selectedImage .compactMap { $0 } - .bind(to: vm.editingCenterImage) + .bind(to: viewModel.editingCenterImage) .disposed(by: disposeBag) // 완료버튼 ctaButton .eventPublisher - .bind(to: vm.completeButtonPressed) + .bind(to: viewModel.completeButtonPressed) .disposed(by: disposeBag) // Output - vm + viewModel .imageValidation? .drive(centerImageView.displayingImage) .disposed(by: disposeBag) - - vm - .profileRegisterSuccess? - .drive(onNext: { [weak coordinator] cardVO in - coordinator?.showCompleteScreen(cardVO: cardVO) - }) - .disposed(by: disposeBag) } } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift index 929ae14a..bd56d343 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift @@ -32,12 +32,11 @@ public class RegisterCenterInfoVM: BaseViewModel, RegisterCenterInfoViewModelabl public var addressValidation: Driver? = nil public var introductionValidation: Driver? = nil public var imageValidation: Driver? = nil - public var profileRegisterSuccess: Driver? = nil // StatObject private let stateObject = CenterProfileRegisterState() - public init(coordinator: RegisterCenterInfoCoordinator, profileUseCase useCase: CenterProfileUseCase) { + public init(coordinator: RegisterCenterInfoCoordinator) { self.coordinator = coordinator super.init() diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift new file mode 100644 index 00000000..131842fc --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift @@ -0,0 +1,74 @@ +// +// RegisterProfileOverviewVM.swift +// CenterFeature +// +// Created by choijunios on 9/12/24. +// + +import Foundation +import BaseFeature +import Entity +import UseCaseInterface +import PresentationCore + +import RxSwift +import RxCocoa + +public class RegisterProfileOverviewVM: BaseViewModel { + + // Init + weak var coordinator: ProfileRegisterOverviewCO? + let profileUseCase: CenterProfileUseCase + + // input + let backButtonClicked: PublishSubject = .init() + let requestProfileRegister: PublishSubject = .init() + + // output + var renderObject: CenterProfileRegisterState + + + init( + coordinator: ProfileRegisterOverviewCO, + stateObject: CenterProfileRegisterState, + profileUseCase: CenterProfileUseCase + ) { + self.coordinator = coordinator + self.renderObject = stateObject + self.profileUseCase = profileUseCase + + super.init() + + let registerResult = mapEndLoading(mapStartLoading(requestProfileRegister) + .flatMap { [profileUseCase, stateObject] _ in + profileUseCase + .registerCenterProfile(state: stateObject) + }) + .share() + + backButtonClicked + .observe(on: MainScheduler.instance) + .subscribe(onNext: { [weak self] _ in + self?.coordinator?.coordinatorDidFinish() + }) + .disposed(by: disposeBag) + + registerResult.subscribe(onNext: { [weak self] result in + + guard let self else { return } + + switch result { + case .success: + coordinator.showCompleteScreen() + case .failure(let error): + let alertVO = DefaultAlertContentVO( + title: "프로필 등록 오류", + message: error.message + ) + + alert.onNext(alertVO) + } + }) + .disposed(by: disposeBag) + } +} diff --git a/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift b/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift index 1a1dcf0d..7ac69720 100644 --- a/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift +++ b/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift @@ -172,10 +172,8 @@ public class InitialScreenVM: BaseViewModel { return info case .pending, .new: - // Test - return info - - self.coordinator?.centerAuth() + // Test + self.coordinator?.makeCenterProfile() return nil } From 4aaff5435b0a0b3d7d6943144c93f9021eded75a Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Thu, 12 Sep 2024 02:35:16 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[IDLE-000]=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterProfileRegisterCoordinator.swift | 12 +- ... => CenterProfileRegisterOverviewCO.swift} | 6 +- .../ProfileRegisterCompleteCoordinator.swift | 54 ------ .../CenterProfileRegisterCompleteVC.swift | 106 ++++++++++ ... => CenterProfileRegisterOverviewVC.swift} | 6 +- .../ProfileRegisterCompleteVC.swift | 181 ------------------ .../RegisterProfileOverviewVM.swift | 11 +- .../InitialScreen/InitialScreenVM.swift | 4 - 8 files changed, 128 insertions(+), 252 deletions(-) rename project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/{ProfileRegisterOverviewCO.swift => CenterProfileRegisterOverviewCO.swift} (92%) delete mode 100644 project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift create mode 100644 project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterCompleteVC.swift rename project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/{ProfileRegisterOverviewVC.swift => CenterProfileRegisterOverviewVC.swift} (98%) delete mode 100644 project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift index 305e4517..1c499335 100644 --- a/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /SubCoordinator/CenterProfileRegisterCoordinator.swift @@ -52,11 +52,19 @@ class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable { extension CenterProfileRegisterCoordinator { func showCompleteScreen() { - + let vc = CenterProfileRegisterCompleteVC(coordinator: self) + let coordinator = CoordinatorWrapper( + parent: self, + nav: navigationController, + vc: vc + ) + addChildCoordinator(coordinator) + coordinator.parent = self + coordinator.start() } func showPreviewScreen(stateObject: CenterProfileRegisterState) { - let coordinator = ProfileRegisterOverviewCO( + let coordinator = CenterProfileRegisterOverviewCO( dependency: .init( navigationController: navigationController, stateObject: stateObject, diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileRegisterOverviewCO.swift similarity index 92% rename from project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift rename to project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileRegisterOverviewCO.swift index b671a773..853f5241 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterOverviewCO.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileRegisterOverviewCO.swift @@ -1,5 +1,5 @@ // -// ProfileRegisterOverviewCO.swift +// CenterProfileRegisterOverviewCO.swift // CenterFeature // // Created by choijunios on 9/12/24. @@ -10,7 +10,7 @@ import Entity import PresentationCore import UseCaseInterface -public class ProfileRegisterOverviewCO: ChildCoordinator { +public class CenterProfileRegisterOverviewCO: ChildCoordinator { public struct Dependency { let navigationController: UINavigationController @@ -42,7 +42,7 @@ public class ProfileRegisterOverviewCO: ChildCoordinator { } public func start() { - let vc = ProfileRegisterOverviewVC() + let vc = CenterProfileRegisterOverviewVC() let vm = RegisterProfileOverviewVM( coordinator: self, stateObject: stateObject, diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift deleted file mode 100644 index 827cef61..00000000 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// ProfileRegisterCompleteCoordinator.swift -// CenterFeature -// -// Created by choijunios on 7/27/24. -// - -import UIKit -import Entity -import PresentationCore -import UseCaseInterface - -public class ProfileRegisterCompleteCoordinator: ChildCoordinator { - - public weak var viewControllerRef: UIViewController? - public weak var parent: CenterProfileRegisterCoordinatable? - - public let navigationController: UINavigationController - private let viewModel: ProfileRegisterCompleteViewModelable - - public init( - cardVO: CenterProfileCardVO, - navigationController: UINavigationController - ) { - self.viewModel = ProfileRegisterCompleteVM(centerCardVO: cardVO) - self.navigationController = navigationController - } - - deinit { - printIfDebug("\(String(describing: RegisterCenterInfoCoordinator.self))") - } - - public func start() { - let vc = ProfileRegisterCompleteVC(coordinator: self) - vc.bind(viewModel: viewModel) - viewControllerRef = vc - navigationController.pushViewController(vc, animated: true) - } - - public func coordinatorDidFinish() { - parent?.removeChildCoordinator(self) - } -} - -extension ProfileRegisterCompleteCoordinator { - - func showCenterProfile() { - - } - - func registerFinished() { - parent?.registerFinished() - } -} diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterCompleteVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterCompleteVC.swift new file mode 100644 index 00000000..1affbf22 --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterCompleteVC.swift @@ -0,0 +1,106 @@ +// +// CenterProfileRegisterCompleteVC.swift +// CenterFeature +// +// Created by choijunios on 9/12/24. +// + +import UIKit +import BaseFeature +import PresentationCore +import RxCocoa +import RxSwift +import Entity +import DSKit + +public class CenterProfileRegisterCompleteVC: BaseViewController { + + // Init + + // Not init + weak var coordinator: CenterProfileRegisterCoordinatable? + + // View + private let ctaButton: CTAButtonType1 = { + + let button = CTAButtonType1(labelText: "확인") + + return button + }() + + public init(coordinator: CenterProfileRegisterCoordinatable) { + self.coordinator = coordinator + super.init(nibName: nil, bundle: nil) + } + + public required init?(coder: NSCoder) { fatalError() } + + public override func viewDidLoad() { + setAppearance() + setLayout() + setObservable() + } + + private func setAppearance() { + view.backgroundColor = .white + } + + private func setLayout() { + + let markImageView = DSKitAsset.Icons.completeMark.image.toView() + let completeLabel = IdleLabel(typography: .Heading1) + completeLabel.numberOfLines = 2 + completeLabel.textString = "센터 정보를 등록했어요!" + completeLabel.textAlignment = .center + + let imageLabelStack = VStack( + [ + markImageView, + completeLabel + ], + spacing: 36, + alignment: .center + ) + + let imageLabelStackBackView = UIView() + [ + imageLabelStack + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + imageLabelStackBackView.addSubview($0) + } + + + [ + imageLabelStackBackView, + ctaButton + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + view.addSubview($0) + } + + NSLayoutConstraint.activate([ + + imageLabelStack.centerXAnchor.constraint(equalTo: imageLabelStackBackView.centerXAnchor), + imageLabelStack.centerYAnchor.constraint(equalTo: imageLabelStackBackView.centerYAnchor), + + imageLabelStackBackView.topAnchor.constraint(equalTo: view.topAnchor), + imageLabelStackBackView.leftAnchor.constraint(equalTo: view.leftAnchor), + imageLabelStackBackView.rightAnchor.constraint(equalTo: view.rightAnchor), + imageLabelStackBackView.bottomAnchor.constraint(equalTo: ctaButton.topAnchor), + + ctaButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16), + ctaButton.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20), + ctaButton.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20), + ]) + } + + private func setObservable() { + + ctaButton.eventPublisher + .subscribe { [coordinator] _ in + coordinator?.registerFinished() + } + .disposed(by: disposeBag) + } +} diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterOverviewVC.swift similarity index 98% rename from project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift rename to project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterOverviewVC.swift index 9288db06..a32ae7d0 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterOverviewVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/CenterProfileRegisterOverviewVC.swift @@ -1,5 +1,5 @@ // -// ProfileRegisterOverviewVC.swift +// CenterProfileRegisterOverviewVC.swift // CenterFeature // // Created by choijunios on 9/12/24. @@ -13,7 +13,7 @@ import RxSwift import Entity import DSKit -public class ProfileRegisterOverviewVC: BaseViewController { +public class CenterProfileRegisterOverviewVC: BaseViewController { // Init @@ -247,7 +247,7 @@ public class ProfileRegisterOverviewVC: BaseViewController { } - public func bind(viewModel: RegisterProfileOverviewVM) { + func bind(viewModel: RegisterProfileOverviewVM) { super.bind(viewModel: viewModel) diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift deleted file mode 100644 index f41d76df..00000000 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift +++ /dev/null @@ -1,181 +0,0 @@ -// -// ProfileRegisterCompleteVC.swift -// CenterFeature -// -// Created by choijunios on 7/27/24. -// - -import UIKit -import BaseFeature -import PresentationCore -import RxCocoa -import RxSwift -import Entity -import DSKit - -public protocol ProfileRegisterCompleteViewModelable { - // Output - var centerCardVO: Driver { get } -} - -public class ProfileRegisterCompleteVM: ProfileRegisterCompleteViewModelable { - - public var centerCardVO: Driver - - public init(centerCardVO: CenterProfileCardVO) { - - self.centerCardVO = Single - .just(centerCardVO) - .asDriver(onErrorJustReturn: .default) - } - -} - -public class ProfileRegisterCompleteVC: UIViewController { - - // Init - weak var coordinator: ProfileRegisterCompleteCoordinator? - - // View - let registerSuccessTitle: IdleLabel = { - let label = IdleLabel(typography: .Heading1) - label.textString = "센터 회원으로 가입했어요." - return label - }() - // 추후 이미지 추가 예정 - let registerSuccessImage: UIView = { - let view = UIView() - view.backgroundColor = .cyan - return view - }() - - let centerProfileButton: CenterProfileButton = { - let profileBtn = CenterProfileButton( - nameString: "센터명", - locatonString: "위치" - ) - return profileBtn - }() - - // 하단 버튼 - let ctaButton: CTAButtonType1 = { - let button = CTAButtonType1(labelText: "시작하기") - return button - }() - - private let disposeBag = DisposeBag() - - public init(coordinator: ProfileRegisterCompleteCoordinator?) { - self.coordinator = coordinator - super.init(nibName: nil, bundle: nil) - } - required init?(coder: NSCoder) { fatalError() } - - public override func viewDidLoad() { - setAppearance() - setAutoLayout() - setObservable() - } - - private func setAppearance() { - view.backgroundColor = .white - view.layoutMargins = .init(top: 0, left: 20, bottom: 16, right: 20) - } - - private func setAutoLayout() { - - let titleImageSK = VStack( - [ - registerSuccessTitle, - registerSuccessImage, - ], - spacing: 20, - alignment: .center - ) - NSLayoutConstraint.activate([ - registerSuccessImage.widthAnchor.constraint(equalToConstant: 120), - registerSuccessImage.heightAnchor.constraint(equalTo: registerSuccessImage.widthAnchor), - ]) - - let profileButtonSK = VStack( - [ - { - let label = IdleLabel(typography: .Body3) - label.textString = "아래의 센터가 맞나요?" - label.textAlignment = .center - label.attrTextColor = DSKitAsset.Colors.gray300.color - return label - }(), - centerProfileButton - ], - spacing: 8, - alignment: .fill - ) - - let mainSK = VStack( - [ - titleImageSK, - profileButtonSK - ], - spacing: 44, - alignment: .fill - ) - - let mainBackground = UIView() - mainBackground.addSubview(mainSK) - mainSK.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - mainSK.centerYAnchor.constraint(equalTo: mainBackground.centerYAnchor), - mainSK.leadingAnchor.constraint(equalTo: mainBackground.leadingAnchor), - mainSK.trailingAnchor.constraint(equalTo: mainBackground.trailingAnchor), - ]) - - [ - mainBackground, - ctaButton, - ].forEach { - $0.translatesAutoresizingMaskIntoConstraints = false - view.addSubview($0) - } - - NSLayoutConstraint.activate([ - - mainBackground.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), - mainBackground.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - mainBackground.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - mainBackground.bottomAnchor.constraint(equalTo: ctaButton.topAnchor), - - ctaButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - ctaButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - ctaButton.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor) - ]) - } - - private func setObservable() { - - centerProfileButton - .rx.tap - .subscribe { [weak coordinator] _ in - coordinator?.showCenterProfile() - } - .disposed(by: disposeBag) - - ctaButton - .eventPublisher - .subscribe { [weak coordinator] _ in - coordinator?.registerFinished() - } - .disposed(by: disposeBag) - } - - public func bind(viewModel vm: ProfileRegisterCompleteViewModelable) { - - vm - .centerCardVO - .drive { [centerProfileButton] vo in - centerProfileButton.nameLabel.textString = vo.name - centerProfileButton.addressLabel.textString = vo.location - } - .disposed(by: disposeBag) - } -} diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift index 131842fc..7ed1a261 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterProfileOverviewVM.swift @@ -14,10 +14,10 @@ import PresentationCore import RxSwift import RxCocoa -public class RegisterProfileOverviewVM: BaseViewModel { +class RegisterProfileOverviewVM: BaseViewModel { // Init - weak var coordinator: ProfileRegisterOverviewCO? + weak var coordinator: CenterProfileRegisterOverviewCO? let profileUseCase: CenterProfileUseCase // input @@ -29,7 +29,7 @@ public class RegisterProfileOverviewVM: BaseViewModel { init( - coordinator: ProfileRegisterOverviewCO, + coordinator: CenterProfileRegisterOverviewCO, stateObject: CenterProfileRegisterState, profileUseCase: CenterProfileUseCase ) { @@ -40,8 +40,9 @@ public class RegisterProfileOverviewVM: BaseViewModel { super.init() let registerResult = mapEndLoading(mapStartLoading(requestProfileRegister) - .flatMap { [profileUseCase, stateObject] _ in - profileUseCase + .flatMap { [profileUseCase, stateObject] _ -> Single> in + + return profileUseCase .registerCenterProfile(state: stateObject) }) .share() diff --git a/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift b/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift index 7ac69720..432716b9 100644 --- a/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift +++ b/project/Projects/Presentation/Feature/Root/Sources/Screen/Common/InitialScreen/InitialScreenVM.swift @@ -171,10 +171,6 @@ public class InitialScreenVM: BaseViewModel { case .approved: return info case .pending, .new: - - // Test - self.coordinator?.makeCenterProfile() - return nil } }