d
This commit is contained in:
35
Modules/BusX/BusUI/src/BusUI.ManyButton.swift
Normal file
35
Modules/BusX/BusUI/src/BusUI.ManyButton.swift
Normal file
@@ -0,0 +1,35 @@
|
||||
import Combine
|
||||
|
||||
extension BusUI {
|
||||
public final class ManyButton: ObservableObject {
|
||||
let key: String
|
||||
public let v = PassthroughSubject<Void, Never>()
|
||||
@Published public var id: String?
|
||||
var sub = [AnyCancellable]()
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
public init(_ key: String) {
|
||||
self.key = key
|
||||
|
||||
$id
|
||||
.sink { [weak self] id in self?.setup(id) }
|
||||
.store(in: &sub)
|
||||
}
|
||||
|
||||
private func setup(_ id: String?) {
|
||||
subscriptions = []
|
||||
|
||||
Bus.sendSync(
|
||||
key,
|
||||
v
|
||||
.compactMap { v -> Any? in
|
||||
guard let id else { return nil }
|
||||
var d = [String: Bool]()
|
||||
return MPAK.Many([id], d)
|
||||
}
|
||||
.eraseToAnyPublisher(),
|
||||
&subscriptions
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user