From 7a909c69ee3820945c2b0fdaaa9bada85355f442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A4=80=ED=95=98?= Date: Wed, 26 Jun 2024 14:09:36 +0900 Subject: [PATCH] =?UTF-8?q?REFACT::=20[#350]=20AgreeViewModel=20=EB=A6=AC?= =?UTF-8?q?=ED=8E=99=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModel/AgreeViewModel.swift | 126 ++++++++++++++---- 1 file changed, 102 insertions(+), 24 deletions(-) diff --git a/Projects/Features/AuthFeature/Sources/SignupScene/ViewModel/AgreeViewModel.swift b/Projects/Features/AuthFeature/Sources/SignupScene/ViewModel/AgreeViewModel.swift index de8f1e21..16182fd3 100644 --- a/Projects/Features/AuthFeature/Sources/SignupScene/ViewModel/AgreeViewModel.swift +++ b/Projects/Features/AuthFeature/Sources/SignupScene/ViewModel/AgreeViewModel.swift @@ -1,5 +1,83 @@ -import Foundation +//import Foundation +// +//import RxSwift +//import RxCocoa +//import RxFlow +// +//import Core +//import Domain +//import SafariServices +// +//public class AgreeViewModel: BaseViewModel { +// +// public typealias ViewModel = AgreeViewModel +// +// private let useCase: AuthUseCase +// +// public var disposeBag: DisposeBag = DisposeBag() +// +// public struct Input { +// let navButtonTapped: Driver +// let allAgreeButtonTap: Signal +// let firstAgreeButtonTap: Signal +// let firstSeeMoreButtonTap: Driver +// let secondAgreeButtonTap: Signal +// let secondSeeMoreButtonTap: Single +// let thirdAgreeButtonTap: Signal +// let fourthAgreeButtonTap: Signal +// let nextButtonTap: Signal +// } +// +// public struct Output { +// let navButtonTapped: Driver +// let allAgreeButtonClickedMessage: Observable +// let firstAgreeButtonClickedMessage: Observable +// let secondAgreeButtonClickedMessage: Observable +// let thirdAgreeButtonClickedMessage: Observable +// let fourthAgreeButtonClickedMessage: Observable +// let nextButtonClicked: Driver +// } +// +// public init(useCase: AuthUseCase) { +// self.useCase = useCase +// } +// +// public func transform(_ input: Input, action: (Output) -> Void) -> Output { +// +// let allAgreeClickedMessage = input.allAgreeButtonTap.map { "전체 클릭" }.asObservable() +// let firstAgreeClickedMessage = input.firstAgreeButtonTap.map { "첫 번째 동의 클릭" }.asObservable() +// let secondAgreeClickedMessage = input.secondAgreeButtonTap.map { "두 번째 동의 클릭" }.asObservable() +// let thirdAgreeClickedMessage = input.thirdAgreeButtonTap.map { "세 번째 동의 클릭" }.asObservable() +// let fourthAgreeClickedMessage = input.fourthAgreeButtonTap.map { "네 번째 동의 클릭" }.asObservable() +// let nextButtonClicked = input.nextButtonTap.map { true }.asDriver(onErrorJustReturn: false) +// +// let output = Output(navButtonTapped: input.navButtonTapped.asDriver(), +// allAgreeButtonClickedMessage: allAgreeClickedMessage, +// firstAgreeButtonClickedMessage: firstAgreeClickedMessage, +// secondAgreeButtonClickedMessage: secondAgreeClickedMessage, +// thirdAgreeButtonClickedMessage: thirdAgreeClickedMessage, +// fourthAgreeButtonClickedMessage: fourthAgreeClickedMessage, +// nextButtonClicked: nextButtonClicked) +// +// action(output) +// +// input.navButtonTapped +// .drive(onNext: { _ in +// AuthStepper.shared.steps.accept(MGStep.authBack) +// }).disposed(by: disposeBag) +// +// input.firstSeeMoreButtonTap +// .drive(onNext: { _ in +// print("sex") +// +// }).disposed(by: disposeBag) +// +// +// return output +// } +//} +import Foundation import RxSwift import RxCocoa import RxFlow @@ -13,8 +91,7 @@ public class AgreeViewModel: BaseViewModel { public typealias ViewModel = AgreeViewModel private let useCase: AuthUseCase - - public var disposeBag: DisposeBag = DisposeBag() + private let disposeBag = DisposeBag() public struct Input { let navButtonTapped: Driver @@ -43,36 +120,37 @@ public class AgreeViewModel: BaseViewModel { } public func transform(_ input: Input, action: (Output) -> Void) -> Output { + let output = createOutput(from: input) + action(output) + handleSideEffects(input) + return output + } - let allAgreeClickedMessage = input.allAgreeButtonTap.map { "전체 클릭" }.asObservable() - let firstAgreeClickedMessage = input.firstAgreeButtonTap.map { "첫 번째 동의 클릭" }.asObservable() - let secondAgreeClickedMessage = input.secondAgreeButtonTap.map { "두 번째 동의 클릭" }.asObservable() - let thirdAgreeClickedMessage = input.thirdAgreeButtonTap.map { "세 번째 동의 클릭" }.asObservable() - let fourthAgreeClickedMessage = input.fourthAgreeButtonTap.map { "네 번째 동의 클릭" }.asObservable() - let nextButtonClicked = input.nextButtonTap.map { true }.asDriver(onErrorJustReturn: false) - - let output = Output(navButtonTapped: input.navButtonTapped.asDriver(), - allAgreeButtonClickedMessage: allAgreeClickedMessage, - firstAgreeButtonClickedMessage: firstAgreeClickedMessage, - secondAgreeButtonClickedMessage: secondAgreeClickedMessage, - thirdAgreeButtonClickedMessage: thirdAgreeClickedMessage, - fourthAgreeButtonClickedMessage: fourthAgreeClickedMessage, - nextButtonClicked: nextButtonClicked) + private func createOutput(from input: Input) -> Output { + Output( + navButtonTapped: input.navButtonTapped.asDriver(), + allAgreeButtonClickedMessage: createMessageObservable(for: input.allAgreeButtonTap, message: "전체 클릭"), + firstAgreeButtonClickedMessage: createMessageObservable(for: input.firstAgreeButtonTap, message: "첫 번째 동의 클릭"), + secondAgreeButtonClickedMessage: createMessageObservable(for: input.secondAgreeButtonTap, message: "두 번째 동의 클릭"), + thirdAgreeButtonClickedMessage: createMessageObservable(for: input.thirdAgreeButtonTap, message: "세 번째 동의 클릭"), + fourthAgreeButtonClickedMessage: createMessageObservable(for: input.fourthAgreeButtonTap, message: "네 번째 동의 클릭"), + nextButtonClicked: input.nextButtonTap.map { true }.asDriver(onErrorJustReturn: false) + ) + } - action(output) + private func createMessageObservable(for signal: Signal, message: String) -> Observable { + signal.map { message }.asObservable() + } + private func handleSideEffects(_ input: Input) { input.navButtonTapped .drive(onNext: { _ in AuthStepper.shared.steps.accept(MGStep.authBack) }).disposed(by: disposeBag) - + input.firstSeeMoreButtonTap .drive(onNext: { _ in - print("sex") - + print("클릭") }).disposed(by: disposeBag) - - - return output } }