@@ -1,11 +1,6 @@ | |||||
import Foundation | import Foundation | ||||
public extension MeetupId { | public extension MeetupId { | ||||
static func finishLoading(_ isLoading: Bool) -> Bool? { | |||||
guard isLoading else { return nil } | |||||
return true | |||||
} | |||||
static func formatId(_ s: String) -> String? { | static func formatId(_ s: String) -> String? { | ||||
let digits = s.components(separatedBy: NSCharacterSet.decimalDigits.inverted).reduce("") { $0 + $1 } | let digits = s.components(separatedBy: NSCharacterSet.decimalDigits.inverted).reduce("") { $0 + $1 } | ||||
var r = "" | var r = "" | ||||
@@ -25,6 +25,16 @@ public extension MeetupId { | |||||
return nil | return nil | ||||
} | } | ||||
static func shouldFinishLoading(_ c: MeetupIdContext) -> Bool? { | |||||
guard | |||||
c.isLoading.isRecent, | |||||
c.isLoading.value | |||||
else { | |||||
return nil | |||||
} | |||||
return true | |||||
} | |||||
static func shouldResetLoading(_ c: MeetupIdContext) -> Bool? { | static func shouldResetLoading(_ c: MeetupIdContext) -> Bool? { | ||||
if | if | ||||
c.join, | c.join, | ||||
@@ -42,4 +52,9 @@ public extension MeetupId { | |||||
return nil | return nil | ||||
} | } | ||||
static func shouldResetText(_ c: MeetupIdContext) -> String? { | |||||
guard c.textUI.isRecent else { return nil } | |||||
return formatId(c.textUI.value) | |||||
} | |||||
} | } |
@@ -7,14 +7,16 @@ extension MeetupId { | |||||
@StateObject var isLoading = BusUI.Value(K.isLoading, false) | @StateObject var isLoading = BusUI.Value(K.isLoading, false) | ||||
@StateObject var join = BusUI.Button(K.join) | @StateObject var join = BusUI.Button(K.join) | ||||
@StateObject var textField = BusUI.TextField(K.textApp, K.textUI) | @StateObject var textField = BusUI.TextField(K.textApp, K.textUI) | ||||
let processors: [Any] = [ | |||||
Bus.Debounce(formatId, 0.2, K.textUI, K.textApp), | |||||
Bus.Delay(finishLoading, 5, K.isLoading, K.finishLoading), | |||||
Bus.Sync(shouldEnableJoin, K.M, K.isJoinAvailable), | |||||
Bus.Sync(shouldResetLoading, K.M, K.isLoading) | |||||
] | |||||
let processors: [Any] | |||||
public init() { } | |||||
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 { | public var body: some View { | ||||
VStack(spacing: 8) { | VStack(spacing: 8) { | ||||