Skip to content

Commit

Permalink
[Refactor] #239 - refactor clipVC
Browse files Browse the repository at this point in the history
  • Loading branch information
mini-min committed Jan 13, 2025
1 parent 03e91bd commit fc84e2e
Show file tree
Hide file tree
Showing 11 changed files with 157 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,17 @@ final class AppCoordinator: BaseCoordinator {

private extension AppCoordinator {
func setLoginRootVC() {
let vc = viewControllerFactory.makeLoginVC()
router.setRoot(vc, animated: true)
let coordinator = coordinatorFactory.makeLoginCoordinator(
router: router,
viewControllerFactory: viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
coordinator.onFinish = { [weak self, weak coordinator] in
self?.removeDependency(coordinator)
self?.start()
}
self.addDependency(coordinator)
coordinator.start()
}

func setTabBarRootVC() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,22 @@

import Foundation

final class ClipCoordinator: BaseCoordinator {
final class ClipCoordinator: BaseCoordinator, CoordinatorFinishOutput {

var onFinish: (() -> Void)?

private let router: RouterProtocol
private let viewControllerFactory: ViewControllerFactoryProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol

init(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) {
self.router = router
self.viewControllerFactory = viewControllerFactory
self.coordinatorFactory = coordinatorFactory
}

override func start() {
Expand All @@ -30,6 +36,9 @@ private extension ClipCoordinator {
vc.onEditClipSelected = { [weak self] clipList in
self?.showEditClipVC(clipList: clipList)
}
vc.onClipItemSelected = { [weak self] clipId, clipName in
self?.showDetailClipVC(id: clipId, name: clipName)
}
router.setRoot(vc, animated: false)
}

Expand All @@ -38,4 +47,10 @@ private extension ClipCoordinator {
vc.setupDataBind(clipModel: clipList)
router.push(vc, animated: false, hideBottomBarWhenPushed: true)
}

func showDetailClipVC(id: Int, name: String) {
let vc = viewControllerFactory.makeDetailClipVC()
vc.setupCategory(id: id, name: name)
router.push(vc, animated: true)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,22 @@

import Foundation

final class HomeCoordinator: BaseCoordinator {
final class HomeCoordinator: BaseCoordinator, CoordinatorFinishOutput {

var onFinish: (() -> Void)?

private let router: RouterProtocol
private let viewControllerFactory: ViewControllerFactoryProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol

init(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) {
self.router = router
self.viewControllerFactory = viewControllerFactory
self.coordinatorFactory = coordinatorFactory
}

override func start() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

import UIKit

final class LoginCoordinator: BaseCoordinator {
final class LoginCoordinator: BaseCoordinator, CoordinatorFinishOutput {

var onFinish: (() -> Void)?

private let router: RouterProtocol
private let viewControllerFactory: ViewControllerFactoryProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol
Expand All @@ -24,12 +27,13 @@ final class LoginCoordinator: BaseCoordinator {
}

override func start() {
showTabBarVC()
showLoginVC()
}
}

private extension LoginCoordinator {
func showTabBarVC() {

func showLoginVC() {
let vc = viewControllerFactory.makeLoginVC()
router.setRoot(vc, animated: true)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,22 @@

import Foundation

final class SearchCoordinator: BaseCoordinator {
final class SearchCoordinator: BaseCoordinator, CoordinatorFinishOutput {

var onFinish: (() -> Void)?

private let router: RouterProtocol
private let viewControllerFactory: ViewControllerFactoryProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol

init(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) {
self.router = router
self.viewControllerFactory = viewControllerFactory
self.coordinatorFactory = coordinatorFactory
}

override func start() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ private extension TabBarCoordinator {
func startHomeCoordinator(navController: UINavigationController) {
let coordinator = coordinatorFactory.makeHomeCoordinator(
router: Router(rootViewController: navController),
viewControllerFactory: self.viewControllerFactory
viewControllerFactory: self.viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
self.addDependency(coordinator)
coordinator.start()
Expand All @@ -71,7 +72,8 @@ private extension TabBarCoordinator {
func startClipCoordinator(navController: UINavigationController) {
let coordinator = coordinatorFactory.makeClipCoordinator(
router: Router(rootViewController: navController),
viewControllerFactory: self.viewControllerFactory
viewControllerFactory: self.viewControllerFactory,
coordinatorFactory: self.coordinatorFactory
)
self.addDependency(coordinator)
coordinator.start()
Expand All @@ -80,7 +82,8 @@ private extension TabBarCoordinator {
func startSearchCoordinator(navController: UINavigationController) {
let coordinator = coordinatorFactory.makeSearchCoordinator(
router: Router(rootViewController: navController),
viewControllerFactory: self.viewControllerFactory
viewControllerFactory: self.viewControllerFactory,
coordinatorFactory: self.coordinatorFactory
)
self.addDependency(coordinator)
coordinator.start()
Expand All @@ -89,7 +92,8 @@ private extension TabBarCoordinator {
func startTimerCoordinator(navController: UINavigationController) {
let coordinator = coordinatorFactory.makeTimerCoordinator(
router: Router(rootViewController: navController),
viewControllerFactory: self.viewControllerFactory
viewControllerFactory: self.viewControllerFactory,
coordinatorFactory: self.coordinatorFactory
)
self.addDependency(coordinator)
coordinator.start()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,22 @@

import Foundation

final class TimerCoordinator: BaseCoordinator {
final class TimerCoordinator: BaseCoordinator, CoordinatorFinishOutput {

var onFinish: (() -> Void)?

private let router: RouterProtocol
private let viewControllerFactory: ViewControllerFactoryProtocol
private let coordinatorFactory: CoordinatorFactoryProtocol

init(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) {
self.router = router
self.viewControllerFactory = viewControllerFactory
self.coordinatorFactory = coordinatorFactory
}

override func start() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,34 @@ protocol CoordinatorFactoryProtocol {
coordinatorFactory: CoordinatorFactoryProtocol
) -> TabBarCoordinator

func makeLoginCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> LoginCoordinator

func makeHomeCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> HomeCoordinator

func makeClipCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> ClipCoordinator

func makeSearchCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> SearchCoordinator

func makeTimerCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> TimerCoordinator
}

Expand All @@ -48,43 +58,63 @@ final class CoordinatorFactory: CoordinatorFactoryProtocol {
)
}

func makeLoginCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> LoginCoordinator {
return LoginCoordinator(
router: router,
viewControllerFactory: viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
}

func makeHomeCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> HomeCoordinator {
return HomeCoordinator(
router: router,
viewControllerFactory: viewControllerFactory
viewControllerFactory: viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
}

func makeClipCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> ClipCoordinator {
return ClipCoordinator(
router: router,
viewControllerFactory: viewControllerFactory
viewControllerFactory: viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
}

func makeSearchCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> SearchCoordinator {
return SearchCoordinator(
router: router,
viewControllerFactory: viewControllerFactory
viewControllerFactory: viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
}

func makeTimerCoordinator(
router: RouterProtocol,
viewControllerFactory: ViewControllerFactoryProtocol
viewControllerFactory: ViewControllerFactoryProtocol,
coordinatorFactory: CoordinatorFactoryProtocol
) -> TimerCoordinator {
return TimerCoordinator(
router: router,
viewControllerFactory: viewControllerFactory
viewControllerFactory: viewControllerFactory,
coordinatorFactory: coordinatorFactory
)
}
}
Expand Down
34 changes: 16 additions & 18 deletions TOASTER-iOS/Present/Clip/View/ClipViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ import Then

final class ClipViewController: UIViewController {

// MARK: - View Controllable

var onEditClipSelected: ((ClipModel) -> Void)?
var onClipItemSelected: ((Int, String) -> Void)?

// MARK: - UI Properties

private let viewModel: ClipViewModel
Expand Down Expand Up @@ -138,38 +143,31 @@ private extension ClipViewController {
}

func setupNavigationBar() {
let type: ToasterNavigationType = ToasterNavigationType(hasBackButton: false,
hasRightButton: true,
mainTitle: StringOrImageType.string(StringLiterals.Tabbar.clip),
rightButton: StringOrImageType.string("편집"),
rightButtonAction: editButtonTapped)
let type: ToasterNavigationType = ToasterNavigationType(
hasBackButton: false,
hasRightButton: true,
mainTitle: StringOrImageType.string(StringLiterals.Tabbar.clip),
rightButton: StringOrImageType.string("편집"),
rightButtonAction: editButtonTapped
)

if let navigationController = navigationController as? ToasterNavigationController {
navigationController.setupNavigationBar(forType: type)
}
}

func editButtonTapped() {
let editClipViewController = ViewControllerFactory.shared.makeEditClipVC()
editClipViewController.setupDataBind(clipModel: viewModel.clipList)
editClipViewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(editClipViewController, animated: false)
onEditClipSelected?(viewModel.clipList)
}
}

// MARK: - CollectionView Delegate

extension ClipViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let nextVC = ViewControllerFactory.shared.makeDetailClipVC()
if indexPath.item == 0 {
nextVC.setupCategory(id: 0, name: "전체 클립")
} else {
nextVC.setupCategory(id: viewModel.clipList.clips[indexPath.item - 1].id,
name: viewModel.clipList.clips[indexPath.item - 1].title)
}
nextVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(nextVC, animated: true)
let id = indexPath.item == 0 ? 0 : viewModel.clipList.clips[indexPath.item - 1].id
let title = indexPath.item == 0 ? "전체 클립" : viewModel.clipList.clips[indexPath.item - 1].title
onClipItemSelected?(id, title)
}
}

Expand Down
Loading

0 comments on commit fc84e2e

Please sign in to comment.