DivStateInterceptors removed

7317c2d1407348e841abe529530fb2afe880366b
This commit is contained in:
booster
2024-05-07 02:21:52 +03:00
parent 98305517c3
commit 2c092b8017
4 changed files with 2 additions and 79 deletions
-1
View File
@@ -9386,7 +9386,6 @@
"client/ios/DivKit/Patches/DivPatchProvider.swift":"divkit/public/client/ios/DivKit/Patches/DivPatchProvider.swift",
"client/ios/DivKit/RawDivData.swift":"divkit/public/client/ios/DivKit/RawDivData.swift",
"client/ios/DivKit/RunLoopCardUpdateAggregator.swift":"divkit/public/client/ios/DivKit/RunLoopCardUpdateAggregator.swift",
"client/ios/DivKit/States/DivStateInterceptor.swift":"divkit/public/client/ios/DivKit/States/DivStateInterceptor.swift",
"client/ios/DivKit/States/DivStateLifetime.swift":"divkit/public/client/ios/DivKit/States/DivStateLifetime.swift",
"client/ios/DivKit/States/DivStateManagement.swift":"divkit/public/client/ios/DivKit/States/DivStateManagement.swift",
"client/ios/DivKit/States/DivStateManager.swift":"divkit/public/client/ios/DivKit/States/DivStateManager.swift",
@@ -25,7 +25,6 @@ public struct DivBlockModelingContext {
let fontProvider: DivFontProvider
let flagsInfo: DivFlagsInfo
let extensionHandlers: [String: DivExtensionHandler]
let stateInterceptors: [String: DivStateInterceptor]
let layoutDirection: UserInterfaceLayoutDirection
let debugParams: DebugParams
let scheduler: Scheduling
@@ -58,7 +57,6 @@ public struct DivBlockModelingContext {
fontProvider: DivFontProvider? = nil,
flagsInfo: DivFlagsInfo = .default,
extensionHandlers: [DivExtensionHandler] = [],
stateInterceptors: [DivStateInterceptor] = [],
variablesStorage: DivVariablesStorage = DivVariablesStorage(),
playerFactory: PlayerFactory? = nil,
debugParams: DebugParams = DebugParams(),
@@ -83,15 +81,6 @@ public struct DivBlockModelingContext {
}
extensionsHandlersDictionary[id] = extensionHandler
}
var stateInterceptorsDictionary = [String: DivStateInterceptor]()
for stateInterceptor in stateInterceptors {
let id = stateInterceptor.id
if stateInterceptorsDictionary[id] != nil {
DivKitLogger.failure("Duplicate DivStateInterceptor for: \(id)")
continue
}
stateInterceptorsDictionary[id] = stateInterceptor
}
self.init(
viewId: viewId,
cardLogId: cardLogId,
@@ -107,7 +96,6 @@ public struct DivBlockModelingContext {
fontProvider: fontProvider,
flagsInfo: flagsInfo,
extensionHandlers: extensionsHandlersDictionary,
stateInterceptors: stateInterceptorsDictionary,
variablesStorage: variablesStorage,
playerFactory: playerFactory,
debugParams: debugParams,
@@ -136,7 +124,6 @@ public struct DivBlockModelingContext {
fontProvider: DivFontProvider?,
flagsInfo: DivFlagsInfo,
extensionHandlers: [String: DivExtensionHandler],
stateInterceptors: [String: DivStateInterceptor],
variablesStorage: DivVariablesStorage,
playerFactory: PlayerFactory?,
debugParams: DebugParams,
@@ -175,7 +162,6 @@ public struct DivBlockModelingContext {
self.tooltipViewFactory = tooltipViewFactory
self.variablesStorage = variablesStorage
self.extensionHandlers = extensionHandlers
self.stateInterceptors = stateInterceptors
functionsProvider = FunctionsProvider(
cardId: cardId,
variablesStorage: variablesStorage,
@@ -199,17 +185,13 @@ public struct DivBlockModelingContext {
}
return extensions.compactMap {
let id = $0.id
if !extensionHandlers.keys.contains(id), !stateInterceptors.keys.contains(id) {
if !extensionHandlers.keys.contains(id) {
addError(message: "No DivExtensionHandler for: \(id)")
}
return extensionHandlers[id]
}
}
public func getStateInterceptor(for divState: DivState) -> DivStateInterceptor? {
divState.extensions?.compactMap { stateInterceptors[$0.id] }.first
}
public func addError(message: String) {
errorsStorage.add(DivBlockModelingError(message, path: parentPath))
}
@@ -23,7 +23,6 @@ extension DivState: DivBlockModeling {
context.addWarning(message: "DivState has no id")
}
let stateInterceptor = context.getStateInterceptor(for: self)
let divStatePath = context.parentDivStatePath + id
let defaultStateId = resolveDefaultStateId(context.expressionResolver)
let stateManager = context.stateManager
@@ -39,8 +38,7 @@ extension DivState: DivBlockModeling {
let stateManagerItem = stateManager.get(stateBlockPath: divStatePath)
let expressionResolver = context.expressionResolver
let activeState = stateInterceptor?.getAppropriateState(divState: self, context: context)
?? states.first { $0.stateId == stateManagerItem?.currentStateID.rawValue }
let activeState = states.first { $0.stateId == stateManagerItem?.currentStateID.rawValue }
?? states.first { $0.stateId == defaultStateId }
?? states[0]
let activeStateID = DivStateID(rawValue: activeState.stateId)
@@ -1,56 +0,0 @@
import CommonCorePublic
public protocol DivStateInterceptor {
var id: String { get }
func getAppropriateState(
divState: DivState,
context: DivBlockModelingContext
) -> DivState.State?
}
public final class DivStateInterceptorImpl: DivStateInterceptor {
public let id: String
private let stateId: Variable<DivStateID>
public init(
id: String,
stateId: Variable<DivStateID>
) {
self.id = id
self.stateId = stateId
}
public func getAppropriateState(
divState: DivState,
context _: DivBlockModelingContext
) -> DivState.State? {
guard
let extensions = divState.extensions,
let statesExtension = extensions.first(where: { $0.id == id }),
let params = statesExtension.params,
let statePath = statePath(
stateParams: params,
stateId: stateId.value
)
else {
return nil
}
let stateId = statePath.split()?.stateId.rawValue
return divState.states.first(where: { $0.stateId == stateId })
}
private func statePath(
stateParams: [String: Any],
stateId: DivStateID
) -> DivStatePath? {
guard
let stateArray = stateParams[stateId.rawValue] as? [String],
let statePath = stateArray.first
else {
return nil
}
return DivStatePath.makeDivStatePath(from: statePath)
}
}