mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
54 lines
1.4 KiB
Swift
54 lines
1.4 KiB
Swift
import DivKit
|
|
import LayoutKit
|
|
import SwiftUI
|
|
|
|
final class DivViewProvider {
|
|
let jsonProvider: PlaygroundJsonProvider
|
|
|
|
private let divKitComponents: DivKitComponents
|
|
private let layoutDirection: UIUserInterfaceLayoutDirection
|
|
|
|
private var themeManager: DivThemeManager {
|
|
divKitComponents.themeManager
|
|
}
|
|
|
|
init(
|
|
layoutDirection: UIUserInterfaceLayoutDirection = .system,
|
|
colorScheme: ColorScheme
|
|
) {
|
|
self.layoutDirection = layoutDirection
|
|
let jsonProvider = PlaygroundJsonProvider()
|
|
let urlHandler = PlaygroundUrlHandler(
|
|
loadJsonUrl: jsonProvider.load(url:)
|
|
)
|
|
divKitComponents = AppComponents.makeDivKitComponents(
|
|
layoutDirection: layoutDirection,
|
|
urlHandler: urlHandler,
|
|
variableStorage: jsonProvider.paletteVariableStorage
|
|
)
|
|
self.jsonProvider = jsonProvider
|
|
|
|
themeManager.setTheme(theme: colorScheme == .dark ? .dark : .light)
|
|
}
|
|
|
|
func makeDivView(_ url: URL) -> some View {
|
|
DivViewControllerSwiftUIAdapter(
|
|
jsonPublisher: jsonProvider.jsonPublisher,
|
|
divKitComponents: divKitComponents,
|
|
debugParams: AppComponents.debugParams
|
|
)
|
|
.onAppear { [weak self] in
|
|
self?.jsonProvider.load(url: url)
|
|
}
|
|
.onDisappear { [weak self] in
|
|
self?.divKitComponents.reset(cardId: cardId)
|
|
}
|
|
}
|
|
|
|
func setColorScheme(_ colorScheme: ColorScheme) {
|
|
themeManager.setTheme(theme: colorScheme == .dark ? .dark : .light)
|
|
}
|
|
}
|
|
|
|
let cardId: DivCardID = "DivViewCard"
|