Skip to content

Commit

Permalink
[Chore] AuthTextField 클로저 -> authDelegate 방식으로 변경 #10
Browse files Browse the repository at this point in the history
  • Loading branch information
meltsplit committed Apr 27, 2023
1 parent 04297b6 commit b665a3d
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@ import UIKit
import SnapKit
import Then

protocol AuthTextFieldDelegate: UITextFieldDelegate {
func authTextFieldTextDidChange(_ textFieldType: AuthTextField.TextFieldType, text: String)
}

final class AuthTextField : UITextField {

//MARK: - Properties

typealias handler = ((String) -> Void)
private var updateHandler: handler?
weak var authDelegate: AuthTextFieldDelegate?

enum TextFieldType {
case email
Expand Down Expand Up @@ -127,10 +130,6 @@ final class AuthTextField : UITextField {
}
}

public func setUpdateHandler(updateHandler: @escaping handler) {
self.updateHandler = updateHandler
}

//MARK: - Action Method

@objc
Expand Down Expand Up @@ -165,7 +164,7 @@ extension AuthTextField: UITextFieldDelegate {
func textFieldDidChangeSelection(_ textField: UITextField) {
updateClearButtonUI()
guard let text = textField.text else { return}
updateHandler?(text)
authDelegate?.authTextFieldTextDidChange(textFieldType, text: text)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ final class SignInVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

target()
delegate()
binding()
style()
hierarchy()
Expand All @@ -84,20 +84,13 @@ final class SignInVC: UIViewController {

extension SignInVC {

private func target() {
emailTextField.setUpdateHandler { [weak self] text in
guard let self else { return }
self.viewModel.idTextFieldDidChangeEvent(text)
}

passwordTextField.setUpdateHandler { [weak self] text in
guard let self else { return }
self.viewModel.passwordTextFieldDidChangeEvent(text)
}
private func delegate() {
emailTextField.authDelegate = self
passwordTextField.authDelegate = self
}

private func binding() {
viewModel.ableToLogin.observe(on: self) { [weak self] isEnabled in
viewModel.ableToSignIn.observe(on: self) { [weak self] isEnabled in
self?.updateSignInButtonUI(isEnabled)
}
viewModel.isSuccessLogin.observe(on: self) { [weak self] result in
Expand Down Expand Up @@ -195,3 +188,14 @@ extension SignInVC {
}
}

extension SignInVC: AuthTextFieldDelegate {
func authTextFieldTextDidChange(_ textFieldType: AuthTextField.TextFieldType, text: String) {
switch textFieldType {

case .email:
self.viewModel.emailTextFieldDidChangeEvent(text)
case .password:
self.viewModel.passwordTextFieldDidChangeEvent(text)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ enum AuthError: Error {
}

protocol SignInViewModelInput {
func idTextFieldDidChangeEvent(_ text: String)
func emailTextFieldDidChangeEvent(_ text: String)
func passwordTextFieldDidChangeEvent(_ text: String)
func signInButtonDidTapEvent()
}

protocol SignInViewModelOutput {
var ableToLogin: Observable<Bool> { get }
var ableToSignIn: Observable<Bool> { get }
var isSuccessLogin: Observable<Result<Bool,AuthError>> { get }
}

Expand All @@ -33,7 +33,7 @@ final class DefaultSignInViewModel: SignInViewModel {

//MARK: - Output

var ableToLogin: Observable<Bool> = Observable(false)
var ableToSignIn: Observable<Bool> = Observable(false)
var isSuccessLogin: Observable<Result<Bool,AuthError>> = Observable(.failure(.invalidEmail))

//MARK: - Init
Expand All @@ -47,14 +47,14 @@ final class DefaultSignInViewModel: SignInViewModel {

extension DefaultSignInViewModel {

func idTextFieldDidChangeEvent(_ text: String) {
func emailTextFieldDidChangeEvent(_ text: String) {
self.email = text
self.ableToLogin.value = email.hasText && password.hasText
self.ableToSignIn.value = email.hasText && password.hasText
}

func passwordTextFieldDidChangeEvent(_ text: String) {
self.password = text
self.ableToLogin.value = email.hasText && password.hasText
self.ableToSignIn.value = email.hasText && password.hasText
}

func signInButtonDidTapEvent() {
Expand All @@ -76,6 +76,5 @@ extension DefaultSignInViewModel {
}

isSuccessLogin.value = .success(true)

}
}
6 changes: 0 additions & 6 deletions SOPTving/SOPTving/Utility/Builder/AuthTextFieldBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ protocol TextFieldBuilder {
func setPlaceholder(text: String, color: UIColor) -> Self
func setLeftPaddingAmount(_ offset: CGFloat) -> Self
func setCornerRadius(_ radius: CGFloat) -> Self
func setCompletionHandler(completion: @escaping AuthTextField.handler) -> Self
}

//MARK: - Builder
Expand Down Expand Up @@ -66,11 +65,6 @@ final class AuthTextFieldBuilder: TextFieldBuilder {
textField.addRightButton(button)
return self
}
@discardableResult
func setCompletionHandler(completion: @escaping AuthTextField.handler) -> Self{
textField.setUpdateHandler(updateHandler: completion)
return self
}

}

Expand Down

0 comments on commit b665a3d

Please sign in to comment.