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
accessibilityCustomActions = []
setup()
setupDidChangeEvent()
setupDidChangeEvent(true)
updateView()
}
}

View File

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

View File

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