Compare commits

16 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
Михаил Капелько
f4bb4e50e3 d 2024-01-06 18:43:44 +03:00
Михаил Капелько
a018cbee59 d 2024-01-06 18:41:12 +03:00
Михаил Капелько
676ec75bef d 2024-01-06 18:40:23 +03:00
Михаил Капелько
f11dde1c8e d 2024-01-06 18:38:19 +03:00
Михаил Капелько
676a1ada17 d 2024-01-06 18:35:45 +03:00
Михаил Капелько
f3807b76f6 d 2024-01-06 18:31:59 +03:00
Михаил Капелько
56512ca26a d 2024-01-06 18:22:22 +03:00
Михаил Капелько
a5de0484fd d 2024-01-06 17:59:47 +03:00
Михаил Капелько
f838021562 d 2024-01-06 17:59:15 +03:00
Михаил Капелько
752b34b95d d 2024-01-06 17:55:56 +03:00
12 changed files with 145 additions and 19 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

@@ -0,0 +1,8 @@
extension MPAK {
public struct Many<T> {
public var keys = Set<String>()
public var dict = [String: T]()
public init() { }
}
}

View File

@@ -0,0 +1,10 @@
extension MPAK {
public struct Recent<T> {
public var isRecent = false
public var value: T
public init(_ value: T) {
self.value = value
}
}
}

View File

@@ -1,10 +1 @@
public enum MPAK {
public struct Recent<T> {
public var isRecent = false
public var value: T
public init(_ value: T) {
self.value = value
}
}
}
public enum MPAK { }

View File

@@ -47,12 +47,14 @@ extension MeetupId {
let ctrl = Controller()
let world: World
var any = [Any]()
var subscriptions = [AnyCancellable]()
static private(set) weak var singleton: Service?
public init(_ world: World) {
self.world = world
Self.singleton = self
SectionBus.setupService(ctrl, self, world)
SectionGenerated.setupPlatform(ctrl, self, world)
}
}

View File

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

View File

@@ -0,0 +1,18 @@
import BusX
extension MeetupId {
enum SectionBus {
static func setupService(
_ ctrl: Controller,
_ service: Service,
_ world: World
) {
service.any.append(contentsOf: [
Bus.Debounce(shouldResetText, 0.2, K.M, K.textApp),
Bus.Delay(shouldFinishLoading, 5, K.M, K.finishLoading),
Bus.Sync(shouldEnableJoin, K.M, K.isJoinAvailable),
Bus.Sync(shouldResetLoading, K.M, K.isLoading)
])
}
}
}

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

@@ -7,15 +7,8 @@ extension MeetupId {
@StateObject var isLoading = BusUI.Value(K.isLoading, false)
@StateObject var join = BusUI.Button(K.join)
@StateObject var textField = BusUI.TextField(K.textApp, K.textUI)
let processors: [Any]
public init() {
processors = [
Bus.Debounce(shouldResetText, 0.2, K.M, K.textApp),
Bus.Delay(shouldFinishLoading, 5, K.M, K.finishLoading),
Bus.Sync(shouldEnableJoin, K.M, K.isJoinAvailable),
Bus.Sync(shouldResetLoading, K.M, K.isLoading)
]
}
public var body: some View {

View File

@@ -36,6 +36,7 @@ extension %MODULE% {
let ctrl = Controller()
let world: World
%SERVICE_CORE%
var any = [Any]()
var subscriptions = [AnyCancellable]()
static private(set) weak var singleton: Service?

View File

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