refactored debounce for label/button (has label)

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2023-04-04 08:56:37 -05:00
parent 3f94d7ea0d
commit cf4f145137
3 changed files with 15 additions and 8 deletions

View File

@ -121,7 +121,7 @@ open class ButtonBase: UIButton, Buttonable, Handlerable, ViewProtocol, Resettab
translatesAutoresizingMaskIntoConstraints = false translatesAutoresizingMaskIntoConstraints = false
accessibilityCustomActions = [] accessibilityCustomActions = []
setup() setup()
setupDidChangeEvent() setupDidChangeEvent(true)
updateView() updateView()
} }
} }

View File

@ -94,7 +94,7 @@ public class Label: UILabel, Handlerable, ViewProtocol, Resettable, UserInfoable
accessibilityCustomActions = [] accessibilityCustomActions = []
accessibilityTraits = .staticText accessibilityTraits = .staticText
setup() setup()
setupDidChangeEvent() setupDidChangeEvent(true)
updateView() updateView()
} }
} }

View File

@ -17,15 +17,22 @@ public protocol Handlerable: AnyObject, Initable, Disabling, Surfaceable {
extension Handlerable { extension Handlerable {
public func setupDidChangeEvent() { public func setupDidChangeEvent(_ debounce: Bool = false) {
handlerPublisher().sink { [weak self] _ in handlerPublisher(debounce)
self?.updateView() .sink { [weak self] _ in
self?.updateView()
}.store(in: &subscribers) }.store(in: &subscribers)
} }
public func handlerPublisher() -> AnyPublisher<Void, Never> { public func handlerPublisher(_ debounce: Bool = false) -> AnyPublisher<Void, Never> {
subject if debounce {
.eraseToAnyPublisher() return subject
.debounce(for: .seconds(Constants.StateDebounce), scheduler: RunLoop.main)
.eraseToAnyPublisher()
} else {
return subject
.eraseToAnyPublisher()
}
} }
} }