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