From 8d9d29241c25aa55bd834a7d5acd6c542617f1da Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Fri, 26 Jul 2024 16:17:12 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[IDLE-171]=20=EC=84=BC=ED=84=B0=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=93=B1=EB=A1=9D=20UI=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../camera.imageset/Contents.json | 15 + .../Icons.xcassets/camera.imageset/camera.svg | 3 + .../picture.imageset/Contents.json | 15 + .../picture.imageset/picture.svg | 3 + .../CommonUI/ImageView/ImageSelectView.swift | 141 +++++ .../Component/Label/IdleTextField.swift | 8 +- .../ExampleApp/Sources/SceneDelegate.swift | 8 +- .../RegisterCenterInfoVC.swift | 481 ++++++++++++++++++ .../RegisterCenterInfoVM.swift | 8 + 9 files changed, 672 insertions(+), 10 deletions(-) create mode 100644 project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/Contents.json create mode 100644 project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/camera.svg create mode 100644 project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/Contents.json create mode 100644 project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/picture.svg create mode 100644 project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift create mode 100644 project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift create mode 100644 project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift diff --git a/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/Contents.json b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/Contents.json new file mode 100644 index 00000000..82cb0eeb --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "camera.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/camera.svg b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/camera.svg new file mode 100644 index 00000000..bb9e9b48 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/camera.imageset/camera.svg @@ -0,0 +1,3 @@ + + + diff --git a/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/Contents.json b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/Contents.json new file mode 100644 index 00000000..ea59fab9 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "picture.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/picture.svg b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/picture.svg new file mode 100644 index 00000000..1b6c41e2 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/picture.imageset/picture.svg @@ -0,0 +1,3 @@ + + + diff --git a/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift b/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift new file mode 100644 index 00000000..757f0eef --- /dev/null +++ b/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift @@ -0,0 +1,141 @@ +// +// ImageSelectView.swift +// DSKit +// +// Created by choijunios on 7/26/24. +// + +import UIKit +import RxSwift +import RxCocoa +import Entity + +public class ImageSelectView: UIImageView { + + public enum State { + case editing + case normal + } + + // Init + public private(set) var state: BehaviorRelay + + public private(set) var editingImage: BehaviorRelay = .init(value: nil) + + public init(state: State) { + self.state = .init(value: state) + super.init(frame: .zero) + + setAppearacne() + setLayout() + setObservable() + } + + public required init?(coder: NSCoder) { fatalError() } + + // View + /// PlaceHolderView(Edit) + let placeholderViewForEdit: UIView = { + let view = UIView() + view.backgroundColor = DSKitAsset.Colors.gray100.color + let imageView = DSKitAsset.Icons.camera.image.toView() + view.addSubview(imageView) + imageView.translatesAutoresizingMaskIntoConstraints=false + imageView.tintColor = .white + NSLayoutConstraint.activate([ + imageView.widthAnchor.constraint(equalToConstant: 54), + imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor), + imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor), + imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + return view + }() + + /// PlaceHolderView(Normal) + let placeholderViewForNormal: UIView = { + let view = UIView() + view.backgroundColor = DSKitAsset.Colors.gray050.color + let imageView = DSKitAsset.Icons.picture.image.toView() + view.addSubview(imageView) + imageView.translatesAutoresizingMaskIntoConstraints=false + imageView.tintColor = DSKitAsset.Colors.gray100.color + NSLayoutConstraint.activate([ + imageView.widthAnchor.constraint(equalToConstant: 38), + imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor), + imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor), + imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + return view + }() + + /// Edit ButtonView + let centerImageEditButton: UIButton = { + let btn = UIButton() + btn.setImage(DSKitAsset.Icons.editPhoto.image, for: .normal) + btn.isUserInteractionEnabled = true + return btn + }() + + private let disposeBag = DisposeBag() + + private func setAppearacne() { + self.layer.cornerRadius = 6 + self.clipsToBounds = true + self.contentMode = .scaleToFill + } + + private func setLayout() { + + [ + placeholderViewForEdit, + placeholderViewForNormal, + centerImageEditButton + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + self.addSubview($0) + } + + NSLayoutConstraint.activate([ + placeholderViewForEdit.topAnchor.constraint(equalTo: self.topAnchor), + placeholderViewForEdit.leadingAnchor.constraint(equalTo: self.leadingAnchor), + placeholderViewForEdit.trailingAnchor.constraint(equalTo: self.trailingAnchor), + placeholderViewForEdit.bottomAnchor.constraint(equalTo: self.bottomAnchor), + + placeholderViewForNormal.topAnchor.constraint(equalTo: self.topAnchor), + placeholderViewForNormal.leadingAnchor.constraint(equalTo: self.leadingAnchor), + placeholderViewForNormal.trailingAnchor.constraint(equalTo: self.trailingAnchor), + placeholderViewForNormal.bottomAnchor.constraint(equalTo: self.bottomAnchor), + + centerImageEditButton.widthAnchor.constraint(equalToConstant: 28), + centerImageEditButton.heightAnchor.constraint(equalTo: centerImageEditButton.widthAnchor), + + centerImageEditButton.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -16), + centerImageEditButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -16), + ]) + + } + + private func setObservable() { + + Observable + .combineLatest( + editingImage, + state + ) + .subscribe(onNext: { [weak self] (image, state) in + + guard let self else { return } + + if image != nil { + placeholderViewForEdit.isHidden = true + placeholderViewForNormal.isHidden = true + centerImageEditButton.isHidden = state == .normal + } else { + placeholderViewForEdit.isHidden = state == .normal + placeholderViewForNormal.isHidden = state == .editing + centerImageEditButton.isHidden = true + } + }) + .disposed(by: disposeBag) + } +} diff --git a/project/Projects/Presentation/DSKit/Sources/Component/Label/IdleTextField.swift b/project/Projects/Presentation/DSKit/Sources/Component/Label/IdleTextField.swift index 53ec7ca2..ff1d4047 100644 --- a/project/Projects/Presentation/DSKit/Sources/Component/Label/IdleTextField.swift +++ b/project/Projects/Presentation/DSKit/Sources/Component/Label/IdleTextField.swift @@ -75,13 +75,15 @@ public class IdleTextField: UITextField { private let disposeBag = DisposeBag() + /// 타이포그래피를 변경하면, 앞전에 설정한 속성값을 덥 public var typography: Typography { get { currentTypography } set { currentTypography = newValue - self.setNeedsLayout() + defaultTextAttributes = currentTypography.attributes + self.updateText() } } @@ -102,14 +104,14 @@ public class IdleTextField: UITextField { attributedPlaceholder?.string ?? "" } set { - attributedPlaceholder = typography.attributes.toString( + attributedPlaceholder = currentTypography.attributes.toString( newValue, with: DSKitAsset.Colors.gray200.color ) } } private func updateText() { - self.rx.attributedText.onNext(NSAttributedString(string: textString, attributes: typography.attributes)) + self.rx.attributedText.onNext(NSAttributedString(string: textString, attributes: currentTypography.attributes)) } } diff --git a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift index 703cec7e..db48ac76 100644 --- a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift @@ -21,13 +21,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(windowScene: windowScene) - window?.rootViewController = CenterLoginViewController( - viewModel: CenterLoginViewModel( - authUseCase: DefaultAuthUseCase( - repository: DefaultAuthRepository() - ) - ) - ) + window?.rootViewController = RegisterCenterInfoVC() window?.makeKeyAndVisible() } } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift new file mode 100644 index 00000000..fdbe5d64 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift @@ -0,0 +1,481 @@ +// +// RegisterCenterInfoVC.swift +// AuthFeature +// +// Created by choijunios on 7/26/24. +// + +import UIKit +import PresentationCore +import RxCocoa +import RxSwift +import Entity +import DSKit + +enum RegisterCenterInfoPage: Int, CaseIterable { + case nameAndPhoneNumber = 0 + case address = 1 + case imageAndIntroduction = 2 +} + +public protocol RegisterCenterInfoViewModelable { + +} + + +public class RegisterCenterInfoVC: UIViewController { + + // Init + + + // Not init + /// 현재 스크린의 넓이를 의미합니다. + private var screenWidth: CGFloat { + guard let screenWidth = view.window?.windowScene?.screen.bounds.width else { + fatalError() + } + return screenWidth + } + + private var pageViews: [UIView] = [] + + var currentIndex: Int = -1 + + // View + let navigationBar: NavigationBarType1 = { + let bar = NavigationBarType1( + navigationTitle: "센터 회원가입" + ) + return bar + }() + lazy var statusBar: ProcessStatusBar = { + + let view = ProcessStatusBar( + processCount: 3, + startIndex: 0 + ) + return view + }() + + // 하단 버튼 + private let ctaButton: CTAButtonType1 = { + + let button = CTAButtonType1(labelText: "다음") + + return button + }() + + let disposeBag = DisposeBag() + + public init() { + + super.init(nibName: nil, bundle: nil) + } + required init?(coder: NSCoder) { fatalError() } + + public override func viewDidLoad() { + setAppearance() + } + + /// 화면의 넓이를 안전하게 접근할 수 있는 시점, 화면 관련 속성들이 설정되어 있으므로 nil이 아닙니다. + public override func viewDidAppear(_ animated: Bool) { + setLayout() + test() + } + + private func setAppearance() { + view.backgroundColor = .white + view.layoutMargins = .init(top: 0, left: 20, bottom: 0, right: 20) + } + + private func setLayout() { + + [ + navigationBar, + statusBar, + ctaButton, + ].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20), + navigationBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 12), + navigationBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -12), + + statusBar.topAnchor.constraint(equalTo: navigationBar.bottomAnchor, constant: 7), + statusBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), + statusBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), + + ctaButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16), + ctaButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + ctaButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + ]) + + setPages() + next(animated: false) + } + + public func test() { + + ctaButton.eventPublisher.subscribe { [weak self] _ in + self?.next() + } + .disposed(by: disposeBag) + + navigationBar.eventPublisher.subscribe { [weak self] _ in + self?.prev() + } + .disposed(by: disposeBag) + } + + private func setPages() { + + self.pageViews = RegisterCenterInfoPage.allCases.map { page in + switch page { + case .nameAndPhoneNumber: + NameAndPhoneNumberView() + case .address: + AddressView() + case .imageAndIntroduction: + ImageAndIntroductionView() + } + } + + pageViews + .enumerated() + .forEach { index, subView in + view.addSubview(subView) + subView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + subView.topAnchor.constraint(equalTo: statusBar.bottomAnchor), + subView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + subView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + subView.bottomAnchor.constraint(equalTo: ctaButton.topAnchor), + ]) + + subView.transform = .init(translationX: screenWidth, y: 0) + } + } + + private func next(animated: Bool = true) { + + if let nextIndex = RegisterCenterInfoPage(rawValue: currentIndex+1)?.rawValue { + + let prevView: UIView? = currentIndex != -1 ? pageViews[currentIndex] : nil + let willShowView = pageViews[nextIndex] + + currentIndex = nextIndex + + UIView.animate(withDuration: animated ? 0.5 : 0.0) { [screenWidth, prevView, willShowView] in + + prevView?.transform = .init(translationX: -screenWidth, y: 0) + willShowView.transform = .identity + } + } + } + + private func prev(animated: Bool = true) { + if let nextIndex = RegisterCenterInfoPage(rawValue: currentIndex-1)?.rawValue { + + let prevView = pageViews[currentIndex] + let willShowView = pageViews[nextIndex] + + currentIndex = nextIndex + + UIView.animate(withDuration: animated ? 0.35 : 0.0) { [screenWidth, prevView, willShowView] in + + prevView.transform = .init(translationX: screenWidth, y: 0) + willShowView.transform = .identity + } + } + } + + public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + + + } +} + +extension RegisterCenterInfoVC { + + // MARK: CenterInfoView (이름 + 센터 연락처) + class NameAndPhoneNumberView: UIView { + + // View + private let processTitle: IdleLabel = { + let label = IdleLabel(typography: .Heading2) + label.textString = "센터 정보를 입력해주세요." + label.textAlignment = .left + return label + }() + + + let nameField: IFType2 = { + let field = IFType2( + titleLabelText: "이름", + placeHolderText: "센터 이름을 입력해주세요." + ) + return field + }() + + let phoneNumberField: IFType2 = { + let field = IFType2( + titleLabelText: "센터 연락처", + placeHolderText: "지원자들의 연락을 받을 번호를 입력해주세요." + ) + return field + }() + + init() { + super.init(frame: .zero) + setAppearance() + setLayout() + } + required init?(coder: NSCoder) { fatalError() } + + private func setAppearance() { + + self.layoutMargins = .init(top: 32, left: 20, bottom: 0, right: 20) + } + + private func setLayout() { + + let inputStack = VStack( + [ + nameField, + phoneNumberField + ], + spacing: 28, + alignment: .fill + ) + + [ + processTitle, + inputStack + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + self.addSubview($0) + } + + NSLayoutConstraint.activate([ + + processTitle.topAnchor.constraint(equalTo: self.layoutMarginsGuide.topAnchor), + processTitle.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + processTitle.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + + inputStack.topAnchor.constraint(equalTo: processTitle.bottomAnchor, constant: 32), + inputStack.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + inputStack.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + ]) + } + + public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + + + } + } + + // MARK: 센터주소 (도로명, 지번주소 + 상세주소) + class AddressView: UIView { + + // View + private let processTitle: IdleLabel = { + let label = IdleLabel(typography: .Heading2) + label.textString = "센터 주소 정보를 입력해주세요." + label.textAlignment = .left + return label + }() + + let nameField: IFType2 = { + let field = IFType2( + titleLabelText: "도로명주소", + placeHolderText: "도로명 주소를 입력해주세요." + ) + return field + }() + + let phoneNumberField: IFType2 = { + let field = IFType2( + titleLabelText: "상세 주소", + placeHolderText: "상세 주소를 입력해주세요. (예: 2층 204호)" + ) + return field + }() + + init() { + super.init(frame: .zero) + setAppearance() + setLayout() + } + required init?(coder: NSCoder) { fatalError() } + + private func setAppearance() { + + self.layoutMargins = .init(top: 32, left: 20, bottom: 0, right: 20) + } + + private func setLayout() { + + let inputStack = VStack( + [ + nameField, + phoneNumberField + ], + spacing: 28, + alignment: .fill + ) + + [ + processTitle, + inputStack + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + self.addSubview($0) + } + + NSLayoutConstraint.activate([ + + processTitle.topAnchor.constraint(equalTo: self.layoutMarginsGuide.topAnchor), + processTitle.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + processTitle.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + + inputStack.topAnchor.constraint(equalTo: processTitle.bottomAnchor, constant: 32), + inputStack.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + inputStack.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + ]) + } + + public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + + + } + } + + // MARK: 센터 소개 (프로필 사진 + 센터소개) + class ImageAndIntroductionView: UIView { + + // View + private let processTitle: IdleLabel = { + let label = IdleLabel(typography: .Heading2) + label.textString = "우리 센터를 소개해주세요!" + label.textAlignment = .left + return label + }() + private let subTitle: IdleLabel = { + let label = IdleLabel(typography: .Body3) + label.textString = "센터 소개글을 작성하면 보호사 매칭 성공률이 높아져요." + label.attrTextColor = DSKitAsset.Colors.gray300.color + label.textAlignment = .left + return label + }() + + /// 센터 소개를 수정하는 텍스트 필드 + private let centerIntroductionField: MultiLineTextField = { + let textView = MultiLineTextField( + typography: .Body3, + placeholderText: "추가적으로 요구사항이 있다면 작성해주세요." + ) + return textView + }() + + private let centerImageView: ImageSelectView = { + let view = ImageSelectView(state: .editing) + return view + }() + + init() { + super.init(frame: .zero) + setAppearance() + setLayout() + } + required init?(coder: NSCoder) { fatalError() } + + private func setAppearance() { } + + private func setLayout() { + + let inputStackContents = [ + ("센터 소개", centerIntroductionField), + ("센터 사진", centerImageView), + ].map { (title: String, view: UIView) in + + let label = IdleLabel(typography: .Subtitle4) + label.textString = title + label.attrTextColor = DSKitAsset.Colors.gray500.color + label.textAlignment = .left + + view.translatesAutoresizingMaskIntoConstraints = false + + return VStack( + [ + label, + view + ], + spacing: 8, + alignment: .fill + ) + } + + NSLayoutConstraint.activate([ + + centerIntroductionField.heightAnchor.constraint(equalToConstant: 156), + centerImageView.heightAnchor.constraint(equalToConstant: 254), + ]) + + let inputStack = VStack( + inputStackContents, + spacing: 20, + alignment: .fill + ) + + + let scrollView = UIScrollView() + [ + processTitle, + subTitle, + inputStack + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + scrollView.addSubview($0) + } + let cg = scrollView.contentLayoutGuide + scrollView.layoutMargins = .init(top: 0, left: 20, bottom: 0, right: 20) + NSLayoutConstraint.activate([ + + processTitle.topAnchor.constraint(equalTo: cg.topAnchor, constant: 32), + processTitle.leadingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.leadingAnchor), + processTitle.trailingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.trailingAnchor), + + subTitle.topAnchor.constraint(equalTo: processTitle.bottomAnchor, constant: 6), + subTitle.leadingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.leadingAnchor), + subTitle.trailingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.trailingAnchor), + + inputStack.topAnchor.constraint(equalTo: subTitle.bottomAnchor, constant: 32), + inputStack.leadingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.leadingAnchor), + inputStack.trailingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.trailingAnchor), + inputStack.bottomAnchor.constraint(equalTo: cg.bottomAnchor, constant: -24), + ]) + + [ + scrollView + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + self.addSubview($0) + } + NSLayoutConstraint.activate([ + scrollView.topAnchor.constraint(equalTo: self.topAnchor), + scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor), + scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor), + scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor), + ]) + } + + public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + + + } + } +} diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift new file mode 100644 index 00000000..aab73d41 --- /dev/null +++ b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift @@ -0,0 +1,8 @@ +// +// RegisterCenterInfoVM.swift +// AuthFeature +// +// Created by choijunios on 7/26/24. +// + +import Foundation From 4547412ba1bf776e33fa302be620dda6fb6e4434 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Sat, 27 Jul 2024 14:33:28 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[IDLE-171]=20=EC=84=BC=ED=84=B0=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=93=B1=EB=A1=9D=20ViewModel=EB=B0=8F=20Coordinat?= =?UTF-8?q?or=ED=8C=A8=ED=84=B4=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseFeatureDependency.swift | 13 + .../Sources/DI/Assembly/DataAssembly.swift | 5 + .../Sources/DI/Assembly/DomainAssembly.swift | 6 + .../CenterMainCoordinator.swift | 19 +- .../CenterProfileRegisterCoordinator.swift | 58 +++ .../RootCoordinator+Extension.swift | 2 + .../Auth/DefaultAuthRepository.swift | 4 +- .../DefaultUserProfileRepository.swift | 19 +- .../API/UserInformationAPI.swift | 10 +- .../DTO/Auth/WorkerRegistrationDTO.swift | 6 +- .../DTO/UserInfo/CenterProfileDTO.swift | 24 +- .../UserInfo/RegisterCenterProfileDTO.swift | 27 ++ .../DefaultCenterProfileUseCase.swift | 60 ++- .../Auth/Worker/WorkerRegisterState.swift | 4 - .../Profile/CenterInfoRegisterState.swift | 24 ++ .../Entity/State/{User => Util}/Gender.swift | 0 .../State/{User => Util}/UserType.swift | 0 .../UserInfo/UserProfileRepository.swift | 2 + .../UserInfo/CenterProfileUseCase.swift | 11 +- .../CommonUI/ImageView/ImageSelectView.swift | 59 ++- .../Sources/CommonUI/TabBar/IdleTabBar.swift | 4 + .../Component/Base/TappableUIView.swift | 30 ++ .../ExampleApp/Sources/SceneDelegate.swift | 2 +- .../Center/CenterAuthMainViewController.swift | 1 + .../Login/CenterLoginViewController.swift | 1 + .../CenterSetNewPasswordController.swift | 1 + .../ValidateNewPasswordViewController.swift | 1 + .../AuthBusinessOwnerViewController.swift | 1 + .../CenterRegisterViewController.swift | 1 + .../SetIdPasswordViewController.swift | 1 + .../Register/EnterNameViewController.swift | 1 + .../ValidatePhoneNumberViewController.swift | 1 + .../View/SelectAuthTypeViewController.swift | 1 + .../Register/EnterAddressViewController.swift | 1 + .../EntetPersonalInfoViewController.swift | 1 + .../Register/SelectGenderViewController.swift | 1 + .../Worker/WorkerAuthMainViewController.swift | 1 + .../Worker/WorkerRegisterViewController.swift | 1 + .../AuthInOutStreamManager+IdPassword.swift | 1 - .../Center/Login/CenterLoginViewModel.swift | 2 + .../Login/CenterSetNewPasswordViewModel.swift | 1 + .../Register/CenterRegisterViewModel.swift | 1 + .../RegisterCenterInfoVM.swift | 8 - .../Register/WorkerRegisterViewModel.swift | 11 +- .../Resources/LaunchScreen.storyboard | 45 ++ .../Base/ExampleApp/Sources/AppDelegate.swift | 36 ++ .../ExampleApp/Sources/SceneDelegate.swift | 23 ++ .../ExampleApp/Sources/ViewController.swift | 29 ++ .../Presentation/Feature/Base/Project.swift | 81 ++++ .../Feature/Base/Resources/Empty.md | 2 + .../DaumAddressSearchViewController.swift | 2 +- .../ViewController}/BaseViewController.swift | 6 +- .../DisposableViewController.swift | 2 +- .../Auth/RegisterSuccessOutputable.swift | 0 .../InputOuputConstraint/CTAButton.swift | 2 +- .../DefaultAlertOutputable.swift | 2 +- .../Sources/ViewModelType/ViewModelType.swift | 2 +- .../ExampleApp/Sources/SceneDelegate.swift | 18 +- .../Presentation/Feature/Center/Project.swift | 1 + .../RegisterCenterInfoCoordinator.swift | 42 ++ .../Profile/CenterProfileViewController.swift | 1 + .../RegisterCenterInfoVC.swift | 383 ++++++++++++++---- .../RegisterCenterInfoVM.swift | 148 +++++++ .../RecruitmentManagementCoordinator.swift | 18 +- .../Center/View/RecuitmentManagementVC.swift | 32 +- .../Presentation/Feature/Worker/Project.swift | 1 + .../EditWorkerProfileViewController.swift | 1 + .../profile/WorkerProfileViewController.swift | 1 + .../ScreenCoordinating/Coordinator.swift | 2 +- .../Main/CenterMainCoordinatable.swift | 12 + .../CenterProfileRegisterCoordinatable.swift | 14 + project/graph.png | Bin 174003 -> 236941 bytes 72 files changed, 1192 insertions(+), 142 deletions(-) create mode 100644 project/Plugins/DependencyPlugin/ProjectDescriptionHelpers/BaseFeatureDependency.swift rename project/Projects/App/Sources/RootCoordinator/Main/{Worker => Center }/CenterMainCoordinator.swift (83%) create mode 100644 project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift create mode 100644 project/Projects/Data/NetworkDataSource/DTO/UserInfo/RegisterCenterProfileDTO.swift create mode 100644 project/Projects/Domain/Entity/State/Profile/CenterInfoRegisterState.swift rename project/Projects/Domain/Entity/State/{User => Util}/Gender.swift (100%) rename project/Projects/Domain/Entity/State/{User => Util}/UserType.swift (100%) create mode 100644 project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift delete mode 100644 project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift create mode 100644 project/Projects/Presentation/Feature/Base/ExampleApp/Resources/LaunchScreen.storyboard create mode 100644 project/Projects/Presentation/Feature/Base/ExampleApp/Sources/AppDelegate.swift create mode 100644 project/Projects/Presentation/Feature/Base/ExampleApp/Sources/SceneDelegate.swift create mode 100644 project/Projects/Presentation/Feature/Base/ExampleApp/Sources/ViewController.swift create mode 100644 project/Projects/Presentation/Feature/Base/Project.swift create mode 100644 project/Projects/Presentation/Feature/Base/Resources/Empty.md rename project/Projects/Presentation/Feature/{Auth/Sources/View/Common/Register => Base/Sources/Address}/DaumAddressSearchViewController.swift (100%) rename project/Projects/Presentation/{PresentationCore/Sources/ScreenCoordinating => Feature/Base/Sources/ViewController}/BaseViewController.swift (80%) rename project/Projects/Presentation/{PresentationCore/Sources/ScreenCoordinating => Feature/Base/Sources/ViewController}/DisposableViewController.swift (92%) rename project/Projects/Presentation/{PresentationCore => Feature/Base}/Sources/ViewModelType/InputOuputConstraint/Auth/RegisterSuccessOutputable.swift (100%) rename project/Projects/Presentation/{PresentationCore => Feature/Base}/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift (94%) rename project/Projects/Presentation/{PresentationCore => Feature/Base}/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift (90%) rename project/Projects/Presentation/{PresentationCore => Feature/Base}/Sources/ViewModelType/ViewModelType.swift (92%) create mode 100644 project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift rename project/Projects/Presentation/Feature/{Auth/Sources/View/Center => Center/Sources/View}/RegisterCenterInfo/RegisterCenterInfoVC.swift (55%) create mode 100644 project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift create mode 100644 project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Main/CenterMainCoordinatable.swift create mode 100644 project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift diff --git a/project/Plugins/DependencyPlugin/ProjectDescriptionHelpers/BaseFeatureDependency.swift b/project/Plugins/DependencyPlugin/ProjectDescriptionHelpers/BaseFeatureDependency.swift new file mode 100644 index 00000000..0bec29a2 --- /dev/null +++ b/project/Plugins/DependencyPlugin/ProjectDescriptionHelpers/BaseFeatureDependency.swift @@ -0,0 +1,13 @@ +// +// BaseFeatureDependency.swift +// DependencyPlugin +// +// Created by 최준영 on 6/21/24. +// + +import ProjectDescription + +public extension ModuleDependency.Presentation { + + static let BaseFeature: TargetDependency = .project(target: "BaseFeature", path: .relativeToRoot("Projects/Presentation/Feature/Base")) +} diff --git a/project/Projects/App/Sources/DI/Assembly/DataAssembly.swift b/project/Projects/App/Sources/DI/Assembly/DataAssembly.swift index 6feccd93..28803059 100644 --- a/project/Projects/App/Sources/DI/Assembly/DataAssembly.swift +++ b/project/Projects/App/Sources/DI/Assembly/DataAssembly.swift @@ -22,5 +22,10 @@ public struct DataAssembly: Assembly { container.register(AuthRepository.self) { _ in return DefaultAuthRepository() } + + // MARK: 유저프로필 레포지토리 + container.register(UserProfileRepository.self) { _ in + return DefaultUserProfileRepository() + } } } diff --git a/project/Projects/App/Sources/DI/Assembly/DomainAssembly.swift b/project/Projects/App/Sources/DI/Assembly/DomainAssembly.swift index a27d820e..a3512f80 100644 --- a/project/Projects/App/Sources/DI/Assembly/DomainAssembly.swift +++ b/project/Projects/App/Sources/DI/Assembly/DomainAssembly.swift @@ -24,5 +24,11 @@ public struct DomainAssembly: Assembly { return DefaultAuthUseCase(repository: repository) } + + container.register(CenterProfileUseCase.self) { resolver in + let repository = resolver.resolve(UserProfileRepository.self)! + + return DefaultCenterProfileUseCase(repository: repository) + } } } diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Worker/CenterMainCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterMainCoordinator.swift similarity index 83% rename from project/Projects/App/Sources/RootCoordinator/Main/Worker/CenterMainCoordinator.swift rename to project/Projects/App/Sources/RootCoordinator/Main/Center /CenterMainCoordinator.swift index b160eddb..7c0db340 100644 --- a/project/Projects/App/Sources/RootCoordinator/Main/Worker/CenterMainCoordinator.swift +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterMainCoordinator.swift @@ -10,7 +10,7 @@ import DSKit import PresentationCore import RootFeature -class CenterMainCoordinator: ParentCoordinator { +class CenterMainCoordinator: CenterMainCoordinatable { var childCoordinators: [Coordinator] = [] var parent: ParentCoordinator? @@ -63,8 +63,10 @@ class CenterMainCoordinator: ParentCoordinator { switch tab { case .recruitmentManage: coordinator = RecruitmentManagementCoordinator( + parent: self, navigationController: navigationController ) + case .setting: coordinator = SettingCoordinator( navigationController: navigationController @@ -75,6 +77,7 @@ class CenterMainCoordinator: ParentCoordinator { // 코디네이터들을 실행 coordinator.start() } + } // MARK: Center 탭의 구성요소들 @@ -91,3 +94,17 @@ enum CenterMainScreen: Int, CaseIterable { } } } + +extension CenterMainCoordinator { + + /// 센터 정보등록 창을 표시합니다. + func centerProfileRegister() { + + let coordinator = CenterProfileRegisterCoordinator(dependency: .init( + navigationController: navigationController, + injector: injector) + ) + addChildCoordinator(coordinator) + coordinator.start() + } +} diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift new file mode 100644 index 00000000..5d5e33c7 --- /dev/null +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift @@ -0,0 +1,58 @@ +// +// CenterProfileRegisterCoordinator.swift +// Idle-iOS +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import CenterFeature +import PresentationCore +import UseCaseInterface + +class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable { + + var childCoordinators: [Coordinator] = [] + + var parent: ParentCoordinator? + + var navigationController: UINavigationController + let injector: Injector + + init(dependency: Dependency) { + self.navigationController = dependency.navigationController + self.injector = dependency.injector + } + + func start() { + + let viewModel = RegisterCenterInfoVM( + profileUseCase: injector.resolve(CenterProfileUseCase.self) + ) + + let coordinator = RegisterCenterInfoCoordinator( + viewModel: viewModel, + navigationController: navigationController + ) + + addChildCoordinator(coordinator) + coordinator.parent = self + coordinator.start() + } + + public func registerFinished() { + + clearChildren() + + parent?.removeChildCoordinator(self) + } +} + +extension CenterProfileRegisterCoordinator { + + func showOverViewScreen() { + printIfDebug("test test test") + + registerFinished() + } +} diff --git a/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift b/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift index 5d6204bf..a5b5dcc7 100644 --- a/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift +++ b/project/Projects/App/Sources/RootCoordinator/RootCoordinator+Extension.swift @@ -10,6 +10,7 @@ import AuthFeature extension RootCoordinator { + /// 로그인및 회원가입을 실행합니다. func auth() { let authCoordinator = AuthCoordinator( @@ -53,4 +54,5 @@ extension RootCoordinator { coordinator.start() } + } diff --git a/project/Projects/Data/ConcreteRepository/Auth/DefaultAuthRepository.swift b/project/Projects/Data/ConcreteRepository/Auth/DefaultAuthRepository.swift index 067f775a..a91ee8c2 100644 --- a/project/Projects/Data/ConcreteRepository/Auth/DefaultAuthRepository.swift +++ b/project/Projects/Data/ConcreteRepository/Auth/DefaultAuthRepository.swift @@ -60,9 +60,7 @@ public extension DefaultAuthRepository { genderType: registerState.gender, phoneNumber: registerState.phoneNumber, roadNameAddress: registerState.addressInformation.roadAddress, - lotNumberAddress: registerState.addressInformation.jibunAddress, - longitude: registerState.latitude, - latitude: registerState.logitude + lotNumberAddress: registerState.addressInformation.jibunAddress ) let data = (try? JSONEncoder().encode(dto)) ?? Data() diff --git a/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift b/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift index 4cad3a36..70551f3a 100644 --- a/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift +++ b/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift @@ -27,6 +27,24 @@ public class DefaultUserProfileRepository: UserProfileRepository { } } + /// 센터프로필(최초 센터정보)를 등록합니다. + public func registerCenterProfileForText(state: CenterProfileRegisterState) -> Single { + + let dto = RegisterCenterProfileDTO( + centerName: state.centerName, + officeNumber: state.officeNumber, + roadNameAddress: state.roadNameAddress, + lotNumberAddress: state.lotNumberAddress, + detailedAddress: state.detailedAddress, + introduce: state.introduce + ) + let data = try! JSONEncoder().encode(dto) + + return userInformationService + .request(api: .registerCenterProfile(data: data), with: .withToken) + .map { _ in () } + } + public func getCenterProfile() -> Single { userInformationService @@ -45,7 +63,6 @@ public class DefaultUserProfileRepository: UserProfileRepository { /// 이미지 업로드 public func uploadImage(_ userType: UserType, imageInfo: ImageUploadInfo) -> Single { - getPreSignedUrl(userType, ext: imageInfo.ext) .flatMap { [unowned self] dto in self.uploadImageToPreSignedUrl(url: dto.uploadUrl, data: imageInfo.data) diff --git a/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift b/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift index c3005e5f..bce3736d 100644 --- a/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift +++ b/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift @@ -23,6 +23,9 @@ extension UserType { public enum UserInformationAPI { + // 프로필 생성 + case registerCenterProfile(data: Data) + // 프로필 조회 case getCenterProfile case updateCenterProfile(officeNumber: String, introduce: String?) @@ -43,6 +46,8 @@ extension UserInformationAPI: BaseAPI { public var path: String { switch self { + case .registerCenterProfile: + "center/my/profile" case .getCenterProfile: "center/my/profile" case .updateCenterProfile: @@ -56,6 +61,8 @@ extension UserInformationAPI: BaseAPI { public var method: Moya.Method { switch self { + case .registerCenterProfile: + .post case .getCenterProfile: .get case .updateCenterProfile: @@ -76,6 +83,8 @@ extension UserInformationAPI: BaseAPI { public var task: Moya.Task { switch self { + case .registerCenterProfile(let data): + return .requestData(data) case .getCenterProfile: return .requestPlain case .updateCenterProfile(let officeNumber, let introduce): @@ -97,5 +106,4 @@ extension UserInformationAPI: BaseAPI { return .requestParameters(parameters: params, encoding: parameterEncoding) } } - } diff --git a/project/Projects/Data/NetworkDataSource/DTO/Auth/WorkerRegistrationDTO.swift b/project/Projects/Data/NetworkDataSource/DTO/Auth/WorkerRegistrationDTO.swift index 3ffa19df..2fa123f5 100644 --- a/project/Projects/Data/NetworkDataSource/DTO/Auth/WorkerRegistrationDTO.swift +++ b/project/Projects/Data/NetworkDataSource/DTO/Auth/WorkerRegistrationDTO.swift @@ -15,18 +15,14 @@ public struct WorkerRegistrationDTO: Encodable { public let phoneNumber: String public let roadNameAddress: String public let lotNumberAddress: String - public let longitude: String - public let latitude: String - public init(carerName: String, birthYear: Int, genderType: Gender, phoneNumber: String, roadNameAddress: String, lotNumberAddress: String, longitude: String, latitude: String) { + public init(carerName: String, birthYear: Int, genderType: Gender, phoneNumber: String, roadNameAddress: String, lotNumberAddress: String) { self.carerName = carerName self.birthYear = birthYear self.genderType = Self.convertGenderValue(genderType) self.phoneNumber = phoneNumber self.roadNameAddress = roadNameAddress self.lotNumberAddress = lotNumberAddress - self.longitude = longitude - self.latitude = latitude } } diff --git a/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift b/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift index 331f35b5..6d143c77 100644 --- a/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift +++ b/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift @@ -9,14 +9,14 @@ import Foundation import Entity public struct CenterProfileDTO: Codable { - let centerName: String? - let officeNumber: String? - let roadNameAddress: String? - let lotNumberAddress: String? - let detailedAddress: String? + let centerName: String + let officeNumber: String + let roadNameAddress: String + let lotNumberAddress: String + let detailedAddress: String + let introduce: String let longitude: String? let latitude: String? - let introduce: String? let profileImageUrl: String? } @@ -24,14 +24,14 @@ public extension CenterProfileDTO { func toEntity() -> CenterProfileVO { CenterProfileVO( - centerName: centerName ?? "", - officeNumber: officeNumber ?? "", - roadNameAddress: roadNameAddress ?? "", - lotNumberAddress: lotNumberAddress ?? "", - detailedAddress: detailedAddress ?? "", + centerName: centerName, + officeNumber: officeNumber, + roadNameAddress: roadNameAddress, + lotNumberAddress: lotNumberAddress, + detailedAddress: detailedAddress, longitude: longitude ?? "", latitude: latitude ?? "", - introduce: introduce ?? "", + introduce: introduce, profileImageURL: URL(string: profileImageUrl ?? "") ) } diff --git a/project/Projects/Data/NetworkDataSource/DTO/UserInfo/RegisterCenterProfileDTO.swift b/project/Projects/Data/NetworkDataSource/DTO/UserInfo/RegisterCenterProfileDTO.swift new file mode 100644 index 00000000..c586a04c --- /dev/null +++ b/project/Projects/Data/NetworkDataSource/DTO/UserInfo/RegisterCenterProfileDTO.swift @@ -0,0 +1,27 @@ +// +// RegisterCenterProfileDTO.swift +// NetworkDataSource +// +// Created by choijunios on 7/27/24. +// + +import Foundation +import Entity + +public struct RegisterCenterProfileDTO: Codable { + public let centerName: String + public let officeNumber: String + public let roadNameAddress: String + public let lotNumberAddress: String + public let detailedAddress: String + public let introduce: String + + public init(centerName: String, officeNumber: String, roadNameAddress: String, lotNumberAddress: String, detailedAddress: String, introduce: String) { + self.centerName = centerName + self.officeNumber = officeNumber + self.roadNameAddress = roadNameAddress + self.lotNumberAddress = lotNumberAddress + self.detailedAddress = detailedAddress + self.introduce = introduce + } +} diff --git a/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift b/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift index 632847ed..5c5f20ad 100644 --- a/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift +++ b/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift @@ -63,7 +63,7 @@ public class DefaultCenterProfileUseCase: CenterProfileUseCase { return .error(error) } - let updateImageResult = updateImage + let uploadImageResult = updateImage .catch { error in if let httpExp = error as? HTTPResponseException { let newError = HTTPResponseException( @@ -80,7 +80,63 @@ public class DefaultCenterProfileUseCase: CenterProfileUseCase { let task = Observable .zip( updateTextResult.asObservable(), - updateImageResult.asObservable() + uploadImageResult.asObservable() + ) + .map { _ in () } + .asSingle() + + return convert(task: task) { [unowned self] error in + toDomainError(error: error) + } + } + + public func registerCenterProfile(state: CenterProfileRegisterState) -> Single> { + + var registerImage: Single! + + let imageInfo = state.imageInfo + + if let imageInfo { + registerImage = repository.uploadImage( + .center, + imageInfo: imageInfo + ) + } else { + registerImage = .just(()) + } + + let registerTextResult = repository.registerCenterProfileForText(state: state) + .catch { error in + if let httpExp = error as? HTTPResponseException { + let newError = HTTPResponseException( + status: httpExp.status, + rawCode: "Err-001", + timeStamp: httpExp.timeStamp + ) + + return .error(newError) + } + return .error(error) + } + + let uploadImageResult = registerImage + .catch { error in + if let httpExp = error as? HTTPResponseException { + let newError = HTTPResponseException( + status: httpExp.status, + rawCode: "Err-002", + timeStamp: httpExp.timeStamp + ) + + return .error(newError) + } + return .error(error) + } + + let task = Observable + .zip( + registerTextResult.asObservable(), + uploadImageResult.asObservable() ) .map { _ in () } .asSingle() diff --git a/project/Projects/Domain/Entity/State/Auth/Worker/WorkerRegisterState.swift b/project/Projects/Domain/Entity/State/Auth/Worker/WorkerRegisterState.swift index 3fc0068c..8c3a06ea 100644 --- a/project/Projects/Domain/Entity/State/Auth/Worker/WorkerRegisterState.swift +++ b/project/Projects/Domain/Entity/State/Auth/Worker/WorkerRegisterState.swift @@ -13,8 +13,6 @@ public class WorkerRegisterState { public var birthYear: Int = 0 public var phoneNumber: String = "" public var addressInformation: AddressInformation = .init(roadAddress: "", jibunAddress: "") - public var latitude: String = "" - public var logitude: String = "" public init() { } @@ -25,8 +23,6 @@ public class WorkerRegisterState { phoneNumber = "" addressInformation.roadAddress = "" addressInformation.jibunAddress = "" - latitude = "" - logitude = "" } } diff --git a/project/Projects/Domain/Entity/State/Profile/CenterInfoRegisterState.swift b/project/Projects/Domain/Entity/State/Profile/CenterInfoRegisterState.swift new file mode 100644 index 00000000..39bba33d --- /dev/null +++ b/project/Projects/Domain/Entity/State/Profile/CenterInfoRegisterState.swift @@ -0,0 +1,24 @@ +// +// CenterProfileRegisterState.swift +// Entity +// +// Created by choijunios on 7/27/24. +// + +import Foundation + +public class CenterProfileRegisterState { + + // 모든 값들 required + public var centerName: String = "" + public var officeNumber: String = "" + public var roadNameAddress: String = "" + public var lotNumberAddress: String = "" + public var detailedAddress: String = "" + public var introduce: String = "" + + // 추후 이미지를 옵셔널로 바꿀수도 있음 + public var imageInfo: ImageUploadInfo? = nil + + public init() { } +} diff --git a/project/Projects/Domain/Entity/State/User/Gender.swift b/project/Projects/Domain/Entity/State/Util/Gender.swift similarity index 100% rename from project/Projects/Domain/Entity/State/User/Gender.swift rename to project/Projects/Domain/Entity/State/Util/Gender.swift diff --git a/project/Projects/Domain/Entity/State/User/UserType.swift b/project/Projects/Domain/Entity/State/Util/UserType.swift similarity index 100% rename from project/Projects/Domain/Entity/State/User/UserType.swift rename to project/Projects/Domain/Entity/State/Util/UserType.swift diff --git a/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift b/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift index cbc6ca84..081da6c3 100644 --- a/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift +++ b/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift @@ -11,6 +11,8 @@ import Entity public protocol UserProfileRepository: RepositoryBase { + func registerCenterProfileForText(state: CenterProfileRegisterState) -> Single + func getCenterProfile() -> Single func updateCenterProfileForText(phoneNumber: String, introduction: String?) -> Single diff --git a/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift b/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift index 7809cfc0..ec4d0ea6 100644 --- a/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift +++ b/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift @@ -9,13 +9,22 @@ import Foundation import RxSwift import Entity -/// 1. 센터 프로필 정보 조회 +/// 1. 나의 센터 프로필 정보 조회 /// 2. 센터 프로필 정보 업데이트(전화번호, 센터소개글) /// 3. 센터 프로필 정보 업데이트(이미지, pre-signed-url) /// 4. 센터 프로필 정보 업데이트(이미지, pre-signed-url-callback) +/// 5. 센터 프로필 최초 등록 public protocol CenterProfileUseCase: UseCaseBase { + /// 1. 나의 센터 프로필 정보 조회 func getProfile() -> Single> + + /// 2. 센터 프로필 정보 업데이트(전화번호, 센터소개글) + /// 3. 센터 프로필 정보 업데이트(이미지, pre-signed-url) + /// 4. 센터 프로필 정보 업데이트(이미지, pre-signed-url-callback) func updateProfile(phoneNumber: String?, introduction: String?, imageInfo: ImageUploadInfo?) -> Single> + + /// 5. 센터 프로필 최초 등록 + func registerCenterProfile(state: CenterProfileRegisterState) -> Single> } diff --git a/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift b/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift index 757f0eef..cd32fb6d 100644 --- a/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift +++ b/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift @@ -20,10 +20,17 @@ public class ImageSelectView: UIImageView { // Init public private(set) var state: BehaviorRelay + public weak var viewController: UIViewController! + + // Optinal values + public var onError: (()->())? + + // image public private(set) var editingImage: BehaviorRelay = .init(value: nil) - public init(state: State) { + public init(state: State, viewController: UIViewController) { self.state = .init(value: state) + self.viewController = viewController super.init(frame: .zero) setAppearacne() @@ -35,8 +42,8 @@ public class ImageSelectView: UIImageView { // View /// PlaceHolderView(Edit) - let placeholderViewForEdit: UIView = { - let view = UIView() + let placeholderViewForEdit: TappableUIView = { + let view = TappableUIView() view.backgroundColor = DSKitAsset.Colors.gray100.color let imageView = DSKitAsset.Icons.camera.image.toView() view.addSubview(imageView) @@ -79,6 +86,9 @@ public class ImageSelectView: UIImageView { private let disposeBag = DisposeBag() private func setAppearacne() { + + self.isUserInteractionEnabled = true + self.layer.cornerRadius = 6 self.clipsToBounds = true self.contentMode = .scaleToFill @@ -127,6 +137,7 @@ public class ImageSelectView: UIImageView { guard let self else { return } if image != nil { + self.image = image placeholderViewForEdit.isHidden = true placeholderViewForNormal.isHidden = true centerImageEditButton.isHidden = state == .normal @@ -137,5 +148,47 @@ public class ImageSelectView: UIImageView { } }) .disposed(by: disposeBag) + + Observable + .merge( + placeholderViewForEdit.rx.tap.asObservable(), + centerImageEditButton.rx.tap.asObservable() + ) + .asDriver(onErrorJustReturn: ()) + .drive(onNext: { [unowned self] in + showPhotoGalley() + }) + .disposed(by: disposeBag) + } +} + +extension ImageSelectView: UIImagePickerControllerDelegate, UINavigationControllerDelegate { + + private func showPhotoGalley() { + + let imagePickerVC = UIImagePickerController() + imagePickerVC.delegate = self + + if !UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { + onError?() + return + } + + imagePickerVC.sourceType = .photoLibrary + viewController.present(imagePickerVC, animated: true) + } + + public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + + if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { + + // image + editingImage.accept(image) + + picker.dismiss(animated: true) + } } } + + + diff --git a/project/Projects/Presentation/DSKit/Sources/CommonUI/TabBar/IdleTabBar.swift b/project/Projects/Presentation/DSKit/Sources/CommonUI/TabBar/IdleTabBar.swift index e5b756d3..b9275cc0 100644 --- a/project/Projects/Presentation/DSKit/Sources/CommonUI/TabBar/IdleTabBar.swift +++ b/project/Projects/Presentation/DSKit/Sources/CommonUI/TabBar/IdleTabBar.swift @@ -8,8 +8,12 @@ import UIKit import RxSwift import RxCocoa +import PresentationCore public class IdleTabBar: UIViewController { + + // Coordinator + public weak var coordinator: ParentCoordinator? // 탭바구성 public private(set) var viewControllers: [UIViewController] = [] diff --git a/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift b/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift new file mode 100644 index 00000000..65ae123c --- /dev/null +++ b/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift @@ -0,0 +1,30 @@ +// +// TappableUIView.swift +// DSKit +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import RxSwift +import RxCocoa + +public class TappableUIView: UIView { + + public init() { + super.init(frame: .zero) + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(onTouchAction)) + self.addGestureRecognizer(tapGesture) + } + required init?(coder: NSCoder) { fatalError() } + + @objc + func onTouchAction(_ tapGesture: UITapGestureRecognizer) { } +} + +public extension Reactive where Base == TappableUIView { + var tap: ControlEvent { + let source = self.methodInvoked(#selector(Base.onTouchAction)).map { _ in } + return ControlEvent(events: source) + } +} diff --git a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift index db48ac76..0b9fca5d 100644 --- a/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Auth/ExampleApp/Sources/SceneDelegate.swift @@ -21,7 +21,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(windowScene: windowScene) - window?.rootViewController = RegisterCenterInfoVC() + window?.rootViewController = UIViewController() window?.makeKeyAndVisible() } } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/CenterAuthMainViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/CenterAuthMainViewController.swift index 8368333f..de318edb 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/CenterAuthMainViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/CenterAuthMainViewController.swift @@ -11,6 +11,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature public class CenterAuthMainViewController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterLoginViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterLoginViewController.swift index 7045d86d..c111e4a6 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterLoginViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterLoginViewController.swift @@ -9,6 +9,7 @@ import UIKit import RxSwift import DSKit import PresentationCore +import BaseFeature public class CenterLoginViewController: BaseViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterSetNewPasswordController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterSetNewPasswordController.swift index 658fa10b..874f4f2d 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterSetNewPasswordController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/CenterSetNewPasswordController.swift @@ -10,6 +10,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature class CenterSetNewPasswordController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/ValidateNewPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/ValidateNewPasswordViewController.swift index a2367ed8..6b02b355 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/ValidateNewPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Login/ValidateNewPasswordViewController.swift @@ -10,6 +10,7 @@ import DSKit import RxCocoa import RxSwift import PresentationCore +import BaseFeature public protocol ChangePasswordSuccessInputable { var changePasswordButtonClicked: PublishRelay { get } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/AuthBusinessOwnerViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/AuthBusinessOwnerViewController.swift index fea73ad9..125ab2fb 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/AuthBusinessOwnerViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/AuthBusinessOwnerViewController.swift @@ -11,6 +11,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature public protocol AuthBusinessOwnerInputable { var editingBusinessNumber: BehaviorRelay { get set } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/CenterRegisterViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/CenterRegisterViewController.swift index be5de7fd..b1588f29 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/CenterRegisterViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/CenterRegisterViewController.swift @@ -10,6 +10,7 @@ import DSKit import RxCocoa import RxSwift import PresentationCore +import BaseFeature class CenterRegisterViewController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/SetIdPasswordViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/SetIdPasswordViewController.swift index c9fe9eae..3c4fb349 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/SetIdPasswordViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Center/Register/SetIdPasswordViewController.swift @@ -11,6 +11,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature public protocol SetIdInputable { var editingId: BehaviorRelay { get set } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/EnterNameViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/EnterNameViewController.swift index 75da09e3..306c3323 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/EnterNameViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/EnterNameViewController.swift @@ -10,6 +10,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature public protocol EnterNameInputable { var editingName: PublishRelay { get } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/ValidatePhoneNumberViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/ValidatePhoneNumberViewController.swift index 6704de6b..f199b1ed 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/ValidatePhoneNumberViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/ValidatePhoneNumberViewController.swift @@ -11,6 +11,7 @@ import RxCocoa import DSKit import Entity import PresentationCore +import BaseFeature public protocol AuthPhoneNumberInputable { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/SelectAuthTypeViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/SelectAuthTypeViewController.swift index a671773c..5dac8e71 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/SelectAuthTypeViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/SelectAuthTypeViewController.swift @@ -10,6 +10,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature class SelectAuthTypeViewController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift index 8003d07c..0f199c9f 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift @@ -11,6 +11,7 @@ import RxCocoa import DSKit import Entity import PresentationCore +import BaseFeature public protocol EnterAddressInputable { var addressInformation: PublishRelay { get } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EntetPersonalInfoViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EntetPersonalInfoViewController.swift index 47616893..83fc43b7 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EntetPersonalInfoViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EntetPersonalInfoViewController.swift @@ -11,6 +11,7 @@ import RxCocoa import DSKit import Entity import PresentationCore +import BaseFeature protocol WorkerPersonalInfoInputable: EnterNameInputable, SelectGenderInputable { var edtingBirthYear: PublishRelay { get } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/SelectGenderViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/SelectGenderViewController.swift index 23cd8c14..1814d400 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/SelectGenderViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/SelectGenderViewController.swift @@ -11,6 +11,7 @@ import RxCocoa import DSKit import Entity import PresentationCore +import BaseFeature protocol SelectGenderInputable { var selectingGender: BehaviorRelay { get } diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerAuthMainViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerAuthMainViewController.swift index bbbb0d57..86a013e5 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerAuthMainViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerAuthMainViewController.swift @@ -11,6 +11,7 @@ import DSKit import RxSwift import RxCocoa import PresentationCore +import BaseFeature public class WorkerAuthMainViewController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerRegisterViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerRegisterViewController.swift index 56ee3dd3..62ce45ff 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerRegisterViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/WorkerRegisterViewController.swift @@ -10,6 +10,7 @@ import DSKit import RxCocoa import RxSwift import PresentationCore +import BaseFeature class WorkerRegisterViewController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/AuthInOutStreamManager/AuthInOutStreamManager+IdPassword.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/AuthInOutStreamManager/AuthInOutStreamManager+IdPassword.swift index b582d20c..e58fb4da 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/AuthInOutStreamManager/AuthInOutStreamManager+IdPassword.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/AuthInOutStreamManager/AuthInOutStreamManager+IdPassword.swift @@ -12,7 +12,6 @@ import PresentationCore import UseCaseInterface import Entity - extension AuthInOutStreamManager { static func idInOut( diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterLoginViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterLoginViewModel.swift index 26cc6c30..73e42a07 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterLoginViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterLoginViewModel.swift @@ -6,10 +6,12 @@ // import RxSwift +import BaseFeature import RxCocoa import UseCaseInterface import Entity import PresentationCore +import BaseFeature public class CenterLoginViewModel: ViewModelType { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterSetNewPasswordViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterSetNewPasswordViewModel.swift index d4f65641..867f6f2e 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterSetNewPasswordViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Login/CenterSetNewPasswordViewModel.swift @@ -10,6 +10,7 @@ import RxCocoa import UseCaseInterface import Entity import PresentationCore +import BaseFeature public class CenterSetNewPasswordViewModel: ViewModelType { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Register/CenterRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Register/CenterRegisterViewModel.swift index 8f51ea50..d55c1516 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Register/CenterRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/Register/CenterRegisterViewModel.swift @@ -11,6 +11,7 @@ import RxCocoa import PresentationCore import UseCaseInterface import Entity +import BaseFeature public class CenterRegisterViewModel: ViewModelType { diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift deleted file mode 100644 index aab73d41..00000000 --- a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Center/RegisterCenterInfo/RegisterCenterInfoVM.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// RegisterCenterInfoVM.swift -// AuthFeature -// -// Created by choijunios on 7/26/24. -// - -import Foundation diff --git a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Worker/Register/WorkerRegisterViewModel.swift b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Worker/Register/WorkerRegisterViewModel.swift index 441aab15..a196ea4d 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Worker/Register/WorkerRegisterViewModel.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/ViewModel/Worker/Register/WorkerRegisterViewModel.swift @@ -11,6 +11,7 @@ import RxCocoa import PresentationCore import UseCaseInterface import Entity +import BaseFeature public class WorkerRegisterViewModel: ViewModelType { @@ -85,13 +86,9 @@ public class WorkerRegisterViewModel: ViewModelType { // 예외적으로 ViewModel에서 구독처리 input .addressInformation - .subscribe { [unowned self] info in - self.stateObject.addressInformation = info - - // TODO: 위동 경도 API 적용 - self.stateObject.latitude = "37.5036833" - self.stateObject.logitude = "127.0448556" - } + .subscribe(onNext: { [stateObject] info in + stateObject.addressInformation = info + }) .disposed(by: disposeBag) registerInOut() diff --git a/project/Projects/Presentation/Feature/Base/ExampleApp/Resources/LaunchScreen.storyboard b/project/Projects/Presentation/Feature/Base/ExampleApp/Resources/LaunchScreen.storyboard new file mode 100644 index 00000000..a2157a3e --- /dev/null +++ b/project/Projects/Presentation/Feature/Base/ExampleApp/Resources/LaunchScreen.storyboard @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/AppDelegate.swift b/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/AppDelegate.swift new file mode 100644 index 00000000..00267bb5 --- /dev/null +++ b/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// +// +// Created by 최준영 on 6/19/24. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/SceneDelegate.swift new file mode 100644 index 00000000..015452b5 --- /dev/null +++ b/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/SceneDelegate.swift @@ -0,0 +1,23 @@ +// +// SceneDelegate.swift +// +// +// Created by 최준영 on 6/19/24. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + + guard let windowScene = scene as? UIWindowScene else { return } + + + window = UIWindow(windowScene: windowScene) + window?.rootViewController = ViewController() + window?.makeKeyAndVisible() + } +} diff --git a/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/ViewController.swift b/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/ViewController.swift new file mode 100644 index 00000000..e439d432 --- /dev/null +++ b/project/Projects/Presentation/Feature/Base/ExampleApp/Sources/ViewController.swift @@ -0,0 +1,29 @@ +// +// ViewController.swift +// +// +// Created by 최준영 on 6/19/24. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + + let initialLabel = UILabel() + + initialLabel.text = "Example app" + + view.backgroundColor = .white + + view.addSubview(initialLabel) + initialLabel.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + initialLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), + initialLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + } +} + diff --git a/project/Projects/Presentation/Feature/Base/Project.swift b/project/Projects/Presentation/Feature/Base/Project.swift new file mode 100644 index 00000000..f5ac7ba9 --- /dev/null +++ b/project/Projects/Presentation/Feature/Base/Project.swift @@ -0,0 +1,81 @@ +// +// Project.swift +// ProjectDescriptionHelpers +// +// Created by choijunios on 2024/07/27 +// + +import ProjectDescription +import ProjectDescriptionHelpers +import ConfigurationPlugin +import DependencyPlugin + +let project = Project( + name: "Base", + settings: .settings( + configurations: IdleConfiguration.emptyConfigurations + ), + targets: [ + + /// FeatureConcrete + .target( + name: "BaseFeature", + destinations: DeploymentSettings.platform, + product: .staticFramework, + bundleId: "$(PRODUCT_BUNDLE_IDENTIFIER)", + deploymentTargets: DeploymentSettings.deployment_version, + sources: ["Sources/**"], + resources: ["Resources/**"], + dependencies: [ + // Presentation + D.Presentation.PresentationCore, + D.Presentation.DSKit, + + // Domain + D.Domain.UseCaseInterface, + D.Domain.RepositoryInterface, + + // ThirdParty + D.ThirdParty.RxSwift, + D.ThirdParty.RxCocoa, + ], + settings: .settings( + configurations: IdleConfiguration.presentationConfigurations + ) + ), + + /// FeatureConcrete ExampleApp + .target( + name: "Base_ExampleApp", + destinations: DeploymentSettings.platform, + product: .app, + bundleId: "$(PRODUCT_BUNDLE_IDENTIFIER)", + deploymentTargets: DeploymentSettings.deployment_version, + infoPlist: IdleInfoPlist.exampleAppDefault, + sources: ["ExampleApp/Sources/**"], + resources: ["ExampleApp/Resources/**"], + dependencies: [ + .target(name: "BaseFeature"), + ], + settings: .settings( + configurations: IdleConfiguration.presentationConfigurations + ) + ), + ], + schemes: [ + Scheme.makeSchemes( + .target("BaseFeature"), + configNames: [ + IdleConfiguration.debugConfigName, + IdleConfiguration.releaseConfigName + ] + ), + Scheme.makeSchemes( + .target("Base_ExampleApp"), + configNames: [ + IdleConfiguration.debugConfigName, + IdleConfiguration.releaseConfigName + ] + ) + ].flatMap { $0 } +) diff --git a/project/Projects/Presentation/Feature/Base/Resources/Empty.md b/project/Projects/Presentation/Feature/Base/Resources/Empty.md new file mode 100644 index 00000000..64e53d46 --- /dev/null +++ b/project/Projects/Presentation/Feature/Base/Resources/Empty.md @@ -0,0 +1,2 @@ +# <#Title#> + diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/DaumAddressSearchViewController.swift b/project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift similarity index 100% rename from project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/DaumAddressSearchViewController.swift rename to project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift index b372f41f..75c870f0 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Common/Register/DaumAddressSearchViewController.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift @@ -10,8 +10,8 @@ import RxSwift import RxCocoa import DSKit import Entity -import PresentationCore import WebKit +import PresentationCore public enum AddressDataKey: String, CaseIterable { case address="address" diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/BaseViewController.swift b/project/Projects/Presentation/Feature/Base/Sources/ViewController/BaseViewController.swift similarity index 80% rename from project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/BaseViewController.swift rename to project/Projects/Presentation/Feature/Base/Sources/ViewController/BaseViewController.swift index 44579952..dc4f5f6d 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/BaseViewController.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/ViewController/BaseViewController.swift @@ -1,6 +1,6 @@ // // BaseViewController.swift -// PresentationCore +// BaseFeature // // Created by choijunios on 7/23/24. // @@ -11,9 +11,9 @@ import Entity open class BaseViewController: UIViewController { } // MARK: Alert -extension BaseViewController { +public extension BaseViewController { - public func showAlert(vo: DefaultAlertContentVO) { + func showAlert(vo: DefaultAlertContentVO) { let alret = UIAlertController(title: vo.title, message: vo.message, preferredStyle: .alert) let close = UIAlertAction(title: "닫기", style: .default, handler: nil) alret.addAction(close) diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/DisposableViewController.swift b/project/Projects/Presentation/Feature/Base/Sources/ViewController/DisposableViewController.swift similarity index 92% rename from project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/DisposableViewController.swift rename to project/Projects/Presentation/Feature/Base/Sources/ViewController/DisposableViewController.swift index 28a60fda..39ff868c 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/DisposableViewController.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/ViewController/DisposableViewController.swift @@ -1,6 +1,6 @@ // // DisposableViewController.swift -// PresentationCore +// BaseFeature // // Created by choijunios on 6/30/24. // diff --git a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/Auth/RegisterSuccessOutputable.swift b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/Auth/RegisterSuccessOutputable.swift similarity index 100% rename from project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/Auth/RegisterSuccessOutputable.swift rename to project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/Auth/RegisterSuccessOutputable.swift diff --git a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift similarity index 94% rename from project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift rename to project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift index b298c04c..26f6c8f8 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/CTAButton.swift @@ -1,6 +1,6 @@ // // CTAButton.swift -// PresentationCore +// BaseFeature // // Created by choijunios on 7/6/24. // diff --git a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift similarity index 90% rename from project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift rename to project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift index ab9aec40..b37cfb62 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/InputOuputConstraint/DefaultAlertOutputable.swift @@ -1,6 +1,6 @@ // // DefaultAlertOutputable.swift -// PresentationCore +// BaseFeature // // Created by choijunios on 7/25/24. // diff --git a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/ViewModelType.swift b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/ViewModelType.swift similarity index 92% rename from project/Projects/Presentation/PresentationCore/Sources/ViewModelType/ViewModelType.swift rename to project/Projects/Presentation/Feature/Base/Sources/ViewModelType/ViewModelType.swift index dda8fd44..31032b70 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ViewModelType/ViewModelType.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/ViewModelType/ViewModelType.swift @@ -1,6 +1,6 @@ // // ViewModelType.swift -// PresentationCore +// BaseFeature // // Created by choijunios on 7/6/24. // diff --git a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift index 6ec3bf68..4cb49ad0 100644 --- a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift @@ -23,7 +23,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { let store = TestStore() try! store.saveAuthToken( - accessToken: "", + accessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOm51bGwsInN1YiI6bnVsbCwiaXNzIjoiM2lkaW90cyIsImlhdCI6MTcyMjA1MzYzNiwibmJmIjoxNzIyMDUzNjM2LCJleHAiOjE3MjIwNTQyMzYsInR5cGUiOiJBQ0NFU1NfVE9LRU4iLCJ1c2VySWQiOiIwMTkwZjI2NS0yYmVkLTc1MTEtYjljNy1hZjEwOTNhZTUzZmIiLCJwaG9uZU51bWJlciI6IjAxMC00NDQ0LTUyMzIiLCJ1c2VyVHlwZSI6ImNlbnRlciJ9.nNSNvLmOArvSKThCUHG7liWW-mvN8cudc40mYiTWE-c", refreshToken: "" ) @@ -31,16 +31,22 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { repository: DefaultUserProfileRepository(store) ) - let viewModel = CenterProfileViewModel( - useCase: useCase + let viewModel = RegisterCenterInfoVM( + profileUseCase: useCase ) - let vc = CenterProfileViewController() + let navigationController = UINavigationController() + navigationController.setNavigationBarHidden(true, animated: false) - vc.bind(viewModel: viewModel) + let coordinator = RegisterCenterInfoCoordinator( + viewModel: viewModel, + navigationController: navigationController + ) window = UIWindow(windowScene: windowScene) - window?.rootViewController = vc + window?.rootViewController = navigationController window?.makeKeyAndVisible() + + coordinator.start() } } diff --git a/project/Projects/Presentation/Feature/Center/Project.swift b/project/Projects/Presentation/Feature/Center/Project.swift index 5c87b31d..c9aee5ee 100644 --- a/project/Projects/Presentation/Feature/Center/Project.swift +++ b/project/Projects/Presentation/Feature/Center/Project.swift @@ -28,6 +28,7 @@ let project = Project( resources: ["Resources/**"], dependencies: [ // Presentation + D.Presentation.BaseFeature, D.Presentation.PresentationCore, D.Presentation.DSKit, diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift new file mode 100644 index 00000000..47c0cb60 --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift @@ -0,0 +1,42 @@ +// +// RegisterCenterInfoCoordinator.swift +// CenterFeature +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import PresentationCore + +public class RegisterCenterInfoCoordinator: ChildCoordinator { + + public weak var viewControllerRef: UIViewController? + public weak var parent: CenterProfileRegisterCoordinatable? + + public let navigationController: UINavigationController + + public let viewModel: RegisterCenterInfoViewModelable + + public init( + viewModel: RegisterCenterInfoViewModelable, + navigationController: UINavigationController + ) { + self.viewModel = viewModel + self.navigationController = navigationController + } + + public func start() { + let vc = RegisterCenterInfoVC() + vc.bind(viewModel: viewModel) + vc.coordinator = self.parent + + viewControllerRef = vc + + navigationController.pushViewController(vc, animated: true) + } + + public func coordinatorDidFinish() { + parent?.removeChildCoordinator(self) + } + +} diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift index e2d6fa48..0ce377ad 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift @@ -11,6 +11,7 @@ import RxSwift import RxCocoa import DSKit import Entity +import BaseFeature public protocol CenterProfileViewModelable where Input: CenterProfileInputable, Output: CenterProfileOutputable { associatedtype Input diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift similarity index 55% rename from project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift rename to project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift index fdbe5d64..f1549b4e 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Center/RegisterCenterInfo/RegisterCenterInfoVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift @@ -6,6 +6,7 @@ // import UIKit +import BaseFeature import PresentationCore import RxCocoa import RxSwift @@ -19,15 +20,35 @@ enum RegisterCenterInfoPage: Int, CaseIterable { } public protocol RegisterCenterInfoViewModelable { + // Input + var editingName: PublishRelay { get } + var editingCenterNumber: PublishRelay { get } + var editingAddress: PublishRelay { get } + var editingDetailAddress: PublishRelay { get } + + var editingCenterIntroduction: PublishRelay { get } + var editingCenterImage: PublishRelay { get } + + var completeButtonPressed: PublishRelay { get } + + // Output + var nameAndNumberValidation: Driver? { get } + var addressValidation: Driver? { get } + var imageAndIntroductionValidation: Driver? { get } + var profileRegisterSuccess: Driver? { get } + var alert: Driver? { get } } +fileprivate protocol CtaButtonIncludedView: UIView { + var ctaButton: CTAButtonType1 { get } + func bind(viewModel vm: RegisterCenterInfoViewModelable) +} -public class RegisterCenterInfoVC: UIViewController { +public class RegisterCenterInfoVC: BaseViewController { // Init - // Not init /// 현재 스크린의 넓이를 의미합니다. private var screenWidth: CGFloat { @@ -36,10 +57,16 @@ public class RegisterCenterInfoVC: UIViewController { } return screenWidth } + + public weak var coordinator: CenterProfileRegisterCoordinatable? - private var pageViews: [UIView] = [] + private var pageViews: [CtaButtonIncludedView] = [] + private var pagesAreSetted = false + + var currentIndex: Int = 0 - var currentIndex: Int = -1 + // For RC=1 + private var viewModel: RegisterCenterInfoViewModelable? // View let navigationBar: NavigationBarType1 = { @@ -51,36 +78,38 @@ public class RegisterCenterInfoVC: UIViewController { lazy var statusBar: ProcessStatusBar = { let view = ProcessStatusBar( - processCount: 3, + processCount: RegisterCenterInfoPage.allCases.count, startIndex: 0 ) return view }() - // 하단 버튼 - private let ctaButton: CTAButtonType1 = { - - let button = CTAButtonType1(labelText: "다음") - - return button - }() - let disposeBag = DisposeBag() public init() { super.init(nibName: nil, bundle: nil) + + // View를 생성 + // View를 여기서 생성하는 이유는 bind매서드호출시(viewDidLoad이후) view들을 바인딩 시키기 위해서 입니다. + createPages() + setPagesLayoutAndObservable() } required init?(coder: NSCoder) { fatalError() } public override func viewDidLoad() { + // ViewController setAppearance() + setLayout() + setObservable() } /// 화면의 넓이를 안전하게 접근할 수 있는 시점, 화면 관련 속성들이 설정되어 있으므로 nil이 아닙니다. public override func viewDidAppear(_ animated: Bool) { - setLayout() - test() + if !pagesAreSetted { + pagesAreSetted = true + displayPageView() + } } private func setAppearance() { @@ -88,12 +117,22 @@ public class RegisterCenterInfoVC: UIViewController { view.layoutMargins = .init(top: 0, left: 20, bottom: 0, right: 20) } + private func setObservable() { + + // 뒤로가기 바인딩 + navigationBar + .eventPublisher + .subscribe { [weak self] _ in + self?.prev() + } + .disposed(by: disposeBag) + } + private func setLayout() { [ navigationBar, statusBar, - ctaButton, ].forEach { view.addSubview($0) $0.translatesAutoresizingMaskIntoConstraints = false @@ -107,42 +146,27 @@ public class RegisterCenterInfoVC: UIViewController { statusBar.topAnchor.constraint(equalTo: navigationBar.bottomAnchor, constant: 7), statusBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), statusBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), - - ctaButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16), - ctaButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), - ctaButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), ]) - - setPages() - next(animated: false) - } - - public func test() { - - ctaButton.eventPublisher.subscribe { [weak self] _ in - self?.next() - } - .disposed(by: disposeBag) - - navigationBar.eventPublisher.subscribe { [weak self] _ in - self?.prev() - } - .disposed(by: disposeBag) } - private func setPages() { - + private func createPages() { self.pageViews = RegisterCenterInfoPage.allCases.map { page in switch page { case .nameAndPhoneNumber: - NameAndPhoneNumberView() + return NameAndPhoneNumberView() case .address: - AddressView() + return AddressView(viewController: self) case .imageAndIntroduction: - ImageAndIntroductionView() + let view = ImageAndIntroductionView(viewController: self) + view.coordinator = coordinator + return view } } - + } + + private func setPagesLayoutAndObservable() { + + // 레이아웃 설정 pageViews .enumerated() .forEach { index, subView in @@ -153,23 +177,48 @@ public class RegisterCenterInfoVC: UIViewController { subView.topAnchor.constraint(equalTo: statusBar.bottomAnchor), subView.leadingAnchor.constraint(equalTo: view.leadingAnchor), subView.trailingAnchor.constraint(equalTo: view.trailingAnchor), - subView.bottomAnchor.constraint(equalTo: ctaButton.topAnchor), + subView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), ]) - - subView.transform = .init(translationX: screenWidth, y: 0) } + + // 첫번째 뷰를 최상단으로 + view.bringSubviewToFront(pageViews.first!) + + // 옵저버블 설정 + let observables = pageViews + .map { view in + view.ctaButton.eventPublisher + } + Observable + .merge(observables) + .subscribe(onNext: { [weak self] _ in + self?.next() + }) + .disposed(by: disposeBag) + } + + private func displayPageView() { + // 뷰들을 오른쪽으로 이동 + pageViews.forEach { view in + view.transform = .init(translationX: screenWidth, y: 0) + } + // 첫번째 뷰를 표시 + pageViews.first?.transform = .identity } private func next(animated: Bool = true) { if let nextIndex = RegisterCenterInfoPage(rawValue: currentIndex+1)?.rawValue { + // Status바 이동 + statusBar.moveToSignal.onNext(.next) + let prevView: UIView? = currentIndex != -1 ? pageViews[currentIndex] : nil let willShowView = pageViews[nextIndex] currentIndex = nextIndex - UIView.animate(withDuration: animated ? 0.5 : 0.0) { [screenWidth, prevView, willShowView] in + UIView.animate(withDuration: animated ? 0.35 : 0.0) { [screenWidth, prevView, willShowView] in prevView?.transform = .init(translationX: -screenWidth, y: 0) willShowView.transform = .identity @@ -180,6 +229,9 @@ public class RegisterCenterInfoVC: UIViewController { private func prev(animated: Bool = true) { if let nextIndex = RegisterCenterInfoPage(rawValue: currentIndex-1)?.rawValue { + // Status바 이동 + statusBar.moveToSignal.onNext(.prev) + let prevView = pageViews[currentIndex] let willShowView = pageViews[nextIndex] @@ -190,19 +242,38 @@ public class RegisterCenterInfoVC: UIViewController { prevView.transform = .init(translationX: screenWidth, y: 0) willShowView.transform = .identity } + } else { + + // 돌아가기, Coordinator호출 + coordinator?.registerFinished() } } public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + // RC=1 + self.viewModel = vm + // Output + vm + .alert? + .drive { [weak self] vo in + self?.showAlert(vo: vo) + } + .disposed(by: disposeBag) + + // pageView에 ViewModel을 바인딩 + pageViews + .forEach { pv in + pv.bind(viewModel: vm) + } } } extension RegisterCenterInfoVC { // MARK: CenterInfoView (이름 + 센터 연락처) - class NameAndPhoneNumberView: UIView { + class NameAndPhoneNumberView: UIView, CtaButtonIncludedView { // View private let processTitle: IdleLabel = { @@ -229,6 +300,14 @@ extension RegisterCenterInfoVC { return field }() + // 하단 버튼 + let ctaButton: CTAButtonType1 = { + + let button = CTAButtonType1(labelText: "다음") + button.setEnabled(false) + return button + }() + init() { super.init(frame: .zero) setAppearance() @@ -237,7 +316,7 @@ extension RegisterCenterInfoVC { required init?(coder: NSCoder) { fatalError() } private func setAppearance() { - + self.backgroundColor = .white self.layoutMargins = .init(top: 32, left: 20, bottom: 0, right: 20) } @@ -254,7 +333,8 @@ extension RegisterCenterInfoVC { [ processTitle, - inputStack + inputStack, + ctaButton ].forEach { $0.translatesAutoresizingMaskIntoConstraints = false self.addSubview($0) @@ -269,17 +349,42 @@ extension RegisterCenterInfoVC { inputStack.topAnchor.constraint(equalTo: processTitle.bottomAnchor, constant: 32), inputStack.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), inputStack.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + + ctaButton.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + ctaButton.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + ctaButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -16) ]) } + private let disposeBag = DisposeBag() + public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + // input + nameField + .eventPublisher + .bind(to: vm.editingName) + .disposed(by: disposeBag) + phoneNumberField + .eventPublisher + .bind(to: vm.editingCenterNumber) + .disposed(by: disposeBag) + // Output + vm + .nameAndNumberValidation? + .drive { [ctaButton] isValid in + ctaButton.setEnabled(isValid) + } + .disposed(by: disposeBag) } } // MARK: 센터주소 (도로명, 지번주소 + 상세주소) - class AddressView: UIView { + class AddressView: UIView, DaumAddressSearchDelegate, CtaButtonIncludedView { + + // init + public weak var viewController: UIViewController? // View private let processTitle: IdleLabel = { @@ -288,16 +393,15 @@ extension RegisterCenterInfoVC { label.textAlignment = .left return label }() - - let nameField: IFType2 = { - let field = IFType2( - titleLabelText: "도로명주소", - placeHolderText: "도로명 주소를 입력해주세요." - ) - return field + + private let addressSearchButton: TextButtonType2 = { + + let button = TextButtonType2(labelText: "도로명 주소를 입력해주세요.") + + return button }() - let phoneNumberField: IFType2 = { + let detailAddressField: IFType2 = { let field = IFType2( titleLabelText: "상세 주소", placeHolderText: "상세 주소를 입력해주세요. (예: 2층 204호)" @@ -305,24 +409,52 @@ extension RegisterCenterInfoVC { return field }() - init() { + // 하단 버튼 + let ctaButton: CTAButtonType1 = { + + let button = CTAButtonType1(labelText: "다음") + button.setEnabled(false) + return button + }() + + // Observable + private let addressPublisher: PublishRelay = .init() + private let disposeBag = DisposeBag() + + init(viewController vc: UIViewController) { + self.viewController = vc super.init(frame: .zero) setAppearance() setLayout() + setObservable() } required init?(coder: NSCoder) { fatalError() } private func setAppearance() { - + self.backgroundColor = .white self.layoutMargins = .init(top: 32, left: 20, bottom: 0, right: 20) } private func setLayout() { + let roadAddressStack = VStack( + [ + { + let label = IdleLabel(typography: .Subtitle4) + label.textString = "도로명주소" + label.textAlignment = .left + return label + }(), + addressSearchButton, + ], + spacing: 6, + alignment: .fill + ) + let inputStack = VStack( [ - nameField, - phoneNumberField + roadAddressStack, + detailAddressField ], spacing: 28, alignment: .fill @@ -330,7 +462,8 @@ extension RegisterCenterInfoVC { [ processTitle, - inputStack + inputStack, + ctaButton ].forEach { $0.translatesAutoresizingMaskIntoConstraints = false self.addSubview($0) @@ -345,17 +478,75 @@ extension RegisterCenterInfoVC { inputStack.topAnchor.constraint(equalTo: processTitle.bottomAnchor, constant: 32), inputStack.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), inputStack.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + + ctaButton.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + ctaButton.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + ctaButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -16) ]) } + private func setObservable() { + + addressSearchButton + .eventPublisher + .subscribe { [weak self] _ in + self?.showDaumSearchView() + } + .disposed(by: disposeBag) + } + + private func showDaumSearchView() { + let vc = DaumAddressSearchViewController() + vc.deleage = self + vc.modalPresentationStyle = .fullScreen + viewController?.navigationController?.pushViewController(vc, animated: true) + } + public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + // Input + addressPublisher + .bind(to: vm.editingAddress) + .disposed(by: disposeBag) + + detailAddressField + .uITextField.rx.text + .compactMap { $0 } + .bind(to: vm.editingDetailAddress) + .disposed(by: disposeBag) + // output + vm + .addressValidation? + .drive(onNext: { [ctaButton] isValid in + ctaButton.setEnabled(isValid) + }) + .disposed(by: disposeBag) + } + + public func addressSearch(addressData: [AddressDataKey : String]) { + +// let address = addressData[.address] ?? "알 수 없는 주소" + let jibunAddress = addressData[.jibunAddress] ?? "알 수 없는 지번 주소" + let roadAddress = addressData[.roadAddress] ?? "알 수 없는 도로명 주소" + + addressSearchButton.label.textString = roadAddress + addressPublisher.accept( + AddressInformation( + roadAddress: roadAddress, + jibunAddress: jibunAddress + ) + ) } } // MARK: 센터 소개 (프로필 사진 + 센터소개) - class ImageAndIntroductionView: UIView { + class ImageAndIntroductionView: UIView, CtaButtonIncludedView { + + weak var coordinator: CenterProfileRegisterCoordinatable? + + // init + public weak var viewController: UIViewController! // View private let processTitle: IdleLabel = { @@ -381,19 +572,33 @@ extension RegisterCenterInfoVC { return textView }() - private let centerImageView: ImageSelectView = { - let view = ImageSelectView(state: .editing) + private lazy var centerImageView: ImageSelectView = { + let view = ImageSelectView(state: .editing, viewController: viewController) return view }() - init() { + // 하단 버튼 + let ctaButton: CTAButtonType1 = { + + let button = CTAButtonType1(labelText: "다음") + button.setEnabled(false) + return button + }() + + // Observable + private let disposeBag = DisposeBag() + + init(viewController: UIViewController) { + self.viewController = viewController super.init(frame: .zero) setAppearance() setLayout() } required init?(coder: NSCoder) { fatalError() } - private func setAppearance() { } + private func setAppearance() { + self.backgroundColor = .white + } private func setLayout() { @@ -431,7 +636,6 @@ extension RegisterCenterInfoVC { alignment: .fill ) - let scrollView = UIScrollView() [ processTitle, @@ -460,7 +664,8 @@ extension RegisterCenterInfoVC { ]) [ - scrollView + scrollView, + ctaButton, ].forEach { $0.translatesAutoresizingMaskIntoConstraints = false self.addSubview($0) @@ -469,13 +674,49 @@ extension RegisterCenterInfoVC { scrollView.topAnchor.constraint(equalTo: self.topAnchor), scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor), scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor), - scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor), + scrollView.bottomAnchor.constraint(equalTo: ctaButton.topAnchor), + + ctaButton.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + ctaButton.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + ctaButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -16) ]) } public func bind(viewModel vm: RegisterCenterInfoViewModelable) { + // Input + centerIntroductionField + .rx.text + .compactMap { $0 } + .bind(to: vm.editingCenterIntroduction) + .disposed(by: disposeBag) + + centerImageView + .editingImage + .compactMap { $0 } + .bind(to: vm.editingCenterImage) + .disposed(by: disposeBag) + + // 완료버튼 + ctaButton + .eventPublisher + .bind(to: vm.completeButtonPressed) + .disposed(by: disposeBag) + + // Output + vm + .imageAndIntroductionValidation? + .drive(onNext: { [ctaButton] isValid in + ctaButton.setEnabled(isValid) + }) + .disposed(by: disposeBag) + vm + .profileRegisterSuccess? + .drive(onNext: { [weak coordinator] _ in + coordinator?.showOverViewScreen() + }) + .disposed(by: disposeBag) } } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift new file mode 100644 index 00000000..c86276e7 --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift @@ -0,0 +1,148 @@ +// +// RegisterCenterInfoVM.swift +// AuthFeature +// +// Created by choijunios on 7/26/24. +// + +import UIKit +import RxCocoa +import RxSwift +import Entity +import PresentationCore +import UseCaseInterface + +public class RegisterCenterInfoVM: RegisterCenterInfoViewModelable { + + // Input + public var editingName: PublishRelay = .init() + public var editingCenterNumber: PublishRelay = .init() + public var editingAddress: PublishRelay = .init() + public var editingDetailAddress: PublishRelay = .init() + public var editingCenterIntroduction: PublishRelay = .init() + public var editingCenterImage: PublishRelay = .init() + public var completeButtonPressed: PublishRelay = .init() + + // Output + public var nameAndNumberValidation: Driver? = nil + public var addressValidation: Driver? = nil + public var imageAndIntroductionValidation: Driver? = nil + public var profileRegisterSuccess: Driver? = nil + public var alert: Driver? = nil + + // StatObject + private let stateObject = CenterProfileRegisterState() + + public init(profileUseCase useCase: CenterProfileUseCase) { + + // Set stream + self.nameAndNumberValidation = Observable + .combineLatest( + editingName, + editingCenterNumber + ) + .map { [stateObject] (name, phoneNumber) in + + printIfDebug("\(#function) 입력중인 센터이름: \(name)") + printIfDebug("\(#function) 입력중인 센터번호: \(phoneNumber)") + + stateObject.centerName = name + stateObject.officeNumber = phoneNumber + + return !name.isEmpty && !phoneNumber.isEmpty + } + .asDriver(onErrorJustReturn: false) + + self.addressValidation = Observable + .combineLatest( + editingAddress, + editingDetailAddress + ) + .map { [stateObject] (addressInfo, detailAd) in + + printIfDebug("\(#function) 입력중인 도려명 주소: \(addressInfo.roadAddress) \n 지번: \(addressInfo.jibunAddress)") + printIfDebug("\(#function) 입력중인 주소 디테일: \(detailAd)") + + let road = addressInfo.roadAddress + let jibun = addressInfo.jibunAddress + stateObject.roadNameAddress = road + stateObject.lotNumberAddress = jibun + stateObject.detailedAddress = detailAd + + return !road.isEmpty && !jibun.isEmpty && !detailAd.isEmpty + } + .asDriver(onErrorJustReturn: false) + + let imageValidation = editingCenterImage + .map { [unowned self] image in + validateSelectedImage(image: image) + } + .share() + + let imageValidationSuccess = imageValidation + .compactMap { $0 } + + let imageValidationFailure = imageValidation + .filter { $0 == nil } + .map { _ in + DefaultAlertContentVO( + title: "이미지 업로드 실패", + message: "지원하지 않는 파일 형식" + ) + } + + self.imageAndIntroductionValidation = Observable + .combineLatest( + editingCenterIntroduction, + imageValidationSuccess + ) + .map { [stateObject] (intro, imageInfo) in + + printIfDebug("\(#function) 입력중인 센터소개: \(intro)") + + stateObject.introduce = intro + stateObject.imageInfo = imageInfo + + return !intro.isEmpty + } + .asDriver(onErrorJustReturn: false) + + let profileRegisterResult = self.completeButtonPressed + .flatMap { [useCase, stateObject] _ in +#if DEBUG + return Single>.just(.success(())) +#endif + return useCase.registerCenterProfile(state: stateObject) + } + + profileRegisterSuccess = profileRegisterResult + .compactMap { $0.value } + .asDriver(onErrorJustReturn: ()) + + let profileRegisterFailure = profileRegisterResult + .compactMap { $0.error } + .map { error in + DefaultAlertContentVO( + title: "센터정보 등록 싶패", + message: error.message + ) + } + + // Alert + self.alert = Observable + .merge( + imageValidationFailure, + profileRegisterFailure + ) + .asDriver(onErrorJustReturn: .default) + } + + func validateSelectedImage(image: UIImage) -> ImageUploadInfo? { + if let pngData = image.pngData() { + return .init(data: pngData, ext: "PNG") + } else if let jpegData = image.jpegData(compressionQuality: 1) { + return .init(data: jpegData, ext: "JPEG") + } + return nil + } +} diff --git a/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/Coordinator/RecruitmentManagementCoordinator.swift b/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/Coordinator/RecruitmentManagementCoordinator.swift index 4d4db893..ee06e9e8 100644 --- a/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/Coordinator/RecruitmentManagementCoordinator.swift +++ b/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/Coordinator/RecruitmentManagementCoordinator.swift @@ -14,13 +14,18 @@ public class RecruitmentManagementCoordinator: ChildCoordinator { public var navigationController: UINavigationController - public init(navigationController: UINavigationController) { + public weak var parent: CenterMainCoordinatable? + + public init( + parent: CenterMainCoordinatable, + navigationController: UINavigationController + ) { + self.parent = parent self.navigationController = navigationController } public func start() { - let vc = RecuitmentManagementVC() - + let vc = RecuitmentManagementVC(coordinator: self) navigationController.pushViewController(vc, animated: false) } @@ -28,3 +33,10 @@ public class RecruitmentManagementCoordinator: ChildCoordinator { } } + +extension RecruitmentManagementCoordinator { + + func showCenterRegisterScreen() { + parent?.centerProfileRegister() + } +} diff --git a/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/View/RecuitmentManagementVC.swift b/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/View/RecuitmentManagementVC.swift index f9dcd214..cd227753 100644 --- a/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/View/RecuitmentManagementVC.swift +++ b/project/Projects/Presentation/Feature/Root/Sources/Screen/Center/View/RecuitmentManagementVC.swift @@ -6,10 +6,16 @@ // import UIKit +import RxCocoa +import RxSwift public class RecuitmentManagementVC: UIViewController { - public init() { + weak var coordinator: RecruitmentManagementCoordinator? + + public init(coordinator: RecruitmentManagementCoordinator) { + self.coordinator = coordinator + super.init(nibName: nil, bundle: nil) setAppearacne() @@ -17,18 +23,38 @@ public class RecuitmentManagementVC: UIViewController { public required init?(coder: NSCoder) { fatalError() } + let dispoesBag = DisposeBag() + private func setAppearacne() { view.backgroundColor = .white let label = UILabel() label.text = "공고 관리" - label.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(label) + let button = UIButton() + button.setTitle("센터정보 등록", for: .normal) + button.setTitleColor(.black, for: .normal) + button.isUserInteractionEnabled = true + + button.rx.tap + .subscribe { [weak coordinator] _ in + coordinator?.showCenterRegisterScreen() + } + .disposed(by: dispoesBag) + [ + label, + button, + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + view.addSubview($0) + } NSLayoutConstraint.activate([ label.centerXAnchor.constraint(equalTo: view.centerXAnchor), label.centerYAnchor.constraint(equalTo: view.centerYAnchor), + + button.centerXAnchor.constraint(equalTo: view.centerXAnchor), + button.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 15), ]) } } diff --git a/project/Projects/Presentation/Feature/Worker/Project.swift b/project/Projects/Presentation/Feature/Worker/Project.swift index 67367400..ca35236a 100644 --- a/project/Projects/Presentation/Feature/Worker/Project.swift +++ b/project/Projects/Presentation/Feature/Worker/Project.swift @@ -28,6 +28,7 @@ let project = Project( resources: ["Resources/**"], dependencies: [ // Presentation + D.Presentation.BaseFeature, D.Presentation.PresentationCore, D.Presentation.DSKit, diff --git a/project/Projects/Presentation/Feature/Worker/Sources/View/profile/EditWorkerProfileViewController.swift b/project/Projects/Presentation/Feature/Worker/Sources/View/profile/EditWorkerProfileViewController.swift index 84a339c0..920557ff 100644 --- a/project/Projects/Presentation/Feature/Worker/Sources/View/profile/EditWorkerProfileViewController.swift +++ b/project/Projects/Presentation/Feature/Worker/Sources/View/profile/EditWorkerProfileViewController.swift @@ -11,6 +11,7 @@ import RxSwift import RxCocoa import DSKit import Entity +import BaseFeature public class EditWorkerProfileViewController: DisposableViewController { diff --git a/project/Projects/Presentation/Feature/Worker/Sources/View/profile/WorkerProfileViewController.swift b/project/Projects/Presentation/Feature/Worker/Sources/View/profile/WorkerProfileViewController.swift index dee63aff..22b9458e 100644 --- a/project/Projects/Presentation/Feature/Worker/Sources/View/profile/WorkerProfileViewController.swift +++ b/project/Projects/Presentation/Feature/Worker/Sources/View/profile/WorkerProfileViewController.swift @@ -11,6 +11,7 @@ import RxSwift import RxCocoa import DSKit import Entity +import BaseFeature public protocol WorkerProfileViewModelable where Input: WorkerProfileInputable, Output: WorkerProfileOutputable { associatedtype Input diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Coordinator.swift b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Coordinator.swift index be593031..2d555af9 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Coordinator.swift +++ b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Coordinator.swift @@ -52,7 +52,7 @@ public extension ParentCoordinator { func clearChildren() { - print(self, childCoordinators, navigationController.viewControllers) + printIfDebug(self, childCoordinators, navigationController.viewControllers) let lastCoordinator = childCoordinators.popLast() diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Main/CenterMainCoordinatable.swift b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Main/CenterMainCoordinatable.swift new file mode 100644 index 00000000..e43c9a15 --- /dev/null +++ b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Main/CenterMainCoordinatable.swift @@ -0,0 +1,12 @@ +// +// CenterMainCoordinatable.swift +// PresentationCore +// +// Created by choijunios on 7/27/24. +// + +import Foundation + +public protocol CenterMainCoordinatable: ParentCoordinator { + func centerProfileRegister() +} diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift new file mode 100644 index 00000000..81a97c80 --- /dev/null +++ b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift @@ -0,0 +1,14 @@ +// +// CenterProfileRegisterCoordinatable.swift +// PresentationCore +// +// Created by choijunios on 7/27/24. +// + +import Foundation + +public protocol CenterProfileRegisterCoordinatable: ParentCoordinator { + + func showOverViewScreen() + func registerFinished() +} diff --git a/project/graph.png b/project/graph.png index acc71a6448548fd0c2aba0d3355819caab2c126d..7b816840472631491d115f6fb30b97989811d79c 100644 GIT binary patch literal 236941 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±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%0DEG`kk$YL2 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�ZF0 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

