diff --git a/submodules/PremiumUI/Sources/PremiumBoostScreen.swift b/submodules/PremiumUI/Sources/PremiumBoostScreen.swift index fe0338541c..deb9de1c4e 100644 --- a/submodules/PremiumUI/Sources/PremiumBoostScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumBoostScreen.swift @@ -62,7 +62,9 @@ public func PremiumBoostScreen( } let subject: PremiumLimitScreen.Subject = .storiesChannelBoost(peer: peer, isCurrent: isCurrent, level: currentLevel, currentLevelBoosts: currentLevelBoosts, nextLevelBoosts: nextLevelBoosts, link: nil, myBoostCount: myBoostCount) - let nextSubject: PremiumLimitScreen.Subject = .storiesChannelBoost(peer: peer, isCurrent: isCurrent, level: currentLevel, currentLevelBoosts: currentLevelBoosts, nextLevelBoosts: nextLevelBoosts, link: nil, myBoostCount: myBoostCount + 1) + let nextSubject = Promise() + nextSubject.set(.single(.storiesChannelBoost(peer: peer, isCurrent: isCurrent, level: currentLevel, currentLevelBoosts: currentLevelBoosts, nextLevelBoosts: nextLevelBoosts, link: nil, myBoostCount: myBoostCount + 1))) + var nextCount = Int32(status.boosts + 1) var updateImpl: (() -> Void)? @@ -86,7 +88,11 @@ public func PremiumBoostScreen( if let _ = status.nextLevelBoosts { if let availableBoost = availableBoosts.first { let _ = context.engine.peers.applyChannelBoost(peerId: peerId, slots: [availableBoost.slot]).startStandalone() - controller?.updateSubject(nextSubject, count: nextCount) + let _ = (nextSubject.get() + |> take(1) + |> deliverOnMainQueue).startStandalone(next: { nextSubject in + controller?.updateSubject(nextSubject, count: nextCount) + }) availableBoosts.removeFirst() nextCount += 1 diff --git a/submodules/WebUI/Sources/WebAppController.swift b/submodules/WebUI/Sources/WebAppController.swift index f11967ed15..12cd635b1b 100644 --- a/submodules/WebUI/Sources/WebAppController.swift +++ b/submodules/WebUI/Sources/WebAppController.swift @@ -52,14 +52,17 @@ public class WebAppCancelButtonNode: ASDisplayNode { } private let strings: PresentationStrings + private weak var colorSnapshotView: UIView? + public func updateColor(_ color: UIColor?, transition: ContainedViewLayoutTransition) { let previousColor = self.color self.color = color - - if case let .animated(duration, curve) = transition, previousColor != color { + + if case let .animated(duration, curve) = transition, previousColor != color, !self.animatingStateChange { if let snapshotView = self.view.snapshotContentTree() { snapshotView.frame = self.bounds self.view.addSubview(snapshotView) + self.colorSnapshotView = snapshotView snapshotView.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, timingFunction: curve.timingFunction, removeOnCompletion: false, completion: { _ in snapshotView.removeFromSuperview() @@ -125,6 +128,11 @@ public class WebAppCancelButtonNode: ASDisplayNode { } self.state = state + if let colorSnapshotView = self.colorSnapshotView { + self.colorSnapshotView = nil + colorSnapshotView.removeFromSuperview() + } + if animated, let snapshotView = self.buttonNode.view.snapshotContentTree() { self.animatingStateChange = true snapshotView.layer.sublayerTransform = self.buttonNode.subnodeTransform