update subscriber

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-08-09 16:25:37 -05:00
parent 9292ba8e5a
commit 49b3868acc
3 changed files with 25 additions and 52 deletions

View File

@ -13,8 +13,7 @@ import Combine
open class Control<ModelType: Modelable>: UIControl, ModelHandlerable, ViewProtocol, Resettable {
@Published public var model: ModelType
private var cancellables = Set<AnyCancellable>()
private var shouldUpdate: Bool = false
private var cancellable: AnyCancellable?
open func set(with model: ModelType) {
self.model = model
@ -63,23 +62,15 @@ open class Control<ModelType: Modelable>: UIControl, ModelHandlerable, ViewProto
public func initialSetup() {
if !initialSetupPerformed {
initialSetupPerformed = true
//setup shouldUpdate
$model.sink { [weak self] viewModel in
guard let self = self else { return }
let s = self.shouldUpdateView(viewModel: viewModel)
print("shouldUpdate - \(Self.self): \(s)")
self.shouldUpdate = s
}.store(in: &cancellables)
//setup viewUpdate
$model.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in
cancellable = $model.filter { viewModel in
return self.shouldUpdateView(viewModel: viewModel)
}.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in
guard let self = self else { return }
if self.shouldUpdate {
self.updateView(viewModel: viewModel)
self.shouldUpdate = false
print("didUpdate - \(Self.self)")
}
}.store(in: &cancellables)
self.updateView(viewModel: viewModel)
print("didUpdate - \(Self.self)")
}
setup()
}
}

View File

@ -13,8 +13,7 @@ import Combine
open class View<ModelType: Modelable>: UIView, ModelHandlerable, ViewProtocol, Resettable {
@Published public var model: ModelType
private var cancellables = Set<AnyCancellable>()
private var shouldUpdate: Bool = false
private var cancellable: AnyCancellable?
open func set(with model: ModelType) {
self.model = model
@ -62,24 +61,15 @@ open class View<ModelType: Modelable>: UIView, ModelHandlerable, ViewProtocol, R
public func initialSetup() {
if !initialSetupPerformed {
initialSetupPerformed = true
//setup shouldUpdate
$model.sink { [weak self] viewModel in
guard let self = self else { return }
let s = self.shouldUpdateView(viewModel: viewModel)
print("shouldUpdate - \(Self.self): \(s)")
self.shouldUpdate = s
}.store(in: &cancellables)
//setup viewUpdate
$model.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in
cancellable = $model.filter { viewModel in
return self.shouldUpdateView(viewModel: viewModel)
}.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in
guard let self = self else { return }
if self.shouldUpdate {
self.updateView(viewModel: viewModel)
self.shouldUpdate = false
print("didUpdate - \(Self.self)")
}
}.store(in: &cancellables)
self.updateView(viewModel: viewModel)
print("didUpdate - \(Self.self)")
}
setup()
}
}

View File

@ -18,8 +18,7 @@ open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, Initable
// MARK: - Combine Properties
//--------------------------------------------------
@Published public var model: ModelType
private var cancellables = Set<AnyCancellable>()
private var shouldUpdate: Bool = false
private var cancellable: AnyCancellable?
//--------------------------------------------------
// MARK: - Properties
@ -95,23 +94,16 @@ open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, Initable
translatesAutoresizingMaskIntoConstraints = false
accessibilityCustomActions = []
accessibilityTraits = .staticText
//setup shouldUpdate
$model.sink { [weak self] viewModel in
guard let self = self else { return }
self.shouldUpdate = self.shouldUpdateView(viewModel: viewModel)
print("shouldUpdate - \(Self.self): \(self.shouldUpdate)")
}.store(in: &cancellables)
//setup viewUpdate
$model.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in
cancellable = $model.filter { viewModel in
return self.shouldUpdateView(viewModel: viewModel)
}.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] viewModel in
guard let self = self else { return }
if self.shouldUpdate {
self.updateView(viewModel: viewModel)
self.shouldUpdate = false
print("didUpdate - \(Self.self)")
}
}.store(in: &cancellables)
self.updateView(viewModel: viewModel)
print("didUpdate - \(Self.self)")
}
}
public func reset() {