Skip to content

[IDLE-000] Agent로그인 네비게이션 구현 #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion project/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ USER_NAME = $(shell python3 Scaffold/Scripts/author_name.py)
CURRENT_DATE = $(shell pipenv run python Scaffold/Scripts/current_date.py)

Feature:
@mkdir Projects/Presentation/Feature/${name};
@mkdir -p Projects/Presentation/Feature/${name};
@tuist scaffold Feature \
--project-name ${name} \
--author "$(USER_NAME)" \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// AuthFeatureDependency.swift
// DependencyPlugin
//
// Created by 최준영 on 6/21/24.
//

import ProjectDescription

public extension ModuleDependency.Presentation {

static let AuthFeature: TargetDependency = .project(target: "AuthFeature", path: .relativeToRoot("Projects/Presentation/Feature/Auth"))
}
1 change: 1 addition & 0 deletions project/Projects/App/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ let project = Project(

// Presentation
D.Presentation.PresentationCore,
D.Presentation.AuthFeature,

// Domain
D.Domain.ConcreteUseCase,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
//
// AgentAuthCoordinator.swift
// AuthFeature
//
// Created by choijunios on 6/30/24.
//

import UIKit
import PresentationCore
import AuthFeature

class AgentAuthCoordinator: ParentCoordinator {

var childCoordinators: [Coordinator] = []

var navigationController: UINavigationController

var parent: AuthCoordinator?

init(navigationController: UINavigationController) {
self.navigationController = navigationController
}

deinit {
printIfDebug("deinit \(Self.self)")
}

func start() {

let coordinator = AgentAuthMainCoodinator(
navigationController: navigationController
)

coordinator.parent = self

addChildCoordinator(coordinator)

coordinator.start()
}
}

extension AgentAuthCoordinator: AgentAuthCoordinatable {

func register() {

let coordinator = AgentRegisterCoordinator(
navigationController: navigationController
)

coordinator.parent = self

addChildCoordinator(coordinator)

coordinator.start()
}

func authFinished() {

parent?.authFinished()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//
// AuthCoordinator+Extension.swift
// AuthFeature
//
// Created by choijunios on 6/30/24.
//

import Foundation
import PresentationCore

extension AuthCoordinator: AuthCoordinatable {

public func auth(type: AuthType) {

switch type {
case .agent:

let coordinator = AgentAuthCoordinator(navigationController: navigationController)

addChildCoordinator(coordinator)

coordinator.parent = self

coordinator.start()

case .agency:
return
}
}

public func authFinished() {

clearChildren()

parent?.removeChildCoordinator(self)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// AuthCoordinator.swift
// AuthFeature
//
// Created by choijunios on 6/30/24.
//

import UIKit
import PresentationCore
import AuthFeature

public class AuthCoordinator: ParentCoordinator {

public var childCoordinators: [Coordinator] = []

public var parent: ParentCoordinator?

public var navigationController: UINavigationController

public init(navigationController: UINavigationController) {
self.navigationController = navigationController
}

deinit {
printIfDebug("deinit \(Self.self)")
}

public func start() {

let coordinator = SelectAuthTypeCoordinator(
navigationController: navigationController
)
coordinator.parent = self

addChildCoordinator(coordinator)

coordinator.start()
}

public func popViewController() {

navigationController.popViewController(animated: true)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,16 @@
//

import Foundation
import AuthFeature

extension RootCoordinator {

func auth() {

let authCoordinator = AuthCoordinator(
navigationController: navigationController
)

authCoordinator.start()
}
}
64 changes: 2 additions & 62 deletions project/Projects/App/Sources/RootCoordinator/RootCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class RootCoordinator: ParentCoordinator {

func start() {

navigationController.navigationBar.isHidden = true

let coordinator = TestMainTabBarCoodinator(
navigationController: navigationController
)
Expand All @@ -34,65 +36,3 @@ class RootCoordinator: ParentCoordinator {
navigationController.popViewController(animated: false)
}
}


// MARK: Test MainTabBar
class TestMainTabBarCoodinator: ChildCoordinator {

var navigationController: UINavigationController

var parent: RootCoordinator?

weak var viewControllerRef: DisposableViewController?

init(navigationController: UINavigationController) {
self.navigationController = navigationController
}

func start() {

let viewController = TestMainTabBarController()
viewController.coordinator = self

self.viewControllerRef = viewController

navigationController.pushViewController(viewController, animated: false)
}

func popViewController() {

navigationController.popViewController(animated: true)
}

func coordinatorDidFinish() {

parent?.removeChildCoordinator(self)
}
}

public class TestMainTabBarController: DisposableViewController {

var coordinator: TestMainTabBarCoodinator?

public func cleanUp() {

coordinator?.coordinatorDidFinish()
}

public override func viewDidLoad() {

let initialLabel = UILabel()

initialLabel.text = "테스트용 메인 탭바 화면입니다."

view.backgroundColor = .white

view.addSubview(initialLabel)
initialLabel.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
initialLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
initialLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),
])
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
//
// TestVC.swift
// Idle-iOS
//
// Created by choijunios on 6/30/24.
//

import UIKit
import DSKit
import PresentationCore

// MARK: Test MainTabBar
class TestMainTabBarCoodinator: ChildCoordinator {

var navigationController: UINavigationController

var parent: RootCoordinator?

weak var viewControllerRef: DisposableViewController?

init(navigationController: UINavigationController) {
self.navigationController = navigationController
}

func start() {

let viewController = TestMainTabBarController()
viewController.coordinator = self

self.viewControllerRef = viewController

navigationController.pushViewController(viewController, animated: false)
}

func popViewController() {

navigationController.popViewController(animated: true)
}

func coordinatorDidFinish() {

parent?.removeChildCoordinator(self)
}

func startAuth() {

parent?.auth()
}
}

public class TestMainTabBarController: DisposableViewController {

var coordinator: TestMainTabBarCoodinator?

lazy var startLoginButton = ButtonPrototype(text: "로그인 시작") { [weak self] in
self?.coordinator?.startAuth()
}

public func cleanUp() {

coordinator?.coordinatorDidFinish()
}

public override func viewDidLoad() {

let titleLabel = UILabel()

titleLabel.text = "테스트용 메인 탭바 화면입니다."

view.backgroundColor = .white

[
titleLabel,
startLoginButton
].forEach {
$0.translatesAutoresizingMaskIntoConstraints = false
view.addSubview($0)
}

view.layoutMargins = .init(top: 0, left: 20, bottom: 0, right: 20)

view.addSubview(titleLabel)
titleLabel.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),

startLoginButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
startLoginButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),
startLoginButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor)
])
}
}
Loading