nhK3t()a#2Et$u0f>rBZA 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 SHn)fm#t}PL+e+);%l`r Date: Sat, 27 Jul 2024 15:04:37 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[IDLE-171]=20=EC=84=BC=ED=84=B0=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EC=97=B4=EA=B8=B0=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExampleApp/Sources/SceneDelegate.swift | 32 +--- .../ExampleApp/Sources/ViewController4.swift | 49 ++++++ .../chevronRight.imageset/Contents.json | 15 ++ .../chevronRight.imageset/chevronRight.svg | 3 + .../ProfileButton/CenterProfileButton.swift | 140 ++++++++++++++++++ 5 files changed, 209 insertions(+), 30 deletions(-) create mode 100644 project/Projects/Presentation/DSKit/ExampleApp/Sources/ViewController4.swift create mode 100644 project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/Contents.json create mode 100644 project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/chevronRight.svg create mode 100644 project/Projects/Presentation/DSKit/Sources/CommonUI/ProfileButton/CenterProfileButton.swift diff --git a/project/Projects/Presentation/DSKit/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/DSKit/ExampleApp/Sources/SceneDelegate.swift index 9bdeb8f8..ae27d3ce 100644 --- a/project/Projects/Presentation/DSKit/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/DSKit/ExampleApp/Sources/SceneDelegate.swift @@ -17,37 +17,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { guard let windowScene = scene as? UIWindowScene else { return } window = UIWindow(windowScene: windowScene) - let vc = IdleTabBar() - vc.setViewControllers(info: [ - TabBarInfo( - viewController: UINavigationController(rootViewController: { - let vc = UIViewController() - vc.view.backgroundColor = .blue - return vc - }()), - tabBarItem: .init(name: "홈") - ), - - TabBarInfo( - viewController: UINavigationController(rootViewController: { - let vc = UIViewController() - vc.view.backgroundColor = .yellow - return vc - }()), - tabBarItem: .init(name: "프로필") - ), - - TabBarInfo( - viewController: UINavigationController(rootViewController: { - let vc = UIViewController() - vc.view.backgroundColor = .red - return vc - }()), - tabBarItem: .init(name: "설정") - ), - ]) + - vc.selectedIndex = 0 + let vc = ViewController4() window?.rootViewController = vc window?.makeKeyAndVisible() diff --git a/project/Projects/Presentation/DSKit/ExampleApp/Sources/ViewController4.swift b/project/Projects/Presentation/DSKit/ExampleApp/Sources/ViewController4.swift new file mode 100644 index 00000000..fb5a2129 --- /dev/null +++ b/project/Projects/Presentation/DSKit/ExampleApp/Sources/ViewController4.swift @@ -0,0 +1,49 @@ +// +// ViewController4.swift +// DSKitExampleApp +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import DSKit + +class ViewController4: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + + view.backgroundColor = .white + + let btn = CenterProfileButton( + nameString: "세얼간이 요양보호소", + locatonString: "용인시 어쩌고 저쩌고", + isArrow: true + ) + +// btn.isArrow.accept(false) + + view.addSubview(btn) + btn.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + btn.centerYAnchor.constraint(equalTo: view.centerYAnchor), + btn.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), + btn.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), + ]) + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/Contents.json b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/Contents.json new file mode 100644 index 00000000..f464bae1 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "chevronRight.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/chevronRight.svg b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/chevronRight.svg new file mode 100644 index 00000000..37352c54 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Resources/Icons.xcassets/chevronRight.imageset/chevronRight.svg @@ -0,0 +1,3 @@ + + + diff --git a/project/Projects/Presentation/DSKit/Sources/CommonUI/ProfileButton/CenterProfileButton.swift b/project/Projects/Presentation/DSKit/Sources/CommonUI/ProfileButton/CenterProfileButton.swift new file mode 100644 index 00000000..9578dbd7 --- /dev/null +++ b/project/Projects/Presentation/DSKit/Sources/CommonUI/ProfileButton/CenterProfileButton.swift @@ -0,0 +1,140 @@ +// +// CenterProfileButton.swift +// DSKit +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import RxSwift +import RxCocoa + +public class CenterProfileButton: TappableUIView { + + // Init + public let nameString: String + public let locatonString: String + public let isArrow: BehaviorRelay + + // View + public private(set) lazy var nameLabel: IdleLabel = { + let label = IdleLabel(typography: .Subtitle3) + label.textString = nameString + label.textAlignment = .left + return label + }() + + public private(set) lazy var addressLabel: IdleLabel = { + let label = IdleLabel(typography: .Body3) + label.textString = locatonString + label.attrTextColor = DSKitAsset.Colors.gray500.color + label.textAlignment = .left + return label + }() + + private let chevronRightImage: UIImageView = { + let image = DSKitAsset.Icons.chevronRight.image.toView() + image.tintColor = DSKitAsset.Colors.gray200.color + return image + }() + + private let disposeBag = DisposeBag() + + public init(nameString: String, locatonString: String, isArrow: Bool = false) { + self.nameString = nameString + self.locatonString = locatonString + self.isArrow = .init(value: isArrow) + + super.init() + + setApearance() + setLayout() + setObservable() + } + required init?(coder: NSCoder) { fatalError() } + + private func setApearance() { + + self.backgroundColor = .white + self.layer.borderColor = DSKitAsset.Colors.gray100.color.cgColor + self.layer.borderWidth = 1 + self.layer.cornerRadius = 8 + + self.layoutMargins = .init(top: 16, left: 20, bottom: 16, right: 20) + } + + private func setLayout() { + + let locImage = DSKitAsset.Icons.locationSmall.image.toView() + let locationStack = HStack( + [ + locImage, + addressLabel, + ], + spacing: 2, + distribution: .fill + ) + locImage.translatesAutoresizingMaskIntoConstraints = false + addressLabel.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + locImage.widthAnchor.constraint(equalToConstant: 20), + locImage.heightAnchor.constraint(equalTo: locImage.widthAnchor), + + addressLabel.heightAnchor.constraint(equalTo: locImage.heightAnchor) + ]) + + let textStack = VStack( + [ + nameLabel, + locationStack + ], + spacing: 4, + alignment: .leading + ) + + let mainStack = HStack( + [ + textStack, + chevronRightImage + ], + spacing: 14, + alignment: .center + ) + NSLayoutConstraint.activate([ + chevronRightImage.widthAnchor.constraint(equalToConstant: 24), + chevronRightImage.heightAnchor.constraint(equalTo: locImage.widthAnchor), + ]) + + [ + mainStack + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + self.addSubview($0) + } + + NSLayoutConstraint.activate([ + mainStack.topAnchor.constraint(equalTo: self.layoutMarginsGuide.topAnchor), + mainStack.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor), + mainStack.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor), + mainStack.bottomAnchor.constraint(equalTo: self.layoutMarginsGuide.bottomAnchor), + ]) + } + + private func setObservable() { + super.rx.tap + .subscribe { [weak self] _ in + + self?.alpha = 0.5 + + UIView.animate(withDuration: 0.2) { + self?.alpha = 1 + } + } + .disposed(by: disposeBag) + + isArrow + .map { !$0 } + .bind(to: chevronRightImage.rx.isHidden) + .disposed(by: disposeBag) + } +} From 789e48c09cfb8ea89db2a13048bb305955c4f48b Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Sat, 27 Jul 2024 16:13:54 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[IDLE-171]=20=EC=84=BC=ED=84=B0=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EC=9E=91=EC=84=B1=EC=99=84=EB=A3=8C?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20UI=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterProfileRegisterCoordinator.swift | 19 ++- .../ProfileRegisterCompleteCoordinator.swift | 49 ++++++ .../RegisterCenterInfoCoordinator.swift | 22 ++- .../ProfileRegisterCompleteVC.swift | 146 ++++++++++++++++++ .../RegisterCenterInfoVC.swift | 25 +-- .../CenterProfileRegisterCoordinatable.swift | 3 +- 6 files changed, 240 insertions(+), 24 deletions(-) create mode 100644 project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift create mode 100644 project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift index 5d5e33c7..5d96a613 100644 --- a/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift @@ -26,12 +26,8 @@ class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable { func start() { - let viewModel = RegisterCenterInfoVM( - profileUseCase: injector.resolve(CenterProfileUseCase.self) - ) - let coordinator = RegisterCenterInfoCoordinator( - viewModel: viewModel, + profileUseCase: injector.resolve(CenterProfileUseCase.self), navigationController: navigationController ) @@ -50,9 +46,16 @@ class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable { extension CenterProfileRegisterCoordinator { - func showOverViewScreen() { - printIfDebug("test test test") + func showCompleteScreen() { + let coordinator = ProfileRegisterCompleteCoordinator( + navigationController: navigationController + ) + addChildCoordinator(coordinator) + coordinator.parent = self + coordinator.start() + } + + func showCenterProfile() { - registerFinished() } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift new file mode 100644 index 00000000..281267f2 --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift @@ -0,0 +1,49 @@ +// +// ProfileRegisterCompleteCoordinator.swift +// CenterFeature +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import PresentationCore +import UseCaseInterface + +public class ProfileRegisterCompleteCoordinator: ChildCoordinator { + + public weak var viewControllerRef: UIViewController? + public weak var parent: CenterProfileRegisterCoordinatable? + + public let navigationController: UINavigationController + + public init( + navigationController: UINavigationController + ) { + self.navigationController = navigationController + } + + deinit { + printIfDebug("\(String(describing: RegisterCenterInfoCoordinator.self))") + } + + public func start() { + let vc = ProfileRegisterCompleteVC(coordinator: self) + viewControllerRef = vc + navigationController.pushViewController(vc, animated: true) + } + + public func coordinatorDidFinish() { + parent?.removeChildCoordinator(self) + } +} + +extension ProfileRegisterCompleteCoordinator { + + func showCenterProfile() { + parent?.showCenterProfile() + } + + func registerFinished() { + parent?.registerFinished() + } +} diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift index 47c0cb60..1d68911b 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift @@ -7,6 +7,7 @@ import UIKit import PresentationCore +import UseCaseInterface public class RegisterCenterInfoCoordinator: ChildCoordinator { @@ -18,17 +19,20 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { public let viewModel: RegisterCenterInfoViewModelable public init( - viewModel: RegisterCenterInfoViewModelable, + profileUseCase: CenterProfileUseCase, navigationController: UINavigationController ) { - self.viewModel = viewModel + self.viewModel = RegisterCenterInfoVM(profileUseCase: profileUseCase) self.navigationController = navigationController } + deinit { + printIfDebug("\(String(describing: RegisterCenterInfoCoordinator.self))") + } + public func start() { - let vc = RegisterCenterInfoVC() + let vc = RegisterCenterInfoVC(coordinator: self) vc.bind(viewModel: viewModel) - vc.coordinator = self.parent viewControllerRef = vc @@ -38,5 +42,15 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { public func coordinatorDidFinish() { parent?.removeChildCoordinator(self) } +} + +extension RegisterCenterInfoCoordinator { + func showCompleteScreen() { + parent?.showCompleteScreen() + } + + func registerFinished() { + parent?.registerFinished() + } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift new file mode 100644 index 00000000..53a7319b --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift @@ -0,0 +1,146 @@ +// +// ProfileRegisterCompleteVC.swift +// CenterFeature +// +// Created by choijunios on 7/27/24. +// + +import UIKit +import BaseFeature +import PresentationCore +import RxCocoa +import RxSwift +import Entity +import DSKit + +public class ProfileRegisterCompleteVC: UIViewController { + + // Init + weak var coordinator: ProfileRegisterCompleteCoordinator? + + // View + let registerSuccessTitle: IdleLabel = { + let label = IdleLabel(typography: .Heading1) + label.textString = "센터 회원으로 가입했어요." + return label + }() + // 추후 이미지 추가 예정 + let registerSuccessImage: UIView = { + let view = UIView() + view.backgroundColor = .cyan + return view + }() + + let centerProfileButton: CenterProfileButton = { + let profileBtn = CenterProfileButton( + nameString: "센터명", + locatonString: "위치" + ) + return profileBtn + }() + + // 하단 버튼 + let ctaButton: CTAButtonType1 = { + let button = CTAButtonType1(labelText: "시작하기") + return button + }() + + private let disposeBag = DisposeBag() + + public init(coordinator: ProfileRegisterCompleteCoordinator?) { + self.coordinator = coordinator + super.init(nibName: nil, bundle: nil) + } + required init?(coder: NSCoder) { fatalError() } + + public override func viewDidLoad() { + setAppearance() + setAutoLayout() + setObservable() + } + + private func setAppearance() { + view.backgroundColor = .white + view.layoutMargins = .init(top: 0, left: 20, bottom: 16, right: 20) + } + + private func setAutoLayout() { + + let titleImageSK = VStack( + [ + registerSuccessTitle, + registerSuccessImage, + ], + spacing: 20, + alignment: .center + ) + NSLayoutConstraint.activate([ + registerSuccessImage.widthAnchor.constraint(equalToConstant: 120), + registerSuccessImage.heightAnchor.constraint(equalTo: registerSuccessImage.widthAnchor), + ]) + + let profileButtonSK = VStack( + [ + { + let label = IdleLabel(typography: .Body3) + label.textString = "아래의 센터가 맞나요?" + label.textAlignment = .center + label.attrTextColor = DSKitAsset.Colors.gray300.color + return label + }(), + centerProfileButton + ], + spacing: 8, + alignment: .fill + ) + + let mainSK = VStack( + [ + titleImageSK, + profileButtonSK + ], + spacing: 44, + alignment: .fill + ) + + let mainBackground = UIView() + mainBackground.addSubview(mainSK) + mainSK.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + mainSK.centerYAnchor.constraint(equalTo: mainBackground.centerYAnchor), + mainSK.leadingAnchor.constraint(equalTo: mainBackground.leadingAnchor), + mainSK.trailingAnchor.constraint(equalTo: mainBackground.trailingAnchor), + ]) + + [ + mainBackground, + ctaButton, + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + view.addSubview($0) + } + + NSLayoutConstraint.activate([ + + mainBackground.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + mainBackground.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + mainBackground.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + mainBackground.bottomAnchor.constraint(equalTo: ctaButton.topAnchor), + + ctaButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + ctaButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + ctaButton.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor) + ]) + } + + private func setObservable() { + + ctaButton + .eventPublisher + .subscribe { [weak coordinator] _ in + + coordinator?.registerFinished() + } + .disposed(by: disposeBag) + } +} diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift index f1549b4e..ad3a045d 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift @@ -58,7 +58,7 @@ public class RegisterCenterInfoVC: BaseViewController { return screenWidth } - public weak var coordinator: CenterProfileRegisterCoordinatable? + public weak var coordinator: RegisterCenterInfoCoordinator? private var pageViews: [CtaButtonIncludedView] = [] private var pagesAreSetted = false @@ -86,7 +86,9 @@ public class RegisterCenterInfoVC: BaseViewController { let disposeBag = DisposeBag() - public init() { + public init(coordinator: RegisterCenterInfoCoordinator?) { + + self.coordinator = coordinator super.init(nibName: nil, bundle: nil) @@ -153,13 +155,14 @@ public class RegisterCenterInfoVC: BaseViewController { self.pageViews = RegisterCenterInfoPage.allCases.map { page in switch page { case .nameAndPhoneNumber: - return NameAndPhoneNumberView() + NameAndPhoneNumberView() case .address: - return AddressView(viewController: self) + AddressView(viewController: self) case .imageAndIntroduction: - let view = ImageAndIntroductionView(viewController: self) - view.coordinator = coordinator - return view + ImageAndIntroductionView( + coordinator: coordinator, + viewController: self + ) } } } @@ -543,7 +546,7 @@ extension RegisterCenterInfoVC { // MARK: 센터 소개 (프로필 사진 + 센터소개) class ImageAndIntroductionView: UIView, CtaButtonIncludedView { - weak var coordinator: CenterProfileRegisterCoordinatable? + weak var coordinator: RegisterCenterInfoCoordinator? // init public weak var viewController: UIViewController! @@ -579,7 +582,6 @@ extension RegisterCenterInfoVC { // 하단 버튼 let ctaButton: CTAButtonType1 = { - let button = CTAButtonType1(labelText: "다음") button.setEnabled(false) return button @@ -588,7 +590,8 @@ extension RegisterCenterInfoVC { // Observable private let disposeBag = DisposeBag() - init(viewController: UIViewController) { + init(coordinator: RegisterCenterInfoCoordinator?, viewController: UIViewController) { + self.coordinator = coordinator self.viewController = viewController super.init(frame: .zero) setAppearance() @@ -714,7 +717,7 @@ extension RegisterCenterInfoVC { vm .profileRegisterSuccess? .drive(onNext: { [weak coordinator] _ in - coordinator?.showOverViewScreen() + coordinator?.showCompleteScreen() }) .disposed(by: disposeBag) } diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift index 81a97c80..84b3b5c5 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift +++ b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift @@ -9,6 +9,7 @@ import Foundation public protocol CenterProfileRegisterCoordinatable: ParentCoordinator { - func showOverViewScreen() func registerFinished() + func showCompleteScreen() + func showCenterProfile() } From a61c47ab5e31730eeefc009ef6a3afe0b7d0fd8b Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Mon, 29 Jul 2024 10:29:44 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[IDLE-000]=20=EC=98=A4=ED=83=88=EC=9E=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Address/DaumAddressSearchViewController.swift | 4 ++-- .../View/RegisterCenterInfo/RegisterCenterInfoVC.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift b/project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift index 75c870f0..64b4ef3a 100644 --- a/project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift +++ b/project/Projects/Presentation/Feature/Base/Sources/Address/DaumAddressSearchViewController.swift @@ -27,7 +27,7 @@ public typealias Conformance = UIViewController & WKUIDelegate & WKNavigationDel public class DaumAddressSearchViewController: Conformance { - public var deleage: DaumAddressSearchDelegate? + public var delegate: DaumAddressSearchDelegate? // View private let navigationBar: NavigationBarType1 = { @@ -119,7 +119,7 @@ public extension DaumAddressSearchViewController { addressData[key] = address } } - deleage?.addressSearch(addressData: addressData) + delegate?.addressSearch(addressData: addressData) navigationController?.popViewController(animated: true) } diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift index ad3a045d..77dcca76 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift @@ -500,7 +500,7 @@ extension RegisterCenterInfoVC { private func showDaumSearchView() { let vc = DaumAddressSearchViewController() - vc.deleage = self + vc.delegate = self vc.modalPresentationStyle = .fullScreen viewController?.navigationController?.pushViewController(vc, animated: true) } From 33510118188cc9a2dfd501d551d742762a56e038 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Mon, 29 Jul 2024 12:51:39 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[IDLE-171]=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95=EB=B0=8F=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=88=98=EC=A0=95=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommonUI/ImageView/ImageSelectView.swift | 7 +- .../ExampleApp/Sources/SceneDelegate.swift | 17 ++-- .../Profile/CenterProfileViewController.swift | 96 +++---------------- .../RegisterCenterInfoVC.swift | 11 +-- .../Profile/CenterProfileViewModel.swift | 5 +- .../RegisterCenterInfoVM.swift | 41 ++++---- 6 files changed, 58 insertions(+), 119 deletions(-) diff --git a/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift b/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift index cd32fb6d..d873f29a 100644 --- a/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift +++ b/project/Projects/Presentation/DSKit/Sources/CommonUI/ImageView/ImageSelectView.swift @@ -26,7 +26,8 @@ public class ImageSelectView: UIImageView { public var onError: (()->())? // image - public private(set) var editingImage: BehaviorRelay = .init(value: nil) + public private(set) var displayingImage: BehaviorRelay = .init(value: nil) + public private(set) var selectedImage: BehaviorRelay = .init(value: nil) public init(state: State, viewController: UIViewController) { self.state = .init(value: state) @@ -129,7 +130,7 @@ public class ImageSelectView: UIImageView { Observable .combineLatest( - editingImage, + displayingImage, state ) .subscribe(onNext: { [weak self] (image, state) in @@ -183,7 +184,7 @@ extension ImageSelectView: UIImagePickerControllerDelegate, UINavigationControll if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { // image - editingImage.accept(image) + selectedImage.accept(image) picker.dismiss(animated: true) } diff --git a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift index 4cb49ad0..00060fd6 100644 --- a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift @@ -23,7 +23,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { let store = TestStore() try! store.saveAuthToken( - accessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOm51bGwsInN1YiI6bnVsbCwiaXNzIjoiM2lkaW90cyIsImlhdCI6MTcyMjA1MzYzNiwibmJmIjoxNzIyMDUzNjM2LCJleHAiOjE3MjIwNTQyMzYsInR5cGUiOiJBQ0NFU1NfVE9LRU4iLCJ1c2VySWQiOiIwMTkwZjI2NS0yYmVkLTc1MTEtYjljNy1hZjEwOTNhZTUzZmIiLCJwaG9uZU51bWJlciI6IjAxMC00NDQ0LTUyMzIiLCJ1c2VyVHlwZSI6ImNlbnRlciJ9.nNSNvLmOArvSKThCUHG7liWW-mvN8cudc40mYiTWE-c", + accessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOm51bGwsInN1YiI6bnVsbCwiaXNzIjoiM2lkaW90cyIsImlhdCI6MTcyMjIyNDUzNywibmJmIjoxNzIyMjI0NTM3LCJleHAiOjE3MjIyMjUxMzcsInR5cGUiOiJBQ0NFU1NfVE9LRU4iLCJ1c2VySWQiOiIwMTkwZjI2NS0yYmVkLTc1MTEtYjljNy1hZjEwOTNhZTUzZmIiLCJwaG9uZU51bWJlciI6IjAxMC00NDQ0LTUyMzIiLCJ1c2VyVHlwZSI6ImNlbnRlciJ9.VIJ9OG6VubPNYOhSfTRt1rG_mbq6ttVNHfT1-cnjZsc", refreshToken: "" ) @@ -31,22 +31,23 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { repository: DefaultUserProfileRepository(store) ) - let viewModel = RegisterCenterInfoVM( - profileUseCase: useCase - ) - let navigationController = UINavigationController() navigationController.setNavigationBarHidden(true, animated: false) let coordinator = RegisterCenterInfoCoordinator( - viewModel: viewModel, + profileUseCase: useCase, navigationController: navigationController ) + let vc = CenterProfileViewController() + vc.bind(viewModel: CenterProfileViewModel( + useCase: useCase + )) + window = UIWindow(windowScene: windowScene) - window?.rootViewController = navigationController + window?.rootViewController = vc window?.makeKeyAndVisible() - coordinator.start() + } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift index 0ce377ad..09505b31 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift @@ -133,33 +133,17 @@ public class CenterProfileViewController: BaseViewController { return textView }() - /// ☑️ "센토 사진" 라벨 ☑️ + /// ☑️ "센터 사진" 라벨 ☑️ let centerPictureLabel: IdleLabel = { let label = IdleLabel(typography: .Subtitle4) label.textString = "센터 사진" label.textColor = DSKitAsset.Colors.gray500.color return label }() - let centerImageView: UIImageView = { - let view = UIImageView() - view.layer.cornerRadius = 6 - view.clipsToBounds = true - view.backgroundColor = DSKitAsset.Colors.gray100.color - view.contentMode = .scaleAspectFill - - /// 이미지 뷰는 버튼을 자식으로 가지는데 기본적으로 isUserInteractionEnabled값이 fale라 자식 버튼에도 영향을 미친다. - /// 따라서 이터렉션이 필요한 자식이 있는 경우 명시적으로 아래 프로퍼티값을 true로 설정해야한다. - view.isUserInteractionEnabled = true + private lazy var centerImageView: ImageSelectView = { + let view = ImageSelectView(state: .editing, viewController: self) return view }() - let centerImageEditButton: UIButton = { - let btn = UIButton() - btn.setImage(DSKitAsset.Icons.editPhoto.image, for: .normal) - btn.isUserInteractionEnabled = true - return btn - }() - - let edtingImage: PublishRelay = .init() let disposeBag = DisposeBag() @@ -169,7 +153,6 @@ public class CenterProfileViewController: BaseViewController { setApearance() setAutoLayout() - setObservable() } required init?(coder: NSCoder) { fatalError() } @@ -231,10 +214,6 @@ public class CenterProfileViewController: BaseViewController { alignment: .fill ) - // 센터 이미지뷰 세팅 - centerImageView.addSubview(centerImageEditButton) - centerImageEditButton.translatesAutoresizingMaskIntoConstraints = false - let scrollView = UIScrollView() let divider = UIView() @@ -288,9 +267,6 @@ public class CenterProfileViewController: BaseViewController { locationIcon.widthAnchor.constraint(equalToConstant: 24), locationIcon.heightAnchor.constraint(equalTo: locationIcon.widthAnchor), - centerImageEditButton.widthAnchor.constraint(equalToConstant: 28), - centerImageEditButton.heightAnchor.constraint(equalTo: centerImageEditButton.widthAnchor), - centerIntroductionField.heightAnchor.constraint(equalToConstant: 156), ]) @@ -335,22 +311,9 @@ public class CenterProfileViewController: BaseViewController { centerImageView.trailingAnchor.constraint(equalTo: scrollView.layoutMarginsGuide.trailingAnchor), centerImageView.heightAnchor.constraint(equalToConstant: 250), centerImageView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor, constant: -38), - - centerImageEditButton.trailingAnchor.constraint(equalTo: centerImageView.trailingAnchor, constant: -16), - centerImageEditButton.bottomAnchor.constraint(equalTo: centerImageView.bottomAnchor, constant: -16), ]) } - func setObservable() { - - centerImageEditButton - .rx.tap - .subscribe { [weak self] _ in - self?.showPhotoGalley() - } - .disposed(by: disposeBag) - } - public func bind(viewModel: any CenterProfileViewModelable) { self.viewModel = viewModel @@ -384,7 +347,9 @@ public class CenterProfileViewController: BaseViewController { .bind(to: input.editingInstruction) .disposed(by: disposeBag) - edtingImage + centerImageView + .selectedImage + .compactMap { $0 } .bind(to: input.selectedImage) .disposed(by: disposeBag) @@ -421,10 +386,18 @@ public class CenterProfileViewController: BaseViewController { output .displayingImage - .drive(centerImageView.rx.image) + .drive(centerImageView.displayingImage) .disposed(by: disposeBag) // MARK: Edit Mode + output + .isEditingMode + .map { isEditing -> ImageSelectView.State in + isEditing ? .editing : .normal + } + .drive(centerImageView.state) + .disposed(by: disposeBag) + output .isEditingMode .drive { [weak self] in @@ -436,11 +409,8 @@ public class CenterProfileViewController: BaseViewController { centerIntroductionField.isHidden = !$0 centerIntroductionLabel.isHidden = $0 - centerImageEditButton.isHidden = !$0 - editingCompleteButton.isHidden = !$0 profileEditButton.isHidden = $0 - } .disposed(by: disposeBag) @@ -462,39 +432,3 @@ public class CenterProfileViewController: BaseViewController { bindFinished.accept(()) } } - -extension CenterProfileViewController { - - func showPhotoGalley() { - - let imagePickerVC = UIImagePickerController() - imagePickerVC.delegate = self - - if !UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { - - showAlert(vo: .init( - title: "오류", - message: "사진함을 열 수 없습니다.") - ) - - return - } - - imagePickerVC.sourceType = .photoLibrary - -// let modiaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) - present(imagePickerVC, animated: true) - } -} - -extension CenterProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { - - public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { - - if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { - - edtingImage.accept(image) - picker.dismiss(animated: true) - } - } -} diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift index 77dcca76..6878e723 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift @@ -35,7 +35,7 @@ public protocol RegisterCenterInfoViewModelable { // Output var nameAndNumberValidation: Driver? { get } var addressValidation: Driver? { get } - var imageAndIntroductionValidation: Driver? { get } + var imageValidation: Driver? { get } var profileRegisterSuccess: Driver? { get } var alert: Driver? { get } } @@ -583,7 +583,6 @@ extension RegisterCenterInfoVC { // 하단 버튼 let ctaButton: CTAButtonType1 = { let button = CTAButtonType1(labelText: "다음") - button.setEnabled(false) return button }() @@ -695,7 +694,7 @@ extension RegisterCenterInfoVC { .disposed(by: disposeBag) centerImageView - .editingImage + .selectedImage .compactMap { $0 } .bind(to: vm.editingCenterImage) .disposed(by: disposeBag) @@ -708,10 +707,8 @@ extension RegisterCenterInfoVC { // Output vm - .imageAndIntroductionValidation? - .drive(onNext: { [ctaButton] isValid in - ctaButton.setEnabled(isValid) - }) + .imageValidation? + .drive(centerImageView.displayingImage) .disposed(by: disposeBag) vm diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift index 7026d87e..9ac37c55 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift @@ -137,7 +137,7 @@ public class CenterProfileViewModel: CenterProfileViewModelable { .map({ [unowned self] _ in checkModification() }) - .flatMap { [useCase] (inputs) in + .flatMap { [useCase, input] (inputs) in let (phoneNumber, introduction, imageInfo) = inputs @@ -146,8 +146,9 @@ public class CenterProfileViewModel: CenterProfileViewModelable { if let _ = introduction { printIfDebug("✅ 센터소개 변경되었음") } if let _ = imageInfo { printIfDebug("✅ 센터 이미지 변경되었음") } + // 전화번호는 무조건 포함시켜야 함으로 아래와 같이 포함합니다. return useCase.updateProfile( - phoneNumber: phoneNumber, + phoneNumber: phoneNumber ?? input.editingPhoneNumber.value, introduction: introduction, imageInfo: imageInfo ) diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift index c86276e7..3e1d0870 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift @@ -26,7 +26,8 @@ public class RegisterCenterInfoVM: RegisterCenterInfoViewModelable { // Output public var nameAndNumberValidation: Driver? = nil public var addressValidation: Driver? = nil - public var imageAndIntroductionValidation: Driver? = nil + public var introductionValidation: Driver? = nil + public var imageValidation: Driver? = nil public var profileRegisterSuccess: Driver? = nil public var alert: Driver? = nil @@ -73,17 +74,29 @@ public class RegisterCenterInfoVM: RegisterCenterInfoViewModelable { } .asDriver(onErrorJustReturn: false) + // 소개글은 필수값임 아님으로 별도로 조건 수행X + self.introductionValidation = editingCenterIntroduction + .map { [stateObject] intro in + stateObject.introduce = intro + return true + } + .asDriver(onErrorJustReturn: false) + let imageValidation = editingCenterImage .map { [unowned self] image in - validateSelectedImage(image: image) + let info = validateSelectedImage(image: image) + return (image: image, info: info) } .share() let imageValidationSuccess = imageValidation - .compactMap { $0 } + .compactMap { (image, info) -> (UIImage, ImageUploadInfo)? in + if let info { return (image, info) } + return nil + } let imageValidationFailure = imageValidation - .filter { $0 == nil } + .filter { $0.info == nil } .map { _ in DefaultAlertContentVO( title: "이미지 업로드 실패", @@ -91,21 +104,13 @@ public class RegisterCenterInfoVM: RegisterCenterInfoViewModelable { ) } - self.imageAndIntroductionValidation = Observable - .combineLatest( - editingCenterIntroduction, - imageValidationSuccess - ) - .map { [stateObject] (intro, imageInfo) in - - printIfDebug("\(#function) 입력중인 센터소개: \(intro)") - - stateObject.introduce = intro - stateObject.imageInfo = imageInfo - - return !intro.isEmpty + self.imageValidation = imageValidationSuccess + .map { [stateObject] (image, info) in + printIfDebug("\(#function) 입력중인 센터소개") + stateObject.imageInfo = info + return image } - .asDriver(onErrorJustReturn: false) + .asDriver(onErrorJustReturn: .init()) let profileRegisterResult = self.completeButtonPressed .flatMap { [useCase, stateObject] _ in From 0557226e7c34c0a60da9d7b22bf80cde2d870a21 Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Mon, 29 Jul 2024 13:38:11 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[IDLE-171]=20=EC=84=BC=ED=84=B0=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84DTO=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit introduce는 nullable이다. --- .../DTO/UserInfo/CenterProfileDTO.swift | 4 +- .../ExampleApp/Sources/SceneDelegate.swift | 12 +- .../Profile/CenterProfileViewController.swift | 126 ++++++++++-------- .../Profile/CenterProfileViewModel.swift | 4 + 4 files changed, 84 insertions(+), 62 deletions(-) diff --git a/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift b/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift index 6d143c77..e1abc48b 100644 --- a/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift +++ b/project/Projects/Data/NetworkDataSource/DTO/UserInfo/CenterProfileDTO.swift @@ -14,7 +14,7 @@ public struct CenterProfileDTO: Codable { let roadNameAddress: String let lotNumberAddress: String let detailedAddress: String - let introduce: String + let introduce: String? let longitude: String? let latitude: String? let profileImageUrl: String? @@ -31,7 +31,7 @@ public extension CenterProfileDTO { detailedAddress: detailedAddress, longitude: longitude ?? "", latitude: latitude ?? "", - introduce: introduce, + introduce: introduce ?? "", profileImageURL: URL(string: profileImageUrl ?? "") ) } diff --git a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift index 00060fd6..ab80b6b6 100644 --- a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift @@ -23,8 +23,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { let store = TestStore() try! store.saveAuthToken( - accessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOm51bGwsInN1YiI6bnVsbCwiaXNzIjoiM2lkaW90cyIsImlhdCI6MTcyMjIyNDUzNywibmJmIjoxNzIyMjI0NTM3LCJleHAiOjE3MjIyMjUxMzcsInR5cGUiOiJBQ0NFU1NfVE9LRU4iLCJ1c2VySWQiOiIwMTkwZjI2NS0yYmVkLTc1MTEtYjljNy1hZjEwOTNhZTUzZmIiLCJwaG9uZU51bWJlciI6IjAxMC00NDQ0LTUyMzIiLCJ1c2VyVHlwZSI6ImNlbnRlciJ9.VIJ9OG6VubPNYOhSfTRt1rG_mbq6ttVNHfT1-cnjZsc", - refreshToken: "" + accessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOm51bGwsInN1YiI6bnVsbCwiaXNzIjoiM2lkaW90cyIsImlhdCI6MTcyMjIyNzcxMywibmJmIjoxNzIyMjI3NzEzLCJleHAiOjE3MjIyMjgzMTMsInR5cGUiOiJBQ0NFU1NfVE9LRU4iLCJ1c2VySWQiOiIwMTkwZmNjNS01OGI1LTdlOWYtYTE3NS1hZDUwMjZjMzI4M2EiLCJwaG9uZU51bWJlciI6IjAxMC00NDQ0LTUyMzIiLCJ1c2VyVHlwZSI6ImNlbnRlciJ9.gJXEtDruIRqYM9R6aszejnIDOm8VP6ROnrNqESIdssE", + refreshToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOm51bGwsInN1YiI6bnVsbCwiaXNzIjoiM2lkaW90cyIsImlhdCI6MTcyMjIyNzcxMywibmJmIjoxNzIyMjI3NzEzLCJleHAiOjE3MjM0MzczMTMsInR5cGUiOiJSRUZSRVNIX1RPS0VOIiwidXNlcklkIjoiMDE5MGZjYzUtNThiNS03ZTlmLWExNzUtYWQ1MDI2YzMyODNhIiwidXNlclR5cGUiOiJjZW50ZXIifQ.EtV-qojoAl-H7VVm-Dr2tYf6Hkbx3OdwbsxduAOFf6I" ) let useCase = DefaultCenterProfileUseCase( @@ -39,10 +39,12 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { navigationController: navigationController ) - let vc = CenterProfileViewController() - vc.bind(viewModel: CenterProfileViewModel( + let vm = CenterProfileViewModel( useCase: useCase - )) + ) + + let vc = CenterProfileViewController() + vc.bind(viewModel: vm) window = UIWindow(windowScene: windowScene) window?.rootViewController = vc diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift index 09505b31..ba396aaa 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift @@ -18,6 +18,8 @@ public protocol CenterProfileViewModelable where Input: CenterProfileInputable, associatedtype Output var input: Input { get } var output: Output? { get } + + var isMyCenterProfile: Bool { get } } public protocol CenterProfileInputable { @@ -327,31 +329,35 @@ public class CenterProfileViewController: BaseViewController { .bind(to: input.readyToFetch) .disposed(by: disposeBag) - profileEditButton - .eventPublisher - .bind(to: input.editingButtonPressed) - .disposed(by: disposeBag) - - editingCompleteButton - .eventPublisher - .bind(to: input.editingFinishButtonPressed) - .disposed(by: disposeBag) - - centerPhoneNumeberField.rx.text - .compactMap { $0 } - .bind(to: input.editingPhoneNumber) - .disposed(by: disposeBag) - - centerIntroductionField.rx.text - .compactMap { $0 } - .bind(to: input.editingInstruction) - .disposed(by: disposeBag) - - centerImageView - .selectedImage - .compactMap { $0 } - .bind(to: input.selectedImage) - .disposed(by: disposeBag) + // 내 센터보기 상태인 경우(수정가능한 프로필 상태) + if viewModel.isMyCenterProfile { + + profileEditButton + .eventPublisher + .bind(to: input.editingButtonPressed) + .disposed(by: disposeBag) + + editingCompleteButton + .eventPublisher + .bind(to: input.editingFinishButtonPressed) + .disposed(by: disposeBag) + + centerPhoneNumeberField.rx.text + .compactMap { $0 } + .bind(to: input.editingPhoneNumber) + .disposed(by: disposeBag) + + centerIntroductionField.rx.text + .compactMap { $0 } + .bind(to: input.editingInstruction) + .disposed(by: disposeBag) + + centerImageView + .selectedImage + .compactMap { $0 } + .bind(to: input.selectedImage) + .disposed(by: disposeBag) + } // output guard let output = viewModel.output else { fatalError() } @@ -390,29 +396,46 @@ public class CenterProfileViewController: BaseViewController { .disposed(by: disposeBag) // MARK: Edit Mode - output - .isEditingMode - .map { isEditing -> ImageSelectView.State in - isEditing ? .editing : .normal - } - .drive(centerImageView.state) - .disposed(by: disposeBag) - - output - .isEditingMode - .drive { [weak self] in - guard let self else { return } - - centerPhoneNumeberField.isHidden = !$0 - centerPhoneNumeberLabel.isHidden = $0 - - centerIntroductionField.isHidden = !$0 - centerIntroductionLabel.isHidden = $0 - - editingCompleteButton.isHidden = !$0 - profileEditButton.isHidden = $0 - } - .disposed(by: disposeBag) + if viewModel.isMyCenterProfile { + + output + .isEditingMode + .map { isEditing -> ImageSelectView.State in + isEditing ? .editing : .normal + } + .drive(centerImageView.state) + .disposed(by: disposeBag) + + output + .isEditingMode + .drive { [weak self] in + guard let self else { return } + + centerPhoneNumeberField.isHidden = !$0 + centerPhoneNumeberLabel.isHidden = $0 + + centerIntroductionField.isHidden = !$0 + centerIntroductionLabel.isHidden = $0 + + editingCompleteButton.isHidden = !$0 + profileEditButton.isHidden = $0 + } + .disposed(by: disposeBag) + + output + .editingValidation + .drive { _ in + // do something when editing success + } + .disposed(by: disposeBag) + } else { + // 수정 UI을 모두 끈다. + centerPhoneNumeberField.isHidden = true + centerIntroductionField.isHidden = true + editingCompleteButton.isHidden = true + profileEditButton.isHidden = true + centerImageView.state.accept(.normal) + } output .alert @@ -421,13 +444,6 @@ public class CenterProfileViewController: BaseViewController { } .disposed(by: disposeBag) - output - .editingValidation - .drive { _ in - // do something when editing success - } - .disposed(by: disposeBag) - // 바인딩 종료 bindFinished.accept(()) } diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift index 9ac37c55..72a43e69 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift @@ -25,6 +25,8 @@ public class CenterProfileViewModel: CenterProfileViewModelable { public var input: Input public var output: Output? = nil + public let isMyCenterProfile: Bool = true + private var fetchedPhoneNumber: String? private var fetchedIntroduction: String? private var fetchedImage: UIImage? @@ -74,12 +76,14 @@ public class CenterProfileViewModel: CenterProfileViewModelable { .map { $0.roadNameAddress } .asDriver(onErrorJustReturn: "") + // 센터 소개는 필수값이 아님, 공백일 경우 필터링 let centerIntroductionDriver = profileRequestSuccess .map { [weak self] in let introduce = $0.introduce self?.fetchedIntroduction = introduce return introduce } + .filter { !$0.isEmpty } .asDriver(onErrorJustReturn: "") let centerPhoneNumberDriver = profileRequestSuccess From 0a1de71fa1d02ea1cb71bb19f51f2ab904bd9e2a Mon Sep 17 00:00:00 2001 From: J0onYEong Date: Mon, 29 Jul 2024 14:39:35 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[IDLE-171]=20=EC=84=BC=ED=84=B0=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=93=B1=EB=A1=9D=ED=9B=84=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=ED=99=95=EC=9D=B8=20=EC=97=B0=EB=8F=99=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterProfileRegisterCoordinator.swift | 15 ++++-- .../DefaultUserProfileRepository.swift | 19 +++++++- .../API/UserInformationAPI.swift | 9 +++- .../DefaultCenterProfileUseCase.swift | 9 ++-- .../Entity/State/Profile/ProfileMode.swift | 13 +++++ .../VO/UserInfo/CenterProfileCardVO.swift | 20 ++++++++ .../UserInfo/UserProfileRepository.swift | 2 +- .../UserInfo/CenterProfileUseCase.swift | 5 +- .../Component/Base/TappableUIView.swift | 2 +- .../Register/EnterAddressViewController.swift | 2 +- .../ExampleApp/Sources/SceneDelegate.swift | 11 +---- .../CenterProfileCoordinator.swift | 47 +++++++++++++++++++ .../ProfileRegisterCompleteCoordinator.swift | 7 ++- .../RegisterCenterInfoCoordinator.swift | 5 +- .../Profile/CenterProfileViewController.swift | 25 ++++++++-- .../ProfileRegisterCompleteVC.swift | 37 ++++++++++++++- .../RegisterCenterInfoVC.swift | 6 +-- .../Profile/CenterProfileViewModel.swift | 9 ++-- .../RegisterCenterInfoVM.swift | 11 ++++- .../CenterProfileRegisterCoordinatable.swift | 5 +- 20 files changed, 213 insertions(+), 46 deletions(-) create mode 100644 project/Projects/Domain/Entity/State/Profile/ProfileMode.swift create mode 100644 project/Projects/Domain/Entity/VO/UserInfo/CenterProfileCardVO.swift create mode 100644 project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileCoordinator.swift diff --git a/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift index 5d96a613..3729246a 100644 --- a/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift +++ b/project/Projects/App/Sources/RootCoordinator/Main/Center /CenterProfileRegisterCoordinator.swift @@ -7,6 +7,7 @@ import UIKit import CenterFeature +import Entity import PresentationCore import UseCaseInterface @@ -46,8 +47,9 @@ class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable { extension CenterProfileRegisterCoordinator { - func showCompleteScreen() { + func showCompleteScreen(cardVO: Entity.CenterProfileCardVO) { let coordinator = ProfileRegisterCompleteCoordinator( + cardVO: cardVO, navigationController: navigationController ) addChildCoordinator(coordinator) @@ -55,7 +57,14 @@ extension CenterProfileRegisterCoordinator { coordinator.start() } - func showCenterProfile() { - + func showMyCenterProfile() { + let coordinator = CenterProfileCoordinator( + mode: .myProfile, + profileUseCase: injector.resolve(CenterProfileUseCase.self), + navigationController: navigationController + ) + addChildCoordinator(coordinator) + coordinator.parent = self + coordinator.start() } } diff --git a/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift b/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift index 70551f3a..c26d3c2d 100644 --- a/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift +++ b/project/Projects/Data/ConcreteRepository/UserInfo/DefaultUserProfileRepository.swift @@ -45,10 +45,25 @@ public class DefaultUserProfileRepository: UserProfileRepository { .map { _ in () } } - public func getCenterProfile() -> Single { + public func getCenterProfile(mode: ProfileMode) -> Single { + var api: UserInformationAPI! + + switch mode { + case .myProfile: + api = .getCenterProfile + case .otherProfile(let id): + api = .getOtherCenterProfile(id: id) + } + + return userInformationService + .requestDecodable(api: api, with: .withToken) + .map { (dto: CenterProfileDTO) in dto.toEntity() } + } + + public func getCenterProfile(id: String) -> Single { userInformationService - .requestDecodable(api: .getCenterProfile, with: .withToken) + .requestDecodable(api: .getOtherCenterProfile(id: id), with: .withToken) .map { (dto: CenterProfileDTO) in dto.toEntity() } } diff --git a/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift b/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift index bce3736d..225b77cd 100644 --- a/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift +++ b/project/Projects/Data/NetworkDataSource/API/UserInformationAPI.swift @@ -28,6 +28,7 @@ public enum UserInformationAPI { // 프로필 조회 case getCenterProfile + case getOtherCenterProfile(id: String) case updateCenterProfile(officeNumber: String, introduce: String?) // 프로필 사진 업로드 @@ -50,6 +51,8 @@ extension UserInformationAPI: BaseAPI { "center/my/profile" case .getCenterProfile: "center/my/profile" + case .getOtherCenterProfile(let id): + "center/profile/\(id)" case .updateCenterProfile: "center/my/profile" case .getPreSignedUrl(let type, _): @@ -65,6 +68,8 @@ extension UserInformationAPI: BaseAPI { .post case .getCenterProfile: .get + case .getOtherCenterProfile: + .get case .updateCenterProfile: .patch case .getPreSignedUrl: @@ -85,8 +90,6 @@ extension UserInformationAPI: BaseAPI { switch self { case .registerCenterProfile(let data): return .requestData(data) - case .getCenterProfile: - return .requestPlain case .updateCenterProfile(let officeNumber, let introduce): var bodyData: [String: String] = ["officeNumber": officeNumber] if let introduce { @@ -104,6 +107,8 @@ extension UserInformationAPI: BaseAPI { "imageFileExtension": imageExt ] return .requestParameters(parameters: params, encoding: parameterEncoding) + default: + return .requestPlain } } } diff --git a/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift b/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift index 5c5f20ad..5f243ccf 100644 --- a/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift +++ b/project/Projects/Domain/ConcreteUseCase/UserInfo/DefaultCenterProfileUseCase.swift @@ -19,11 +19,10 @@ public class DefaultCenterProfileUseCase: CenterProfileUseCase { self.repository = repository } - public func getProfile() -> Single> { - convert(task: repository - .getCenterProfile()) { [unowned self] error in - toDomainError(error: error) - } + public func getProfile(mode: ProfileMode) -> Single> { + convert(task: repository.getCenterProfile(mode: mode)) { [unowned self] error in + toDomainError(error: error) + } } public func updateProfile(phoneNumber: String?, introduction: String?, imageInfo: ImageUploadInfo?) -> Single> { diff --git a/project/Projects/Domain/Entity/State/Profile/ProfileMode.swift b/project/Projects/Domain/Entity/State/Profile/ProfileMode.swift new file mode 100644 index 00000000..89dbf706 --- /dev/null +++ b/project/Projects/Domain/Entity/State/Profile/ProfileMode.swift @@ -0,0 +1,13 @@ +// +// ProfileMode.swift +// Entity +// +// Created by choijunios on 7/29/24. +// + +import Foundation + +public enum ProfileMode { + case myProfile + case otherProfile(id: String) +} diff --git a/project/Projects/Domain/Entity/VO/UserInfo/CenterProfileCardVO.swift b/project/Projects/Domain/Entity/VO/UserInfo/CenterProfileCardVO.swift new file mode 100644 index 00000000..db189953 --- /dev/null +++ b/project/Projects/Domain/Entity/VO/UserInfo/CenterProfileCardVO.swift @@ -0,0 +1,20 @@ +// +// CenterProfileCardVO.swift +// Entity +// +// Created by choijunios on 7/29/24. +// + +import Foundation + +public struct CenterProfileCardVO { + public let name: String + public let location: String + + public init(name: String, location: String) { + self.name = name + self.location = location + } + + public static let `default` = CenterProfileCardVO(name: "내 센터", location: "내 센터 위치") +} diff --git a/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift b/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift index 081da6c3..20a5c8b5 100644 --- a/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift +++ b/project/Projects/Domain/RepositoryInterface/UserInfo/UserProfileRepository.swift @@ -13,7 +13,7 @@ public protocol UserProfileRepository: RepositoryBase { func registerCenterProfileForText(state: CenterProfileRegisterState) -> Single - func getCenterProfile() -> Single + func getCenterProfile(mode: ProfileMode) -> Single func updateCenterProfileForText(phoneNumber: String, introduction: String?) -> Single // ImageUpload diff --git a/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift b/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift index ec4d0ea6..8052247d 100644 --- a/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift +++ b/project/Projects/Domain/UseCaseInterface/UserInfo/CenterProfileUseCase.swift @@ -14,11 +14,12 @@ import Entity /// 3. 센터 프로필 정보 업데이트(이미지, pre-signed-url) /// 4. 센터 프로필 정보 업데이트(이미지, pre-signed-url-callback) /// 5. 센터 프로필 최초 등록 +/// 6. 특정 센터의 프로필 불러오기 public protocol CenterProfileUseCase: UseCaseBase { - /// 1. 나의 센터 프로필 정보 조회 - func getProfile() -> Single> + /// 1. 나의 센터/다른 센터 프로필 정보 조회 + func getProfile(mode: ProfileMode) -> Single> /// 2. 센터 프로필 정보 업데이트(전화번호, 센터소개글) /// 3. 센터 프로필 정보 업데이트(이미지, pre-signed-url) diff --git a/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift b/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift index 65ae123c..3f4668e5 100644 --- a/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift +++ b/project/Projects/Presentation/DSKit/Sources/Component/Base/TappableUIView.swift @@ -22,7 +22,7 @@ public class TappableUIView: UIView { func onTouchAction(_ tapGesture: UITapGestureRecognizer) { } } -public extension Reactive where Base == TappableUIView { +public extension Reactive where Base: TappableUIView { var tap: ControlEvent { let source = self.methodInvoked(#selector(Base.onTouchAction)).map { _ in } return ControlEvent(events: source) diff --git a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift index 0f199c9f..3c7dcde5 100644 --- a/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift +++ b/project/Projects/Presentation/Feature/Auth/Sources/View/Worker/Register/EnterAddressViewController.swift @@ -210,7 +210,7 @@ where T.Input: EnterAddressInputable & CTAButtonEnableInputable, T.Output: Regis private func showDaumSearchView() { let vc = DaumAddressSearchViewController() - vc.deleage = self + vc.delegate = self vc.modalPresentationStyle = .fullScreen navigationController?.pushViewController(vc, animated: true) } diff --git a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift index ab80b6b6..c820cef3 100644 --- a/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift +++ b/project/Projects/Presentation/Feature/Center/ExampleApp/Sources/SceneDelegate.swift @@ -39,17 +39,10 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { navigationController: navigationController ) - let vm = CenterProfileViewModel( - useCase: useCase - ) - - let vc = CenterProfileViewController() - vc.bind(viewModel: vm) - window = UIWindow(windowScene: windowScene) - window?.rootViewController = vc + window?.rootViewController = navigationController window?.makeKeyAndVisible() - + coordinator.start() } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileCoordinator.swift new file mode 100644 index 00000000..0d3c814a --- /dev/null +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/CenterProfileCoordinator.swift @@ -0,0 +1,47 @@ +// +// CenterProfileCoordinator.swift +// CenterFeature +// +// Created by choijunios on 7/29/24. +// + +import UIKit +import PresentationCore +import UseCaseInterface +import Entity + +/// 내센터, 다른 센터를 모두 불러올 수 있습니다. +public class CenterProfileCoordinator: ChildCoordinator { + + public weak var viewControllerRef: UIViewController? + public weak var parent: CenterProfileRegisterCoordinatable? + + public let navigationController: UINavigationController + + public let viewModel: any CenterProfileViewModelable + + public init( + mode: ProfileMode, + profileUseCase: CenterProfileUseCase, + navigationController: UINavigationController + ) { + self.viewModel = CenterProfileViewModel(mode: mode, useCase: profileUseCase) + self.navigationController = navigationController + } + + public func start() { + let vc = CenterProfileViewController(coordinator: self) + vc.bind(viewModel: viewModel) + self.viewControllerRef = vc + navigationController.pushViewController(vc, animated: true) + } + + public func coordinatorDidFinish() { + parent?.removeChildCoordinator(self) + } + + func closeViewController() { + popViewController() + coordinatorDidFinish() + } +} diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift index 281267f2..6fa76389 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/ProfileRegisterCompleteCoordinator.swift @@ -6,6 +6,7 @@ // import UIKit +import Entity import PresentationCore import UseCaseInterface @@ -15,10 +16,13 @@ public class ProfileRegisterCompleteCoordinator: ChildCoordinator { public weak var parent: CenterProfileRegisterCoordinatable? public let navigationController: UINavigationController + private let viewModel: ProfileRegisterCompleteViewModelable public init( + cardVO: CenterProfileCardVO, navigationController: UINavigationController ) { + self.viewModel = ProfileRegisterCompleteVM(centerCardVO: cardVO) self.navigationController = navigationController } @@ -28,6 +32,7 @@ public class ProfileRegisterCompleteCoordinator: ChildCoordinator { public func start() { let vc = ProfileRegisterCompleteVC(coordinator: self) + vc.bind(viewModel: viewModel) viewControllerRef = vc navigationController.pushViewController(vc, animated: true) } @@ -40,7 +45,7 @@ public class ProfileRegisterCompleteCoordinator: ChildCoordinator { extension ProfileRegisterCompleteCoordinator { func showCenterProfile() { - parent?.showCenterProfile() + parent?.showMyCenterProfile() } func registerFinished() { diff --git a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift index 1d68911b..cbbd3a24 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/Coordinator/RegisterCenterInfo/RegisterCenterInfoCoordinator.swift @@ -8,6 +8,7 @@ import UIKit import PresentationCore import UseCaseInterface +import Entity public class RegisterCenterInfoCoordinator: ChildCoordinator { @@ -46,8 +47,8 @@ public class RegisterCenterInfoCoordinator: ChildCoordinator { extension RegisterCenterInfoCoordinator { - func showCompleteScreen() { - parent?.showCompleteScreen() + func showCompleteScreen(cardVO: CenterProfileCardVO) { + parent?.showCompleteScreen(cardVO: cardVO) } func registerFinished() { diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift index ba396aaa..a280b591 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/Profile/CenterProfileViewController.swift @@ -19,7 +19,7 @@ public protocol CenterProfileViewModelable where Input: CenterProfileInputable, var input: Input { get } var output: Output? { get } - var isMyCenterProfile: Bool { get } + var profileMode: ProfileMode { get } } public protocol CenterProfileInputable { @@ -45,6 +45,8 @@ public class CenterProfileViewController: BaseViewController { var viewModel: (any CenterProfileViewModelable)? + weak var coordinator: CenterProfileCoordinator? + let navigationBar: NavigationBarType1 = { let bar = NavigationBarType1(navigationTitle: "내 센터 정보") return bar @@ -147,14 +149,17 @@ public class CenterProfileViewController: BaseViewController { return view }() - let disposeBag = DisposeBag() + private let disposeBag = DisposeBag() - public init() { + public init(coordinator: CenterProfileCoordinator) { + + self.coordinator = coordinator super.init(nibName: nil, bundle: nil) setApearance() setAutoLayout() + setObservable() } required init?(coder: NSCoder) { fatalError() } @@ -316,6 +321,16 @@ public class CenterProfileViewController: BaseViewController { ]) } + private func setObservable() { + + navigationBar + .eventPublisher + .subscribe { [weak coordinator] _ in + coordinator?.closeViewController() + } + .disposed(by: disposeBag) + } + public func bind(viewModel: any CenterProfileViewModelable) { self.viewModel = viewModel @@ -330,7 +345,7 @@ public class CenterProfileViewController: BaseViewController { .disposed(by: disposeBag) // 내 센터보기 상태인 경우(수정가능한 프로필 상태) - if viewModel.isMyCenterProfile { + if case .myProfile = viewModel.profileMode { profileEditButton .eventPublisher @@ -396,7 +411,7 @@ public class CenterProfileViewController: BaseViewController { .disposed(by: disposeBag) // MARK: Edit Mode - if viewModel.isMyCenterProfile { + if case .myProfile = viewModel.profileMode { output .isEditingMode diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift index 53a7319b..f41d76df 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/ProfileRegisterCompleteVC.swift @@ -13,6 +13,24 @@ import RxSwift import Entity import DSKit +public protocol ProfileRegisterCompleteViewModelable { + // Output + var centerCardVO: Driver { get } +} + +public class ProfileRegisterCompleteVM: ProfileRegisterCompleteViewModelable { + + public var centerCardVO: Driver + + public init(centerCardVO: CenterProfileCardVO) { + + self.centerCardVO = Single + .just(centerCardVO) + .asDriver(onErrorJustReturn: .default) + } + +} + public class ProfileRegisterCompleteVC: UIViewController { // Init @@ -135,12 +153,29 @@ public class ProfileRegisterCompleteVC: UIViewController { private func setObservable() { + centerProfileButton + .rx.tap + .subscribe { [weak coordinator] _ in + coordinator?.showCenterProfile() + } + .disposed(by: disposeBag) + ctaButton .eventPublisher .subscribe { [weak coordinator] _ in - coordinator?.registerFinished() } .disposed(by: disposeBag) } + + public func bind(viewModel vm: ProfileRegisterCompleteViewModelable) { + + vm + .centerCardVO + .drive { [centerProfileButton] vo in + centerProfileButton.nameLabel.textString = vo.name + centerProfileButton.addressLabel.textString = vo.location + } + .disposed(by: disposeBag) + } } diff --git a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift index 6878e723..cea06f21 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/View/RegisterCenterInfo/RegisterCenterInfoVC.swift @@ -36,7 +36,7 @@ public protocol RegisterCenterInfoViewModelable { var nameAndNumberValidation: Driver? { get } var addressValidation: Driver? { get } var imageValidation: Driver? { get } - var profileRegisterSuccess: Driver? { get } + var profileRegisterSuccess: Driver? { get } var alert: Driver? { get } } @@ -713,8 +713,8 @@ extension RegisterCenterInfoVC { vm .profileRegisterSuccess? - .drive(onNext: { [weak coordinator] _ in - coordinator?.showCompleteScreen() + .drive(onNext: { [weak coordinator] cardVO in + coordinator?.showCompleteScreen(cardVO: cardVO) }) .disposed(by: disposeBag) } diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift index 72a43e69..c49e5d44 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/Profile/CenterProfileViewModel.swift @@ -25,7 +25,7 @@ public class CenterProfileViewModel: CenterProfileViewModelable { public var input: Input public var output: Output? = nil - public let isMyCenterProfile: Bool = true + public let profileMode: ProfileMode private var fetchedPhoneNumber: String? private var fetchedIntroduction: String? @@ -45,8 +45,9 @@ public class CenterProfileViewModel: CenterProfileViewModelable { ) } - public init(useCase: CenterProfileUseCase) { + public init(mode: ProfileMode, useCase: CenterProfileUseCase) { + self.profileMode = mode self.profileUseCase = useCase self.input = Input() @@ -54,8 +55,8 @@ public class CenterProfileViewModel: CenterProfileViewModelable { // MARK: fetch from server let profileRequestResult = input .readyToFetch - .flatMap { [unowned self] _ in - self.profileUseCase.getProfile() + .flatMap { [profileMode, profileUseCase] _ in + profileUseCase.getProfile(mode: profileMode) } .share() diff --git a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift index 3e1d0870..bb02cf59 100644 --- a/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift +++ b/project/Projects/Presentation/Feature/Center/Sources/ViewModel/RegisterCenterInfo/RegisterCenterInfoVM.swift @@ -28,7 +28,7 @@ public class RegisterCenterInfoVM: RegisterCenterInfoViewModelable { public var addressValidation: Driver? = nil public var introductionValidation: Driver? = nil public var imageValidation: Driver? = nil - public var profileRegisterSuccess: Driver? = nil + public var profileRegisterSuccess: Driver? = nil public var alert: Driver? = nil // StatObject @@ -122,7 +122,14 @@ public class RegisterCenterInfoVM: RegisterCenterInfoViewModelable { profileRegisterSuccess = profileRegisterResult .compactMap { $0.value } - .asDriver(onErrorJustReturn: ()) + .map { [stateObject] in + let cardVO = CenterProfileCardVO( + name: stateObject.centerName, + location: stateObject.roadNameAddress + ) + return cardVO + } + .asDriver(onErrorJustReturn: .default) let profileRegisterFailure = profileRegisterResult .compactMap { $0.error } diff --git a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift index 84b3b5c5..a08e4579 100644 --- a/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift +++ b/project/Projects/Presentation/PresentationCore/Sources/ScreenCoordinating/Interface/Profile/CenterProfileRegisterCoordinatable.swift @@ -6,10 +6,11 @@ // import Foundation +import Entity public protocol CenterProfileRegisterCoordinatable: ParentCoordinator { func registerFinished() - func showCompleteScreen() - func showCenterProfile() + func showCompleteScreen(cardVO: CenterProfileCardVO) + func showMyCenterProfile() }