diff --git a/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactory.swift b/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactory.swift index 307673f4..3333cdfb 100644 --- a/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactory.swift +++ b/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactory.swift @@ -3,5 +3,5 @@ import Moordinator import UIKit public protocol RenewalPasswordFactory { - func makeViewController() -> UIViewController + func makeViewController(signinHandler: @escaping () -> Void) -> UIViewController } diff --git a/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactoryImpl.swift b/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactoryImpl.swift index 1618492d..77d00a43 100644 --- a/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactoryImpl.swift +++ b/Projects/Feature/RenewalPasswordFeature/Sources/Factory/RenewalPasswordFactoryImpl.swift @@ -4,11 +4,12 @@ import Moordinator import UIKit struct RenewalPasswordFactoryImpl: RenewalPasswordFactory { - func makeViewController() -> UIViewController { + func makeViewController(signinHandler: @escaping () -> Void) -> UIViewController { let url = "https://www.dotori-gsm.com/changePasswd" return DWebViewController( - urlString: url + urlString: url, + detectHandler: signinHandler ) } } diff --git a/Projects/Feature/SigninFeature/Sources/Moordinator/SigninMoordinator.swift b/Projects/Feature/SigninFeature/Sources/Moordinator/SigninMoordinator.swift index 118ae530..909f2d4d 100644 --- a/Projects/Feature/SigninFeature/Sources/Moordinator/SigninMoordinator.swift +++ b/Projects/Feature/SigninFeature/Sources/Moordinator/SigninMoordinator.swift @@ -38,12 +38,18 @@ final class SigninMoordinator: Moordinator { ) case .signup: - let viewController = signupFactory.makeViewController() + let viewController = signupFactory.makeViewController { [rootVC] in + print("ASD") + rootVC.popViewController(animated: true) + } rootVC.pushViewController(viewController, animated: true) return .one(.contribute(withNextPresentable: viewController)) case .renewalPassword: - let viewController = renewalPasswordFactory.makeViewController() + let viewController = renewalPasswordFactory.makeViewController { [rootVC] in + print("ASD") + rootVC.popViewController(animated: true) + } rootVC.pushViewController(viewController, animated: true) return .one(.contribute(withNextPresentable: viewController)) diff --git a/Projects/Feature/SignupFeature/Sources/Factory/SignupFactory.swift b/Projects/Feature/SignupFeature/Sources/Factory/SignupFactory.swift index a4568691..07e47552 100644 --- a/Projects/Feature/SignupFeature/Sources/Factory/SignupFactory.swift +++ b/Projects/Feature/SignupFeature/Sources/Factory/SignupFactory.swift @@ -3,5 +3,5 @@ import UIKit import Moordinator public protocol SignupFactory { - func makeViewController() -> UIViewController + func makeViewController(signinHandler: @escaping () -> Void) -> UIViewController } diff --git a/Projects/Feature/SignupFeature/Sources/Factory/SignupFactoryImpl.swift b/Projects/Feature/SignupFeature/Sources/Factory/SignupFactoryImpl.swift index 24b6549d..4be4798d 100644 --- a/Projects/Feature/SignupFeature/Sources/Factory/SignupFactoryImpl.swift +++ b/Projects/Feature/SignupFeature/Sources/Factory/SignupFactoryImpl.swift @@ -5,11 +5,12 @@ import DWebKit import UIKit struct SignupFactoryImpl: SignupFactory { - func makeViewController() -> UIViewController { + func makeViewController(signinHandler: @escaping () -> Void) -> UIViewController { let url = "https://www.dotori-gsm.com/signup" return DWebViewController( - urlString: url + urlString: url, + detectHandler: signinHandler ) } } diff --git a/Projects/UserInterface/DWebKit/Sources/DWebViewController.swift b/Projects/UserInterface/DWebKit/Sources/DWebViewController.swift index 422b531d..e1cd3484 100644 --- a/Projects/UserInterface/DWebKit/Sources/DWebViewController.swift +++ b/Projects/UserInterface/DWebKit/Sources/DWebViewController.swift @@ -5,9 +5,17 @@ public final class DWebViewController: UIViewController, WKNavigationDelegate { // MARK: - Properties private let urlString: String private let wkWebView: WKWebView + private let detectKeyword: String + private let detectHandler: () -> Void + private var urlObservation: NSKeyValueObservation? // MARK: - Init - public init(urlString: String, tokenDTO: LocalStorageTokenDTO? = nil) { + public init( + urlString: String, + tokenDTO: LocalStorageTokenDTO? = nil, + detectKeyword: String = "signin", + detectHandler: @escaping () -> Void = {} + ) { let preferences = WKPreferences() preferences.javaScriptCanOpenWindowsAutomatically = true @@ -18,6 +26,8 @@ public final class DWebViewController: UIViewController, WKNavigationDelegate { wkWebView.translatesAutoresizingMaskIntoConstraints = false self.wkWebView = wkWebView self.urlString = urlString + self.detectKeyword = detectKeyword + self.detectHandler = detectHandler super.init(nibName: nil, bundle: nil) if let tokenDTO { setAccessToken(tokenDTO: tokenDTO, configuration: wkWebView.configuration) @@ -47,6 +57,12 @@ public final class DWebViewController: UIViewController, WKNavigationDelegate { let request = URLRequest(url: url) self.wkWebView.load(request) } + urlObservation = wkWebView.observe(\.url, options: .new) { [detectKeyword, detectHandler] webView, _ in + guard let url = webView.url?.absoluteString, url.contains(detectKeyword) else { + return + } + detectHandler() + } } }