Skip to content

Commit

Permalink
Release 30.13.0
Browse files Browse the repository at this point in the history
9f56392ae7eb522498ab7f61c1517425497cf96f
  • Loading branch information
robot-divkit committed Aug 12, 2024
1 parent b0e5f9e commit 7016337
Show file tree
Hide file tree
Showing 54 changed files with 757 additions and 122 deletions.
5 changes: 5 additions & 0 deletions .mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -894,6 +894,7 @@
"Specs/DivKit/30.10.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.10.0/DivKit.podspec",
"Specs/DivKit/30.11.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.11.0/DivKit.podspec",
"Specs/DivKit/30.12.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.12.0/DivKit.podspec",
"Specs/DivKit/30.13.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.13.0/DivKit.podspec",
"Specs/DivKit/30.2.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.2.0/DivKit.podspec",
"Specs/DivKit/30.3.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.3.0/DivKit.podspec",
"Specs/DivKit/30.4.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.4.0/DivKit.podspec",
Expand Down Expand Up @@ -958,6 +959,7 @@
"Specs/DivKitExtensions/30.10.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.10.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.11.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.11.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.12.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.12.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.13.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.13.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.2.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.2.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.3.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.3.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.4.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.4.0/DivKitExtensions.podspec",
Expand Down Expand Up @@ -1004,6 +1006,7 @@
"Specs/DivKit_LayoutKit/30.10.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.10.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.11.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.11.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.12.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.12.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.13.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.13.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.2.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.2.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.3.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.3.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.4.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.4.0/DivKit_LayoutKit.podspec",
Expand Down Expand Up @@ -1050,6 +1053,7 @@
"Specs/DivKit_LayoutKitInterface/30.10.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.10.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.11.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.11.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.12.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.12.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.13.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.13.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.2.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.2.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.3.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.3.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.4.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.4.0/DivKit_LayoutKitInterface.podspec",
Expand Down Expand Up @@ -1096,6 +1100,7 @@
"Specs/DivKit_Serialization/30.10.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.10.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.11.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.11.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.12.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.12.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.13.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.13.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.2.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.2.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.3.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.3.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.4.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.4.0/DivKit_Serialization.podspec",
Expand Down
5 changes: 5 additions & 0 deletions DivKit/DivBlockModelingContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public struct DivBlockModelingContext {
private let persistentValuesStorage: DivPersistentValuesStorage
let tooltipViewFactory: DivTooltipViewFactory?
public let variablesStorage: DivVariablesStorage
let triggersStorage: DivTriggersStorage?
public private(set) var expressionResolver: ExpressionResolver
private let functionsProvider: FunctionsProvider
public let variableTracker: DivVariableTracker?
Expand All @@ -58,6 +59,7 @@ public struct DivBlockModelingContext {
flagsInfo: DivFlagsInfo = .default,
extensionHandlers: [DivExtensionHandler] = [],
variablesStorage: DivVariablesStorage = DivVariablesStorage(),
triggersStorage: DivTriggersStorage? = nil,
playerFactory: PlayerFactory? = nil,
debugParams: DebugParams = DebugParams(),
scheduler: Scheduling? = nil,
Expand Down Expand Up @@ -94,6 +96,7 @@ public struct DivBlockModelingContext {
flagsInfo: flagsInfo,
extensionHandlers: extensionsHandlersDictionary,
variablesStorage: variablesStorage,
triggersStorage: triggersStorage,
playerFactory: playerFactory,
debugParams: debugParams,
scheduler: scheduler,
Expand Down Expand Up @@ -123,6 +126,7 @@ public struct DivBlockModelingContext {
flagsInfo: DivFlagsInfo,
extensionHandlers: [String: DivExtensionHandler],
variablesStorage: DivVariablesStorage,
triggersStorage: DivTriggersStorage?,
playerFactory: PlayerFactory?,
debugParams: DebugParams,
scheduler: Scheduling?,
Expand Down Expand Up @@ -161,6 +165,7 @@ public struct DivBlockModelingContext {
self.persistentValuesStorage = persistentValuesStorage
self.tooltipViewFactory = tooltipViewFactory
self.variablesStorage = variablesStorage
self.triggersStorage = triggersStorage
self.extensionHandlers = extensionHandlers
self.layoutProviderHandler = layoutProviderHandler
self.functionsProvider = FunctionsProvider(
Expand Down
3 changes: 3 additions & 0 deletions DivKit/DivKitComponents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ public final class DivKitComponents {
lastVisibleBoundsCache.reset()
stateManagement.reset()
variablesStorage.reset()
triggersStorage.reset()
visibilityCounter.reset()
timerStorage.reset()
}
Expand All @@ -218,6 +219,7 @@ public final class DivKitComponents {
lastVisibleBoundsCache.dropVisibleBounds(prefix: UIElementPath(cardId.rawValue))
stateManagement.reset(cardId: cardId)
variablesStorage.reset(cardId: cardId)
triggersStorage.reset(cardId: cardId)
visibilityCounter.reset(cardId: cardId)
timerStorage.reset(cardId: cardId)
}
Expand Down Expand Up @@ -295,6 +297,7 @@ public final class DivKitComponents {
flagsInfo: flagsInfo,
extensionHandlers: extensionHandlers,
variablesStorage: variablesStorage,
triggersStorage: triggersStorage,
playerFactory: playerFactory,
debugParams: debugParams,
parentScrollView: parentScrollView,
Expand Down
2 changes: 1 addition & 1 deletion DivKit/DivKitInfo.swift
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
public enum DivKitInfo {
public static let version = "30.12.0"
public static let version = "30.13.0"
}
4 changes: 4 additions & 0 deletions DivKit/Extensions/DivBase/DivBaseExtensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ extension DivBase {
path: path,
variables: variables?.extractDivVariableValues() ?? [:]
)
context.triggersStorage?.setIfNeeded(
path: path,
triggers: variableTriggers ?? []
)

let extensionHandlers = context.getExtensionHandlers(for: self)
for extensionHandler in extensionHandlers {
Expand Down
80 changes: 54 additions & 26 deletions DivKit/Extensions/DivData/DivDataPatchExtensions.swift
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
import VGSL

protocol DivPatchCallbacks {
var elementChanged: (String) -> Void { get set }
}

struct Callbacks: DivPatchCallbacks {
var elementChanged: (String) -> Void
}

extension Callbacks {
static var empty: Self {
.init(elementChanged: { _ in })
}
}

extension DivData {
public func applyPatch(_ patch: DivPatch) -> DivData {
applyPatch(patch, callbacks: Callbacks.empty)
}

func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivData {
let states = states.map {
State(div: $0.div.applySingleItemPatch(patch), stateId: $0.stateId)
State(div: $0.div.applySingleItemPatch(patch, callbacks: callbacks), stateId: $0.stateId)
}
return DivData(
logId: logId,
Expand All @@ -17,39 +35,43 @@ extension DivData {
}

extension Div {
fileprivate func applySingleItemPatch(_ patch: DivPatch) -> Div {
fileprivate func applySingleItemPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> Div {
if let id, let change = patch.getChange(id: id) {
guard let items = change.items, items.count == 1 else {
DivKitLogger.error("Patch contains multiple items, but single item is expected: \(id)")
return self
}
callbacks.elementChanged(id)
return items[0]
}
return applyPatchToChildren(patch)
return applyPatchToChildren(patch, callbacks: callbacks)
}

fileprivate func applyOptionalItemPatch(_ patch: DivPatch) -> Div? {
fileprivate func applyOptionalItemPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> Div? {
if let id, let change = patch.getChange(id: id) {
guard let items = change.items else {
callbacks.elementChanged(id)
return nil
}
if items.count == 1 {
callbacks.elementChanged(id)
return items[0]
}
DivKitLogger.error("Patch contains multiple items, but single item is expected: \(id)")
return self
}
return applyPatchToChildren(patch)
return applyPatchToChildren(patch, callbacks: callbacks)
}

fileprivate func applyMultipleItemsPatch(_ patch: DivPatch) -> [Div] {
fileprivate func applyMultipleItemsPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> [Div] {
if let id, let change = patch.getChange(id: id) {
callbacks.elementChanged(id)
return change.items ?? []
}
return [applyPatchToChildren(patch)]
return [applyPatchToChildren(patch, callbacks: callbacks)]
}

private func applyPatchToChildren(_ patch: DivPatch) -> Div {
private func applyPatchToChildren(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> Div {
switch self {
case .divCustom,
.divGifImage,
Expand All @@ -64,24 +86,24 @@ extension Div {
// no children
self
case let .divContainer(value):
.divContainer(value.applyPatch(patch))
.divContainer(value.applyPatch(patch, callbacks: callbacks))
case let .divGallery(value):
.divGallery(value.applyPatch(patch))
.divGallery(value.applyPatch(patch, callbacks: callbacks))
case let .divGrid(value):
.divGrid(value.applyPatch(patch))
.divGrid(value.applyPatch(patch, callbacks: callbacks))
case let .divPager(value):
.divPager(value.applyPatch(patch))
.divPager(value.applyPatch(patch, callbacks: callbacks))
case let .divState(value):
.divState(value.applyPatch(patch))
.divState(value.applyPatch(patch, callbacks: callbacks))
case let .divTabs(value):
.divTabs(value.applyPatch(patch))
.divTabs(value.applyPatch(patch, callbacks: callbacks))
}
}
}

extension DivContainer {
fileprivate func applyPatch(_ patch: DivPatch) -> DivContainer {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch) }
fileprivate func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivContainer {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch, callbacks: callbacks) }
return DivContainer(
accessibility: accessibility,
action: action,
Expand Down Expand Up @@ -122,6 +144,7 @@ extension DivContainer {
transitionIn: transitionIn,
transitionOut: transitionOut,
transitionTriggers: transitionTriggers,
variableTriggers: variableTriggers,
variables: variables,
visibility: visibility,
visibilityAction: visibilityAction,
Expand All @@ -132,8 +155,8 @@ extension DivContainer {
}

extension DivGallery {
fileprivate func applyPatch(_ patch: DivPatch) -> DivGallery {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch) }
fileprivate func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivGallery {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch, callbacks: callbacks) }
return DivGallery(
accessibility: accessibility,
alignmentHorizontal: alignmentHorizontal,
Expand Down Expand Up @@ -170,6 +193,7 @@ extension DivGallery {
transitionIn: transitionIn,
transitionOut: transitionOut,
transitionTriggers: transitionTriggers,
variableTriggers: variableTriggers,
variables: variables,
visibility: visibility,
visibilityAction: visibilityAction,
Expand All @@ -180,8 +204,8 @@ extension DivGallery {
}

extension DivGrid {
fileprivate func applyPatch(_ patch: DivPatch) -> DivGrid {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch) }
fileprivate func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivGrid {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch, callbacks: callbacks) }
return DivGrid(
accessibility: accessibility,
action: action,
Expand Down Expand Up @@ -216,6 +240,7 @@ extension DivGrid {
transitionIn: transitionIn,
transitionOut: transitionOut,
transitionTriggers: transitionTriggers,
variableTriggers: variableTriggers,
variables: variables,
visibility: visibility,
visibilityAction: visibilityAction,
Expand All @@ -226,8 +251,8 @@ extension DivGrid {
}

extension DivPager {
fileprivate func applyPatch(_ patch: DivPatch) -> DivPager {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch) }
fileprivate func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivPager {
let patchedItems = nonNilItems.flatMap { $0.applyMultipleItemsPatch(patch, callbacks: callbacks) }
return DivPager(
accessibility: accessibility,
alignmentHorizontal: alignmentHorizontal,
Expand Down Expand Up @@ -262,6 +287,7 @@ extension DivPager {
transitionIn: transitionIn,
transitionOut: transitionOut,
transitionTriggers: transitionTriggers,
variableTriggers: variableTriggers,
variables: variables,
visibility: visibility,
visibilityAction: visibilityAction,
Expand All @@ -272,12 +298,12 @@ extension DivPager {
}

extension DivState {
fileprivate func applyPatch(_ patch: DivPatch) -> DivState {
fileprivate func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivState {
let patchedStates = states.map {
DivState.State(
animationIn: $0.animationIn,
animationOut: $0.animationOut,
div: $0.div?.applyOptionalItemPatch(patch),
div: $0.div?.applyOptionalItemPatch(patch, callbacks: callbacks),
stateId: $0.stateId,
swipeOutActions: $0.swipeOutActions
)
Expand Down Expand Up @@ -312,6 +338,7 @@ extension DivState {
transitionIn: transitionIn,
transitionOut: transitionOut,
transitionTriggers: transitionTriggers,
variableTriggers: variableTriggers,
variables: variables,
visibility: visibility,
visibilityAction: visibilityAction,
Expand All @@ -322,10 +349,10 @@ extension DivState {
}

extension DivTabs {
fileprivate func applyPatch(_ patch: DivPatch) -> DivTabs {
fileprivate func applyPatch(_ patch: DivPatch, callbacks: DivPatchCallbacks) -> DivTabs {
let patchedItems = items.map {
DivTabs.Item(
div: $0.div.applySingleItemPatch(patch),
div: $0.div.applySingleItemPatch(patch, callbacks: callbacks),
title: $0.title,
titleClickAction: $0.titleClickAction
)
Expand Down Expand Up @@ -366,6 +393,7 @@ extension DivTabs {
transitionIn: transitionIn,
transitionOut: transitionOut,
transitionTriggers: transitionTriggers,
variableTriggers: variableTriggers,
variables: variables,
visibility: visibility,
visibilityAction: visibilityAction,
Expand Down
3 changes: 3 additions & 0 deletions DivKit/Extensions/DivStateExtensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ extension DivState: DivBlockModeling {
let previousState = getPreviousState(stateManagerItem: stateManagerItem),
previousState.stateId != activeStateId,
let previousDiv = previousState.div {
context.triggersStorage?.disableTriggers(path: context.parentPath + id + previousState.stateId)
context.triggersStorage?.enableTriggers(path: context.parentPath + id + activeStateId)

// state changed -> drop visibility cache for all children
context.lastVisibleBoundsCache.dropVisibleBounds(prefix: context.parentPath)
previousBlock = try previousDiv.value.makeBlock(
Expand Down
Loading

0 comments on commit 7016337

Please sign in to comment.