mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
DivStateInterceptors removed
7317c2d1407348e841abe529530fb2afe880366b
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user