Compare commits

..

6 Commits

Author SHA1 Message Date
Михаил Капелько
cfe804522f d 2024-01-08 15:01:02 +03:00
Михаил Капелько
1f501d8276 d 2024-01-08 10:14:18 +03:00
Михаил Капелько
de42152b9f d 2024-01-08 10:09:32 +03:00
Михаил Капелько
c3265592a7 d 2024-01-08 10:05:59 +03:00
Михаил Капелько
895f74440b d 2024-01-08 09:50:08 +03:00
Михаил Капелько
af7ddfa161 d 2024-01-08 09:40:36 +03:00
5 changed files with 105 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
import Combine
import SwiftUI
extension BusUI {
public final class ManyTextField: ObservableObject {
let textApp: String
let textUI: String
@Published public var id: String?
@Published public var v = "a:"
var subscriptions = [AnyCancellable]()
var sub = [AnyCancellable]()
public init(
_ textApp: String,
_ textUI: String
) {
self.textApp = textApp
self.textUI = textUI
/**///print("ИГР BusUTF(\(Unmanaged.passUnretained(self).toOpaque())).init textA/textU: '\(textApp)'/'\(textUI)'")
$id
.sink { [weak self] v in self?.setup(v) }
.store(in: &sub)
}
private func setup(_ id: String?) {
/**/print("ИГР BusUTF(\(Unmanaged.passUnretained(self).toOpaque())).setup id: '\(id)'")
subscriptions = []
Bus.sendSync(
textUI,
$v
.removeDuplicates()
.compactMap(onlyUIText)
.compactMap { v in
if let id {
return "\(id):\(v)"
}
return v
}
.eraseToAnyPublisher(),
&subscriptions
)
Bus.receiveSync(
[textApp],
{ [weak self] (_, v: String) in self?.v = "a:\(v)" },
&subscriptions
)
}
}
}

View File

@@ -7,6 +7,9 @@ public extension MeetupId {
static let M = "MeetupId" static let M = "MeetupId"
static let textApp = "MeetupId.textApp" static let textApp = "MeetupId.textApp"
static let textUI = "MeetupId.textUI" static let textUI = "MeetupId.textUI"
static let testTextApp = "MeetupId.testTextApp"
static let testTextUI = "MeetupId.testTextUI"
} }
} }

View File

@@ -0,0 +1,27 @@
import BusX
import SwiftUI
extension MeetupId {
public struct TV: View {
let id: String
@StateObject var vm = VM()
public init(_ id: String) {
self.id = id
}
public var body: some View {
TextField("TV", value: $vm.textField.v, formatter: BusUI.TextFieldSource())
.padding(8)
.border(Color.blue)
.animation(.easeInOut(duration: 0.3))
.onAppear {
vm.setup(id)
}
.onChange(of: id) { newValue in
vm.setup(newValue)
}
}
}
}

View File

@@ -0,0 +1,18 @@
import BusX
import Combine
extension MeetupId {
public final class VM: ObservableObject {
@Published public var id: String?
@Published var textField = BusUI.TextField(K.testTextApp, K.testTextUI)
var subscriptions = [AnyCancellable]()
public init() { }
public func setup(_ id: String) {
/**/print("ИГР MeetupIV(\(Unmanaged.passUnretained(self).toOpaque())).setup id: '\(id)'")
textField.id = id
}
}
}

View File

@@ -4,8 +4,10 @@ import UIKit
struct Content: View { struct Content: View {
var body: some View { var body: some View {
MeetupId.V() //MeetupId.V()
MeetupId.TV("uuid-1")
Divider() Divider()
MeetupId.TV("uuid-2")
} }
} }