mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-21 10:41:12 +00:00
Merge commit 'df3eab0a744ca9469cd88d0cd79b150d98132f96'
This commit is contained in:
commit
dee385f501
@ -232,6 +232,10 @@ final class ComposePollScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func item(at point: CGPoint) -> (AnyHashable, ComponentView<Empty>)? {
|
private func item(at point: CGPoint) -> (AnyHashable, ComponentView<Empty>)? {
|
||||||
|
if self.scrollView.isTracking || self.scrollView.isDecelerating {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
let localPoint = self.pollOptionsSectionContainer.convert(point, from: self)
|
let localPoint = self.pollOptionsSectionContainer.convert(point, from: self)
|
||||||
for (id, itemView) in self.pollOptionsSectionContainer.itemViews {
|
for (id, itemView) in self.pollOptionsSectionContainer.itemViews {
|
||||||
if let view = itemView.contents.view as? ListComposePollOptionComponent.View, !view.isRevealed && !view.currentText.isEmpty {
|
if let view = itemView.contents.view as? ListComposePollOptionComponent.View, !view.isRevealed && !view.currentText.isEmpty {
|
||||||
@ -447,6 +451,10 @@ final class ComposePollScreenComponent: Component {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
||||||
|
self.endEditing(true)
|
||||||
|
}
|
||||||
|
|
||||||
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||||
if !self.ignoreScrolling {
|
if !self.ignoreScrolling {
|
||||||
self.updateScrolling(transition: .immediate)
|
self.updateScrolling(transition: .immediate)
|
||||||
|
@ -180,6 +180,10 @@ final class ComposeTodoScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func item(at point: CGPoint) -> (AnyHashable, ComponentView<Empty>)? {
|
private func item(at point: CGPoint) -> (AnyHashable, ComponentView<Empty>)? {
|
||||||
|
if self.scrollView.isTracking || self.scrollView.isDecelerating {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
let localPoint = self.todoItemsSectionContainer.convert(point, from: self)
|
let localPoint = self.todoItemsSectionContainer.convert(point, from: self)
|
||||||
for (id, itemView) in self.todoItemsSectionContainer.itemViews {
|
for (id, itemView) in self.todoItemsSectionContainer.itemViews {
|
||||||
if let view = itemView.contents.view as? ListComposePollOptionComponent.View, !view.isRevealed && !view.currentText.isEmpty {
|
if let view = itemView.contents.view as? ListComposePollOptionComponent.View, !view.isRevealed && !view.currentText.isEmpty {
|
||||||
@ -371,6 +375,10 @@ final class ComposeTodoScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
||||||
|
self.endEditing(true)
|
||||||
|
}
|
||||||
|
|
||||||
private func updateScrolling(transition: ComponentTransition) {
|
private func updateScrolling(transition: ComponentTransition) {
|
||||||
let navigationAlphaDistance: CGFloat = 16.0
|
let navigationAlphaDistance: CGFloat = 16.0
|
||||||
let navigationAlpha: CGFloat = max(0.0, min(1.0, self.scrollView.contentOffset.y / navigationAlphaDistance))
|
let navigationAlpha: CGFloat = max(0.0, min(1.0, self.scrollView.contentOffset.y / navigationAlphaDistance))
|
||||||
@ -928,11 +936,17 @@ final class ComposeTodoScreenComponent: Component {
|
|||||||
if case let .text(text) = data {
|
if case let .text(text) = data {
|
||||||
let lines = text.string.components(separatedBy: "\n")
|
let lines = text.string.components(separatedBy: "\n")
|
||||||
if !lines.isEmpty {
|
if !lines.isEmpty {
|
||||||
|
self.endEditing(true)
|
||||||
var i = 0
|
var i = 0
|
||||||
for line in lines {
|
for line in lines {
|
||||||
|
if line.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
let line = String(line.prefix(component.initialData.maxTodoItemLength))
|
||||||
if i < self.todoItems.count {
|
if i < self.todoItems.count {
|
||||||
self.todoItems[i].resetText = NSAttributedString(string: line)
|
self.todoItems[i].resetText = NSAttributedString(string: line)
|
||||||
} else {
|
} else {
|
||||||
|
if self.todoItems.count < component.initialData.maxTodoItemsCount {
|
||||||
let todoItem = ComposeTodoScreenComponent.TodoItem(
|
let todoItem = ComposeTodoScreenComponent.TodoItem(
|
||||||
id: self.nextTodoItemId
|
id: self.nextTodoItemId
|
||||||
)
|
)
|
||||||
@ -940,6 +954,7 @@ final class ComposeTodoScreenComponent: Component {
|
|||||||
self.todoItems.append(todoItem)
|
self.todoItems.append(todoItem)
|
||||||
self.nextTodoItemId += 1
|
self.nextTodoItemId += 1
|
||||||
}
|
}
|
||||||
|
}
|
||||||
i += 1
|
i += 1
|
||||||
}
|
}
|
||||||
self.state?.updated()
|
self.state?.updated()
|
||||||
|
@ -66,14 +66,13 @@ extension ChatControllerImpl {
|
|||||||
items.append(.separator)
|
items.append(.separator)
|
||||||
|
|
||||||
if canMark {
|
if canMark {
|
||||||
items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.Chat_Todo_ContextMenu_UncheckTask, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Clear"), color: theme.contextMenu.primaryColor) }, action: { [weak self] _, f in
|
items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.Chat_Todo_ContextMenu_UncheckTask, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Clear"), color: theme.contextMenu.primaryColor) }, action: { [weak self] c, f in
|
||||||
f(.default)
|
|
||||||
|
|
||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.context.isPremium {
|
if !self.context.isPremium {
|
||||||
|
f(.default)
|
||||||
let controller = UndoOverlayController(
|
let controller = UndoOverlayController(
|
||||||
presentationData: self.presentationData,
|
presentationData: self.presentationData,
|
||||||
content: .premiumPaywall(title: nil, text: self.presentationData.strings.Chat_Todo_PremiumRequired, customUndoText: nil, timeout: nil, linkAction: nil),
|
content: .premiumPaywall(title: nil, text: self.presentationData.strings.Chat_Todo_PremiumRequired, customUndoText: nil, timeout: nil, linkAction: nil),
|
||||||
@ -89,21 +88,22 @@ extension ChatControllerImpl {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.present(controller, in: .current)
|
self.present(controller, in: .current)
|
||||||
}
|
} else {
|
||||||
|
c?.dismiss(completion: {
|
||||||
let _ = self.context.engine.messages.requestUpdateTodoMessageItems(messageId: message.id, completedIds: [], incompletedIds: [todoItemId]).start()
|
let _ = self.context.engine.messages.requestUpdateTodoMessageItems(messageId: message.id, completedIds: [], incompletedIds: [todoItemId]).start()
|
||||||
|
})
|
||||||
|
}
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if canMark {
|
if canMark {
|
||||||
items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.Chat_Todo_ContextMenu_CheckTask, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Select"), color: theme.contextMenu.primaryColor) }, action: { [weak self] _, f in
|
items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.Chat_Todo_ContextMenu_CheckTask, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Select"), color: theme.contextMenu.primaryColor) }, action: { [weak self] c, f in
|
||||||
f(.default)
|
|
||||||
|
|
||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.context.isPremium {
|
if !self.context.isPremium {
|
||||||
|
f(.default)
|
||||||
let controller = UndoOverlayController(
|
let controller = UndoOverlayController(
|
||||||
presentationData: self.presentationData,
|
presentationData: self.presentationData,
|
||||||
content: .premiumPaywall(title: nil, text: self.presentationData.strings.Chat_Todo_PremiumRequired, customUndoText: nil, timeout: nil, linkAction: nil),
|
content: .premiumPaywall(title: nil, text: self.presentationData.strings.Chat_Todo_PremiumRequired, customUndoText: nil, timeout: nil, linkAction: nil),
|
||||||
@ -119,9 +119,11 @@ extension ChatControllerImpl {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.present(controller, in: .current)
|
self.present(controller, in: .current)
|
||||||
}
|
} else {
|
||||||
|
c?.dismiss(completion: {
|
||||||
let _ = self.context.engine.messages.requestUpdateTodoMessageItems(messageId: message.id, completedIds: [todoItemId], incompletedIds: []).start()
|
let _ = self.context.engine.messages.requestUpdateTodoMessageItems(messageId: message.id, completedIds: [todoItemId], incompletedIds: []).start()
|
||||||
|
})
|
||||||
|
}
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user