Files
denlvovich b97788724b Added DivThemeManager
commit_hash:cc2cf34d5386f3847e0aeba256d8a44ee730666f
2025-12-03 21:53:28 +03:00

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"