Fix reaction search bar click through

This commit is contained in:
Isaac 2024-08-06 15:58:09 +04:00
parent 8069dfa73a
commit 3cb03a9666
2 changed files with 31 additions and 7 deletions

View File

@ -217,7 +217,7 @@ public final class EmojiSearchHeaderView: UIView, UITextFieldDelegate {
if let textField = self.textField, let text = textField.text, text.isEmpty { if let textField = self.textField, let text = textField.text, text.isEmpty {
if self.bounds.contains(point), let placeholderContentView = self.placeholderContent.view as? EmojiSearchSearchBarComponent.View { if self.bounds.contains(point), let placeholderContentView = self.placeholderContent.view as? EmojiSearchSearchBarComponent.View {
let leftTextPosition = placeholderContentView.leftTextPosition() let leftTextPosition = placeholderContentView.leftTextPosition()
if point.x >= 0.0 && point.x <= placeholderContentView.frame.minX + leftTextPosition { if point.x >= placeholderContentView.frame.minX + leftTextPosition {
if let result = placeholderContentView.hitTest(self.convert(point, to: placeholderContentView), with: event) { if let result = placeholderContentView.hitTest(self.convert(point, to: placeholderContentView), with: event) {
return result return result
} }
@ -278,9 +278,6 @@ public final class EmojiSearchHeaderView: UIView, UITextFieldDelegate {
textField.resignFirstResponder() textField.resignFirstResponder()
textField.removeFromSuperview() textField.removeFromSuperview()
} }
/*self.tintTextView.view?.isHidden = false
self.textView.view?.isHidden = false*/
} }
@objc private func clearPressed() { @objc private func clearPressed() {
@ -519,8 +516,20 @@ public final class EmojiSearchHeaderView: UIView, UITextFieldDelegate {
if let term { if let term {
self.update(transition: ComponentTransition(animation: .curve(duration: 0.4, curve: .spring))) self.update(transition: ComponentTransition(animation: .curve(duration: 0.4, curve: .spring)))
let textField = self.textField
self.textField = nil
self.clearIconView.isHidden = true
self.clearIconTintView.isHidden = true
self.clearIconButton.isHidden = true
self.updateQuery(.category(value: term)) self.updateQuery(.category(value: term))
self.activated(false) self.activated(false)
if let textField {
textField.resignFirstResponder()
textField.removeFromSuperview()
}
} else { } else {
self.deactivated(self.textField?.isFirstResponder ?? false) self.deactivated(self.textField?.isFirstResponder ?? false)
self.updateQuery(nil) self.updateQuery(nil)

View File

@ -267,6 +267,8 @@ final class EmojiSearchSearchBarComponent: Component {
private var highlightedItem: AnyHashable? private var highlightedItem: AnyHashable?
private var selectedItem: AnyHashable? private var selectedItem: AnyHashable?
private var disableInteraction: Bool = false
private lazy var hapticFeedback: HapticFeedback = { private lazy var hapticFeedback: HapticFeedback = {
return HapticFeedback() return HapticFeedback()
}() }()
@ -421,10 +423,16 @@ final class EmojiSearchSearchBarComponent: Component {
} }
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard let component = self.component else { if self.disableInteraction {
for (_, itemView) in self.visibleItemViews {
if let itemComponentView = itemView.view.view {
if itemComponentView.bounds.contains(self.convert(point, to: itemComponentView)) {
return self
}
}
}
return nil return nil
} }
let _ = component
return super.hitTest(point, with: event) return super.hitTest(point, with: event)
} }
@ -714,10 +722,17 @@ final class EmojiSearchSearchBarComponent: Component {
switch component.textInputState { switch component.textInputState {
case let .active(hasText): case let .active(hasText):
self.isUserInteractionEnabled = false if hasText {
self.disableInteraction = false
self.isUserInteractionEnabled = false
} else {
self.disableInteraction = true
self.isUserInteractionEnabled = true
}
self.textView.view?.isHidden = hasText self.textView.view?.isHidden = hasText
self.tintTextView.view?.isHidden = hasText self.tintTextView.view?.isHidden = hasText
case .inactive: case .inactive:
self.disableInteraction = false
self.isUserInteractionEnabled = true self.isUserInteractionEnabled = true
self.textView.view?.isHidden = false self.textView.view?.isHidden = false
self.tintTextView.view?.isHidden = false self.tintTextView.view?.isHidden = false