Files
babaevmm 956c055cd8 update swiftformat, add organize rule
commit_hash:0f7ba811b37db6d2a9fc05efe5f94502feda4856
2025-08-04 16:24:48 +03:00

87 lines
2.1 KiB
Swift

import Combine
import DivKit
import DivKitExtensions
import LayoutKit
import UIKit
open class DivViewController: UIViewController {
private let divKitComponents: DivKitComponents
private let debugParams: DebugParams
private var divView: DivView?
private let scrollView = VisibilityTrackingScrollView()
private var cancellables = Set<AnyCancellable>()
private let identifier: String = "baseDivView"
@available(*, unavailable)
public required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(
jsonPublisher: JsonPublisher,
divKitComponents: DivKitComponents,
debugParams: DebugParams
) {
self.divKitComponents = divKitComponents
self.debugParams = debugParams
super.init(nibName: nil, bundle: nil)
jsonPublisher
.filter { !$0.isEmpty }
.sink { [weak self] value in
self?.divView = self?.createDivView()
self?.setData(value)
}
.store(in: &cancellables)
}
public override func loadView() {
scrollView.backgroundColor = .white
view = scrollView
}
public override func viewDidLoad() {
super.viewDidLoad()
let pinchToZoomExtensionHandler = PinchToZoomExtensionHandler(overlayView: view)
divKitComponents.extensionHandlers = divKitComponents.extensionHandlers.filter {
$0.id != pinchToZoomExtensionHandler.id
}
divKitComponents.extensionHandlers.append(pinchToZoomExtensionHandler)
}
public override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
cancellables = []
}
open func onViewUpdated() {}
private func createDivView() -> DivView {
let divView = DivView(divKitComponents: divKitComponents)
scrollView.divView = divView
divView.setParentScrollView(scrollView)
divView.accessibilityIdentifier = identifier
return divView
}
private func setData(
_ data: [String: Any]
) {
Task {
await divView?.setSource(
DivViewSource(
kind: .json(data),
cardId: cardId
),
debugParams: debugParams,
shouldResetPreviousCardData: true
)
}
}
}