Skip to content

Commit 848f52a

Browse files
committed
๐Ÿงฉ :: Flow ์„ค์ •
1 parent ec82e3b commit 848f52a

File tree

5 files changed

+132
-5
lines changed

5 files changed

+132
-5
lines changed

โ€ŽProjects/Core/Sources/Steps/HomeStep.swiftโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public enum HomeStep: Step {
44
case homeIsRequired
55
case alarmIsRequired
66
case companyIsRequired
7+
case winterInternIsRequired
78
case easterEggIsRequired
89
case rejectReasonIsRequired(
910
recruitmentID: Int,

โ€ŽProjects/Flow/Sources/Home/HomeFlow.swiftโ€Ž

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public final class HomeFlow: Flow {
2828
case .companyIsRequired:
2929
return navigateToCompany()
3030

31+
case .winterInternIsRequired:
32+
return navigateToWinterIntern()
33+
3134
case .easterEggIsRequired:
3235
return navigateToEasterEgg()
3336

@@ -108,6 +111,23 @@ private extension HomeFlow {
108111
))
109112
}
110113

114+
func navigateToWinterIntern() -> FlowContributors {
115+
let winterInternFlow = WinterInternFlow(container: container)
116+
Flows.use(winterInternFlow, when: .created) { root in
117+
self.rootViewController.pushViewController(
118+
root,
119+
animated: true
120+
)
121+
}
122+
123+
return .one(flowContributor: .contribute(
124+
withNextPresentable: winterInternFlow,
125+
withNextStepper: OneStepper(
126+
withSingleStep: RecruitmentStep.recruitmentIsRequired
127+
)
128+
))
129+
}
130+
111131
func navigateToRejectReason(
112132
_ recruitmentID: Int,
113133
_ applicationID: Int,
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import UIKit
2+
import Presentation
3+
import Swinject
4+
import RxFlow
5+
import Core
6+
7+
public final class WinterInternFlow: Flow {
8+
public let container: Container
9+
private let rootViewController: WinterInternViewController
10+
public var root: Presentable {
11+
return rootViewController
12+
}
13+
14+
public init(container: Container) {
15+
self.container = container
16+
self.rootViewController = container.resolve(WinterInternViewController.self)!
17+
}
18+
19+
public func navigate(to step: Step) -> FlowContributors {
20+
guard let step = step as? RecruitmentStep else { return .none }
21+
22+
switch step {
23+
case .recruitmentIsRequired:
24+
return navigateToRecruitment()
25+
26+
case let .recruitmentDetailIsRequired(id):
27+
return navigateToRecruitmentDetail(recruitmentID: id)
28+
29+
case .recruitmentFilterIsRequired:
30+
return navigateToRecruitmentFilter()
31+
32+
case .searchRecruitmentIsRequired:
33+
return navigateToSearchRecruitment()
34+
}
35+
}
36+
}
37+
38+
private extension WinterInternFlow {
39+
func navigateToRecruitment() -> FlowContributors {
40+
return .one(flowContributor: .contribute(
41+
withNextPresentable: rootViewController,
42+
withNextStepper: rootViewController.viewModel
43+
))
44+
}
45+
46+
func navigateToRecruitmentDetail(recruitmentID: Int) -> FlowContributors {
47+
let recruitmentDetailFlow = RecruitmentDetailFlow(container: container)
48+
49+
Flows.use(recruitmentDetailFlow, when: .created) { (root) in
50+
let view = root as? RecruitmentDetailViewController
51+
view?.viewModel.recruitmentID = recruitmentID
52+
view?.isPopViewController = { id, bookmark in
53+
let popView = self.rootViewController
54+
var oldData = popView.viewModel.recruitmentData.value
55+
oldData.enumerated().forEach {
56+
if $0.element.recruitID == id {
57+
oldData[$0.offset].bookmarked = bookmark
58+
}
59+
}
60+
popView.viewModel.recruitmentData.accept(oldData)
61+
popView.isTabNavigation = false
62+
}
63+
self.rootViewController.navigationController?.pushViewController(
64+
view!, animated: true
65+
)
66+
}
67+
68+
return .one(flowContributor: .contribute(
69+
withNextPresentable: recruitmentDetailFlow,
70+
withNextStepper: OneStepper(withSingleStep: RecruitmentDetailStep.recruitmentDetailIsRequired)
71+
))
72+
}
73+
74+
func navigateToSearchRecruitment() -> FlowContributors {
75+
let searchRecruitmentFlow = SearchRecruitmentFlow(container: container)
76+
77+
Flows.use(searchRecruitmentFlow, when: .created) { (root) in
78+
let view = root as? SearchRecruitmentViewController
79+
self.rootViewController.navigationController?.pushViewController(
80+
view!, animated: true
81+
)
82+
}
83+
84+
return .one(flowContributor: .contribute(
85+
withNextPresentable: searchRecruitmentFlow,
86+
withNextStepper: OneStepper(withSingleStep: SearchRecruitmentStep.searchRecruitmentIsRequired)
87+
))
88+
}
89+
90+
func navigateToRecruitmentFilter() -> FlowContributors {
91+
let recruitmentFilterFlow = RecruitmentFilterFlow(container: container)
92+
93+
Flows.use(recruitmentFilterFlow, when: .created) { (root) in
94+
self.rootViewController.navigationController?.pushViewController(
95+
root, animated: true
96+
)
97+
}
98+
99+
return .one(flowContributor: .contribute(
100+
withNextPresentable: recruitmentFilterFlow,
101+
withNextStepper: OneStepper(withSingleStep: RecruitmentFilterStep.recruitmentFilterIsRequired)
102+
))
103+
}
104+
}

โ€ŽProjects/Presentation/Sources/Home/HomeViewController.swiftโ€Ž

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public final class HomeViewController: BaseViewController<HomeViewModel> {
112112
navigateToAlarmButtonDidTap: navigateToAlarmButton.rx.tap.asSignal(),
113113
navigateToEasterEggDidTap: navigateToEasterEggDidTap,
114114
navigateToCompanyButtonDidTap: findCompanysCard.rx.tap.asSignal(),
115+
navigateToWinterInternButtonDidTap: findWinterRecruitmentsCard.rx.tap.asSignal(),
115116
rejectButtonDidTap: rejectButtonDidTap,
116117
reApplyButtonDidTap: reApplyButtonDidTap,
117118
applicationStatusTableViewDidTap: applicationStatusTableView.rx
@@ -196,11 +197,6 @@ public final class HomeViewController: BaseViewController<HomeViewModel> {
196197
.bind {
197198
self.showTabbar()
198199
}.disposed(by: disposeBag)
199-
200-
findWinterRecruitmentsCard.rx.tap.subscribe(onNext: {
201-
print("findWinterRecruitment!!")
202-
})
203-
.disposed(by: disposeBag)
204200
}
205201

206202
public override func configureNavigation() {

โ€ŽProjects/Presentation/Sources/Home/HomeViewModel.swiftโ€Ž

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public final class HomeViewModel: BaseViewModel, Stepper {
3030
let navigateToAlarmButtonDidTap: Signal<Void>
3131
let navigateToEasterEggDidTap: PublishRelay<Void>
3232
let navigateToCompanyButtonDidTap: Signal<Void>
33+
let navigateToWinterInternButtonDidTap: Signal<Void>
3334
let rejectButtonDidTap: PublishRelay<ApplicationEntity>
3435
let reApplyButtonDidTap: PublishRelay<ApplicationEntity>
3536
let applicationStatusTableViewDidTap: Observable<(Int, ApplicationStatusType)>
@@ -88,6 +89,11 @@ public final class HomeViewModel: BaseViewModel, Stepper {
8889
.bind(to: steps)
8990
.disposed(by: disposeBag)
9091

92+
input.navigateToWinterInternButtonDidTap.asObservable()
93+
.map { _ in HomeStep.winterInternIsRequired }
94+
.bind(to: steps)
95+
.disposed(by: disposeBag)
96+
9197
input.viewAppear.asObservable()
9298
.flatMap { [self] in
9399
fetchBannerListUseCase.execute()

0 commit comments

Comments
ย (0)