/
sberpay
/
AgeGate-iOS
Обзор
Документация
Войти
/
sberpay
/
AgeGate-iOS
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
develop
AgeGateSDK/Navigation/RouteMaps/AGTKeyGenRouteMap.swift
96 строк
4 KB
SergeyGladkiy
[0.2.0] БДСЧ сценарий
30 июл 2026, 21:57
30 июл 2026, 21:57
cbcdfcb
Код
Авторство
О чём код?
// // CoverPushTransition.swift // Crypto // // Created by Ипатов Александр Станиславович on 16.10.2023. // import UIKit /// Маршруты сценария БДСЧ. Презентеры знают только его. /// /// Онбординг и успех — компактные шторки по контенту. Экран сбора энтропии — /// отдельный полноэкранный контейнер поверх: ему нужна вся высота, а высоту /// шторки задаёт контроллер презентации в момент показа, поменять её у уже /// показанного контейнера нельзя. @MainActor protocol AGTKeyGenRouting: AnyObject { func openGeneration() func openSuccess() func finish(with result: AGTKeyGenResult) } @MainActor final class AGTKeyGenRouteMap: AGTKeyGenRouting { /// Компактная шторка онбординга/успеха. private weak var container: AGTContentNC? /// Полноэкранная шторка экрана энтропии. private weak var fullScreenContainer: AGTContentNC? private let windowManager: AGTWindowManager private let completion: (AGTKeyGenResult) -> Void private let onFinish: AGTAction init(windowManager: AGTWindowManager, completion: @escaping (AGTKeyGenResult) -> Void, onFinish: @escaping AGTAction) { self.windowManager = windowManager self.completion = completion self.onFinish = onFinish } func attach(container: AGTContentNC) { self.container = container } func openGeneration() { guard let base = container else { return } let presenter = AGTKeyGenPresenter(router: self) let view = AGTKeyGenVC(presenter: presenter) presenter.view = view /// Полноэкранный контейнер поверх онбординга. Презентуем на /// онбординге — он уже в окне SDK, отдельное окно не нужно. let full = AGTContentNC(rootViewController: view) full.setFullHeight(true) fullScreenContainer = full base.present(full, animated: true) } func openSuccess() { /// Закрываем полноэкранный экран энтропии и показываем успех /// в исходной компактной шторке. let showSuccess: AGTAction = { [weak self] in guard let self, let container = self.container else { return } let presenter = AGTKeyGenSuccessPresenter(router: self) let view = AGTKeyGenSuccessVC(presenter: presenter) presenter.view = view AGTPushTransition(pushInto: container).performTransition(for: view) } if let full = fullScreenContainer { full.dismiss(animated: true) { showSuccess() } fullScreenContainer = nil } else { showSuccess() } } func finish(with result: AGTKeyGenResult) { let complete: AGTAction = { [onFinish, completion] in completion(result) onFinish() } /// Закрываем всё, что успели показать. if let full = fullScreenContainer { full.dismiss(animated: false) { [weak self] in self?.container?.dismiss(animated: true) { complete() } } } else { container?.dismiss(animated: true) { complete() } } } }