mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
78 lines
1.9 KiB
Swift
78 lines
1.9 KiB
Swift
import DivKit
|
|
import SwiftUI
|
|
|
|
struct WebPreviewView: View {
|
|
@Environment(\.presentationMode)
|
|
var presentationMode: Binding<PresentationMode>
|
|
|
|
let url: URL
|
|
|
|
private let model = WebPreviewModel()
|
|
|
|
var body: some View {
|
|
ViewWithHeader(
|
|
"Web Preview",
|
|
background: ThemeColor.divKit,
|
|
presentationMode: presentationMode
|
|
) {
|
|
WebPreviewViewRepresentable(
|
|
blockProvider: model.blockProvider,
|
|
divKitComponents: model.divKitComponents,
|
|
onScreenshotTaken: model.sendScreenshot(_:)
|
|
)
|
|
.onAppear { [model, url] in
|
|
model.connect(httpUrl: url)
|
|
}
|
|
.onDisappear { [model] in
|
|
model.endConnection()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private struct WebPreviewModel {
|
|
private let socket = WebPreviewSocket()
|
|
private(set) var divKitComponents: DivKitComponents!
|
|
private(set) var blockProvider: DivBlockProvider!
|
|
private(set) var payloadFactory: UIStatePayloadFactory!
|
|
private var renderingTime: UIStatePayload.RenderingTime {
|
|
blockProvider.renderingTime
|
|
}
|
|
|
|
init() {
|
|
weak var weakBlockProvider: DivBlockProvider?
|
|
divKitComponents = AppComponents.makeDivKitComponents(
|
|
updateCardAction: { reasons in
|
|
weakBlockProvider?.update(reasons: reasons.asArray())
|
|
}
|
|
)
|
|
blockProvider = DivBlockProvider(
|
|
json: socket.response,
|
|
divKitComponents: divKitComponents,
|
|
shouldResetOnDataChange: false
|
|
)
|
|
weakBlockProvider = blockProvider
|
|
payloadFactory = UIStatePayloadFactory(
|
|
deviceInfo: DeviceInfo(),
|
|
errors: blockProvider.$errors
|
|
)
|
|
}
|
|
|
|
func connect(httpUrl: URL) {
|
|
socket.connect(httpUrl: httpUrl)
|
|
}
|
|
|
|
func endConnection() {
|
|
socket.endConnection()
|
|
}
|
|
|
|
func sendScreenshot(_ screenshotInfo: ScreenshotInfo) {
|
|
socket.send(
|
|
state: payloadFactory.makePayload(
|
|
screenshotInfo: screenshotInfo,
|
|
renderingTime: renderingTime
|
|
)
|
|
)
|
|
}
|
|
}
|