Skip to content

Commit

Permalink
Merge pull request #8 from 29th-WE-SOPT-iOS-Part/feat/week2
Browse files Browse the repository at this point in the history
Feat/week2 - 2차 과제 완료
  • Loading branch information
i-colours-u authored Oct 27, 2021
2 parents 8a0db85 + 0981797 commit cd26c72
Show file tree
Hide file tree
Showing 43 changed files with 1,464 additions and 85 deletions.
162 changes: 145 additions & 17 deletions sopt_29th_Assignment/sopt_29th_Assignment.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class ApplicationCoordinator: BaseCoordinator {
private let coordinatorFactory: CoordinatorFactoryProtocol
private let moduleFactory: ModuleFactoryProtocol
private var launchInstructor = LaunchInstructor.configure()
private var wasLoggedIn: Bool = true

// MARK: - Init
init(
Expand All @@ -28,7 +29,6 @@ class ApplicationCoordinator: BaseCoordinator {

// MARK: - Coordinator
override func start() {

if self.childCoordinators
.contains(where: { type(of: $0.self) == MainTabCoordinator.self }) {
self.childCoordinators
Expand All @@ -37,12 +37,7 @@ class ApplicationCoordinator: BaseCoordinator {
$0.start()
}
} else {
switch self.launchInstructor {
case .auth:
self.runSigningScene()
case .main:
self.runMainTabScene()
}
wasLoggedIn ? runMainTabScene() : runSigningScene()
}
}
}
Expand All @@ -53,14 +48,14 @@ class ApplicationCoordinator: BaseCoordinator {

// MARK: - Run scenes
extension ApplicationCoordinator {

private func runSigningScene() {
var coordinator = self.coordinatorFactory.makeSigningCoordinator(
router: self.router,
coordinatorFactory: self.coordinatorFactory,
moduleFactory: self.moduleFactory)
coordinator.finishScene = { [unowned self, unowned coordinator] in
self.launchInstructor = LaunchInstructor.configure(Logged.wasLoggedIn)
self.wasLoggedIn = true
self.removeDependency(coordinator)
self.start()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// HomeCoordinator.swift
// sopt_29th_Assignment
//
// Created by 송지훈 on 2021/10/18.
//

import UIKit

class HomeCoordinator: BaseCoordinator, CoordinatorFinishOutput {

// MARK: - Coodinator finish output
var finishScene: (() -> Void)?

// MARK: - Vars & Lets
private let router: RouterProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol
private let moduleFactory: ModuleFactoryProtocol

// MARK: - Init
init(
router: RouterProtocol,
coordinatorFactory: CoordinatorFactoryProtocol,
moduleFactory: ModuleFactoryProtocol
) {
self.router = router
self.coordinatorFactory = coordinatorFactory
self.moduleFactory = moduleFactory
}

override func start() {
self.showHomeVC()
}

}

// MARK: - Show a view scene
extension HomeCoordinator {
private func showHomeVC() {
let vc = moduleFactory.instantiateHomeVC()
self.router.setRootModule(vc)
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//
// LibraryCoordinator.swift
// sopt_29th_Assignment
//
// Created by 송지훈 on 2021/10/18.
//

import UIKit

class LibraryCoordinator: BaseCoordinator, CoordinatorFinishOutput {

// MARK: - Coodinator finish output
var finishScene: (() -> Void)?

// MARK: - Vars & Lets
private let router: RouterProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol
private let moduleFactory: ModuleFactoryProtocol

// MARK: - Init
init(
router: RouterProtocol,
coordinatorFactory: CoordinatorFactoryProtocol,
moduleFactory: ModuleFactoryProtocol
) {
self.router = router
self.coordinatorFactory = coordinatorFactory
self.moduleFactory = moduleFactory
}

override func start() {
self.showLibraryVC()
}

}

// MARK: - Show a view scene
extension LibraryCoordinator {
private func showLibraryVC() {
let vc = moduleFactory.instantitateLibraryVC()
self.router.setRootModule(vc)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
//
// MainTabCoordinator.swift
// sopt_29th_Assignment
//
// Created by 송지훈 on 2021/10/18.
//

import UIKit

typealias Scene = ((UINavigationController) -> Void)

class MainTabCoordinator : BaseCoordinator, CoordinatorFinishOutput{

// MARK: - Coodinator finish output
var finishScene: (() -> Void)?

// MARK: - Vars & Lets
private let router: RouterProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol
private let moduleFactory: ModuleFactoryProtocol
private var mainTabController: MainTabBarControllable?

// MARK: - Init
init(
router: RouterProtocol,
coordinatorFactory: CoordinatorFactoryProtocol,
moduleFactory: ModuleFactoryProtocol
) {
self.router = router
self.coordinatorFactory = coordinatorFactory
self.moduleFactory = moduleFactory
}

// MARK: - Coordinator
override func start() {
if self.mainTabController == nil {
self.showMainTabBarController()
}
guard let mainTab = self.mainTabController else { return }
mainTab.selectTab(0)
self.startCoordinator()
}

private func startCoordinator() {
self.childCoordinators.forEach {
$0.start()
}
}
}

extension MainTabCoordinator {
private func showMainTabBarController() {
self.mainTabController = self.moduleFactory.instantiateMainTabBarController()
self.mainTabController?.onHomeScene = runHomeScene()
self.mainTabController?.onShortScene = runShortScene()
self.mainTabController?.onWritingScene = runWritingScene()
self.mainTabController?.onSubscribeScene = runSubscribeScene()
self.mainTabController?.onLibraryScene = runLibraryScene()
self.router.dismissModule(animated: false) {
self.router.push(self.mainTabController)
}
}
}

// MARK: - Run Scenes
extension MainTabCoordinator {
private func runHomeScene() -> Scene {
return { [weak self] navController in
guard let `self` = self else {
return }
if navController.viewControllers.isEmpty == true {
let coordinator = self.coordinatorFactory.makeHomeCoordinator(
coordinatorFactory: self.coordinatorFactory,
moduleFactory: self.moduleFactory,
navController: navController)
self.addDependency(coordinator)
coordinator.start()
}
}
}


private func runShortScene() -> Scene {
return { [weak self] navController in
guard let `self` = self else { return }
if navController.viewControllers.isEmpty == true {
let coordinator = self.coordinatorFactory.makeShortCoordinator(
coordinatorFactory: self.coordinatorFactory,
moduleFactory: self.moduleFactory,
navController: navController)
self.addDependency(coordinator)
coordinator.start()
}
}
}

private func runWritingScene() -> Scene {
return { [weak self] navController in
guard let `self` = self else { return }
if navController.viewControllers.isEmpty == true {
let coordinator = self.coordinatorFactory.makeWritingCoordinator(
coordinatorFactory: self.coordinatorFactory,
moduleFactory: self.moduleFactory,
navController: navController)
self.addDependency(coordinator)
coordinator.start()
}
}
}

private func runSubscribeScene() -> Scene {
return { [weak self] navController in
guard let `self` = self else { return }
if navController.viewControllers.isEmpty == true {
let coordinator = self.coordinatorFactory.makeSubscribeCoordinator(
coordinatorFactory: self.coordinatorFactory,
moduleFactory: self.moduleFactory,
navController: navController)
self.addDependency(coordinator)
coordinator.start()
}
}
}

private func runLibraryScene() -> Scene {
return { [weak self] navController in
guard let `self` = self else { return }
if navController.viewControllers.isEmpty == true {
let coordinator = self.coordinatorFactory.makeLibraryCoordinator(
coordinatorFactory: self.coordinatorFactory,
moduleFactory: self.moduleFactory,
navController: navController)
self.addDependency(coordinator)
coordinator.start()
}
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//
// ShortsCoordinator.swift
// sopt_29th_Assignment
//
// Created by 송지훈 on 2021/10/18.
//

import UIKit

class ShortsCoordinator: BaseCoordinator, CoordinatorFinishOutput {

// MARK: - Coodinator finish output
var finishScene: (() -> Void)?

// MARK: - Vars & Lets
private let router: RouterProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol
private let moduleFactory: ModuleFactoryProtocol

// MARK: - Init
init(
router: RouterProtocol,
coordinatorFactory: CoordinatorFactoryProtocol,
moduleFactory: ModuleFactoryProtocol
) {
self.router = router
self.coordinatorFactory = coordinatorFactory
self.moduleFactory = moduleFactory
}

override func start() {
self.showShortsVC()
}

}

// MARK: - Show a view scene
extension ShortsCoordinator {
private func showShortsVC() {
let vc = moduleFactory.instantiateShortVC()
self.router.setRootModule(vc)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,73 @@
//

import Foundation

class SigningCoordinator: BaseCoordinator, CoordinatorFinishOutput {

// MARK: - Coodinator finish output
var finishScene: (() -> Void)?

// MARK: - Vars & Lets
private let router: RouterProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol
private let moduleFactory: ModuleFactoryProtocol
private var launchInstructor = LaunchInstructor.configure()

// MARK: - Init
init(
router: RouterProtocol,
coordinatorFactory: CoordinatorFactoryProtocol,
moduleFactory: ModuleFactoryProtocol
) {
self.router = router
self.coordinatorFactory = coordinatorFactory
self.moduleFactory = moduleFactory
}

override func start() {
self.showSignInViewController()
}
}


// MARK: - Show a view scene
extension SigningCoordinator {
private func showSignInViewController() {
let vc = self.moduleFactory.instantitaeSigninVC()
vc.onSignUpSelect = { [weak self] in
self?.showSignupViewController()
}
vc.onSigninComplete = { [weak self] userName in
self?.showSigninCompleteViewController(userName: userName,isFromSignup: true)
}
self.router.setRootModule(vc)
}

private func showSignupViewController() {
let vc = self.moduleFactory.instantiateSignupVC()
vc.onBack = { [weak self] in
self?.router.popModule()
}
vc.onSignupComplete = { [weak self] userName in
self?.showSigninCompleteViewController(userName: userName,isFromSignup: true)
}
self.router.push(vc)
}

private func showSigninCompleteViewController(userName : String,isFromSignup: Bool){
let vc = self.moduleFactory.instantitateSignupCompleteVC(name: userName)
vc.onBackSigninWithPop = { [weak self] in
self?.router.dismissModule(animated: false, completion: {
self?.router.popModule(transition: nil, animated: false)
})
}
vc.onBackSignin = { [weak self] in
self?.router.dismissModule()
}
vc.onComplete = { [weak self] in
self?.finishScene?()
}
vc.fromSignupScene = isFromSignup
self.router.present(vc)
}
}
Loading

0 comments on commit cd26c72

Please sign in to comment.