Merge commit '48a6568df0e78649100a6be058d089e1992e6acd'

This commit is contained in:
Ali 2023-10-24 14:53:03 +04:00
commit db38904254
4 changed files with 64 additions and 49 deletions

View File

@ -802,6 +802,64 @@ open class ItemListControllerNode: ASDisplayNode {
self.toolbarItem = transition.toolbarItem
}
var updateFooterItem = false
if let footerItem = self.footerItem, let updatedFooterItem = transition.footerItem {
updateFooterItem = !footerItem.isEqual(to: updatedFooterItem)
} else if (self.footerItem != nil) != (transition.footerItem != nil) {
updateFooterItem = true
}
if updateFooterItem {
let hadFooter = self.footerItem != nil
self.footerItem = transition.footerItem
if let footerItem = transition.footerItem {
let updatedNode = footerItem.node(current: self.footerItemNode)
if let footerItemNode = self.footerItemNode, updatedNode !== footerItemNode {
footerItemNode.removeFromSupernode()
}
if self.footerItemNode !== updatedNode {
self.footerItemNode = updatedNode
let footerHeight: CGFloat
if let validLayout = self.validLayout {
footerHeight = updatedNode.updateLayout(layout: validLayout.0, transition: .immediate)
} else {
footerHeight = 100.0
}
self.addSubnode(updatedNode)
if !hadFooter && !transition.firstTime {
updatedNode.layer.animatePosition(from: CGPoint(x: 0.0, y: footerHeight), to: .zero, duration: 0.25, additive: true)
}
if !hadFooter, let (layout, navigationBarHeight, _) = self.validLayout {
var insets = layout.insets(options: [.input])
insets.top += navigationBarHeight
insets.bottom = footerHeight
let inset = max(16.0, floor((layout.size.width - 674.0) / 2.0))
if layout.size.width >= 375.0 {
insets.left += inset
insets.right += inset
}
let (duration, curve) = listViewAnimationDurationAndCurve(transition: .immediate)
self.listNode.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: [.Synchronous, .LowLatency], scrollToItem: nil, updateSizeAndInsets: ListViewUpdateSizeAndInsets(size: layout.size, insets: insets, duration: duration, curve: curve), stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in })
}
}
} else if let footerItemNode = self.footerItemNode {
let footerHeight: CGFloat
if let validLayout = self.validLayout {
footerHeight = footerItemNode.updateLayout(layout: validLayout.0, transition: .immediate)
} else {
footerHeight = 100.0
}
footerItemNode.layer.animatePosition(from: .zero, to: CGPoint(x: 0.0, y: footerHeight), duration: 0.25, removeOnCompletion: false, additive: true, completion: { [weak footerItemNode] _ in
footerItemNode?.removeFromSupernode()
})
self.footerItemNode = nil
}
}
self.listNode.transaction(deleteIndices: transition.entries.deletions, insertIndicesAndItems: transition.entries.insertions, updateIndicesAndItems: transition.entries.updates, options: options, scrollToItem: scrollToItem, updateOpaqueState: ItemListNodeOpaqueState(mergedEntries: transition.mergedEntries), completion: { [weak self] _ in
if let strongSelf = self {
if !strongSelf.didSetReady {
@ -924,48 +982,6 @@ open class ItemListControllerNode: ASDisplayNode {
self.headerItemNode = nil
}
}
var updateFooterItem = false
if let footerItem = self.footerItem, let updatedFooterItem = transition.footerItem {
updateFooterItem = !footerItem.isEqual(to: updatedFooterItem)
} else if (self.footerItem != nil) != (transition.footerItem != nil) {
updateFooterItem = true
}
if updateFooterItem {
let hadFooter = self.footerItem != nil
self.footerItem = transition.footerItem
if let footerItem = transition.footerItem {
let updatedNode = footerItem.node(current: self.footerItemNode)
if let footerItemNode = self.footerItemNode, updatedNode !== footerItemNode {
footerItemNode.removeFromSupernode()
}
if self.footerItemNode !== updatedNode {
self.footerItemNode = updatedNode
let footerHeight: CGFloat
if let validLayout = self.validLayout {
footerHeight = updatedNode.updateLayout(layout: validLayout.0, transition: .immediate)
} else {
footerHeight = 100.0
}
self.addSubnode(updatedNode)
if !hadFooter && !transition.firstTime {
updatedNode.layer.animatePosition(from: CGPoint(x: 0.0, y: footerHeight), to: .zero, duration: 0.25, additive: true)
}
}
} else if let footerItemNode = self.footerItemNode {
let footerHeight: CGFloat
if let validLayout = self.validLayout {
footerHeight = footerItemNode.updateLayout(layout: validLayout.0, transition: .immediate)
} else {
footerHeight = 100.0
}
footerItemNode.layer.animatePosition(from: .zero, to: CGPoint(x: 0.0, y: footerHeight), duration: 0.25, removeOnCompletion: false, additive: true, completion: { [weak footerItemNode] _ in
footerItemNode?.removeFromSupernode()
})
self.footerItemNode = nil
}
}
self.listNode.scrollEnabled = transition.scrollEnabled
if updateSearchItem {

View File

@ -123,7 +123,7 @@ final class EmojiPickerItemNode: ListViewItemNode {
if let snapshot = strongSelf.view.snapshotView(afterScreenUpdates: false) {
snapshot.frame = CGRect(origin: CGPoint(x: 0.0, y: -insets.top), size: snapshot.frame.size)
strongSelf.view.addSubview(snapshot)
snapshot.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { _ in
snapshot.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, delay: 0.25, removeOnCompletion: false, completion: { _ in
snapshot.removeFromSuperview()
})
}

View File

@ -261,7 +261,7 @@ final class PeerNameColorChatPreviewItemNode: ListViewItemNode {
if let snapshot = strongSelf.view.snapshotView(afterScreenUpdates: false) {
snapshot.frame = CGRect(origin: CGPoint(x: 0.0, y: -insets.top), size: snapshot.frame.size)
strongSelf.view.addSubview(snapshot)
snapshot.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, delay: 0.1, removeOnCompletion: false, completion: { _ in
snapshot.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, delay: 0.25, removeOnCompletion: false, completion: { _ in
snapshot.removeFromSuperview()
})
}

View File

@ -318,7 +318,7 @@ public func PeerNameColorScreen(
statePromise.get(),
context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId))
)
|> mapToSignal { state, peer -> Signal<EmojiPagerContentComponent?, NoError> in
|> mapToSignal { state, peer -> Signal<EmojiPagerContentComponent, NoError> in
var selectedEmojiId: Int64?
if let updatedBackgroundEmojiId = state.updatedBackgroundEmojiId {
selectedEmojiId = updatedBackgroundEmojiId
@ -353,7 +353,6 @@ public func PeerNameColorScreen(
selectedItems: Set(selectedItems),
backgroundIconColor: nameColor
)
|> map(Optional.init)
}
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
@ -361,8 +360,8 @@ public func PeerNameColorScreen(
presentationData,
statePromise.get(),
context.engine.stickers.availableReactions(),
context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId)),
.single(nil) |> then(emojiContent)
context.engine.data.subscribe(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId)),
emojiContent
)
|> deliverOnMainQueue
|> map { presentationData, state, availableReactions, peer, emojiContent -> (ItemListControllerState, (ItemListNodeState, Any)) in
@ -478,7 +477,7 @@ public func PeerNameColorScreen(
}
)
emojiContent?.inputInteractionHolder.inputInteraction = EmojiPagerContentComponent.InputInteraction(
emojiContent.inputInteractionHolder.inputInteraction = EmojiPagerContentComponent.InputInteraction(
performItemAction: { _, item, _, _, _, _ in
var selectedFileId: Int64?
if let fileId = item.itemFile?.fileId.id {