Files
divkit/client/ios/DivKitPlayground/UI/DivView/DivViewProvider.swift
T
ventywing c4c415d870 Fix duplication of update for Playground app
Fix duplication of update for Playground app
2023-03-01 13:39:12 +03:00

52 lines
1.1 KiB
Swift

import SwiftUI
import DivKit
final class DivViewProvider {
public let jsonProvider = ObservableJsonProvider()
private var blockProvider: DivBlockProvider!
private var divKitComponents: DivKitComponents!
init() {
let urlOpener = DemoUrlOpener(
loadJsonUrl: { [weak self] url in
self?.jsonProvider.load(url: url)
}
)
divKitComponents = AppComponents.makeDivKitComponents(
updateCardAction: { [weak self] reasons in
self?.blockProvider.update(reasons: reasons.asArray())
},
urlOpener: urlOpener.openUrl(_:)
)
blockProvider = DivBlockProvider(
json: jsonProvider.signal,
divKitComponents: divKitComponents,
shouldResetOnDataChange: true
)
}
func makeDivView(_ url: URL) -> some View {
DivView(
blockProvider: blockProvider,
divKitComponents: divKitComponents
)
.onAppear { [weak self] in
self?.jsonProvider.load(url: url)
}
}
}
extension DivActionURLHandler.UpdateReason {
var patch: DivPatch? {
switch self {
case let .patch(_, patch):
return patch
case .timer, .variable, .state:
return nil
}
}
}