155 строки
3.2 KiB
Swift
155 строки
3.2 KiB
Swift
// ВНИМАНИЕ Сгенерировано автоматом из файла MeetupId.yml
|
|
// ВНИМАНИЕ Не менять руками!
|
|
|
|
import AELog
|
|
import BusX
|
|
import Combine
|
|
import CordX
|
|
import Foundation
|
|
import MPAKX
|
|
import UIKit
|
|
|
|
// MARK: - Context
|
|
|
|
public protocol MeetupIdContext {
|
|
var finishLoading: Bool { get }
|
|
var isLoading: MPAK.Recent<Bool> { get }
|
|
var join: Bool { get }
|
|
var textUI: MPAK.Recent<String> { get }
|
|
}
|
|
|
|
// MARK: - Controller
|
|
|
|
extension MeetupId {
|
|
final class Controller: MPAK.Controller<MeetupId.Model> {
|
|
init() {
|
|
super.init(
|
|
MeetupId.Model(),
|
|
debugClassName: "MeetupICtrl",
|
|
debugLog: { aelog($0) }
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// MARK: - Model
|
|
|
|
public struct Model: MeetupIdContext {
|
|
public var finishLoading: Bool = false
|
|
public var isLoading: MPAK.Recent<Bool> = .init(false)
|
|
public var join: Bool = false
|
|
public var textUI: MPAK.Recent<String> = .init("")
|
|
}
|
|
|
|
// MARK: - Service
|
|
|
|
public final class Service {
|
|
let ctrl = Controller()
|
|
let world: World
|
|
|
|
var subscriptions = [AnyCancellable]()
|
|
static private(set) weak var singleton: Service?
|
|
|
|
public init(_ world: World) {
|
|
self.world = world
|
|
Self.singleton = self
|
|
SectionGenerated.setupPlatform(ctrl, self, world)
|
|
}
|
|
}
|
|
|
|
// MARK: - World
|
|
|
|
public struct World {
|
|
let join = PassthroughSubject<Void, Never>()
|
|
let textUI = PassthroughSubject<String, Never>()
|
|
|
|
public init(
|
|
|
|
) {
|
|
|
|
}
|
|
}
|
|
|
|
enum SectionGenerated {
|
|
|
|
|
|
|
|
// MARK: - SectionGenerated Service
|
|
|
|
static func setupPlatform(
|
|
_ ctrl: Controller,
|
|
_ service: Service,
|
|
_ world: World
|
|
) {
|
|
// MARK: - SectionGenerated Service Actions
|
|
|
|
ctrl.m
|
|
.sink { v in Bus.send("MeetupId", v) }
|
|
.store(in: &service.subscriptions)
|
|
ctrl.m
|
|
.compactMap { shouldResetLoading($0) }
|
|
.sink { v in Bus.send(K.isLoading, v) }
|
|
.store(in: &service.subscriptions)
|
|
|
|
|
|
// MARK: - SectionGenerated Service Pipes
|
|
|
|
ctrl.pipe(
|
|
dbg: "finishL",
|
|
sub: nil,
|
|
Bus.events.compactMap { Bus.convertKeyValue(K.finishLoading, $0) }.map { (k: String, v: Void) in v }.eraseToAnyPublisher(),
|
|
{ $0.finishLoading = true },
|
|
{ $0.finishLoading = false }
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ctrl.pipeValue(
|
|
dbg: "isL",
|
|
sub: nil,
|
|
Bus.events.compactMap { Bus.convertKeyValue(K.isLoading, $0) }.map { (k: String, v: Bool) in v }.eraseToAnyPublisher(),
|
|
{
|
|
$0.isLoading.value = $1
|
|
$0.isLoading.isRecent = true
|
|
},
|
|
{ m, _ in m.isLoading.isRecent = false }
|
|
)
|
|
|
|
|
|
|
|
ctrl.pipe(
|
|
dbg: "join",
|
|
sub: nil,
|
|
Bus.events.compactMap { Bus.convertKeyValue(K.join, $0) }.map { (k: String, v: Void) in v }.eraseToAnyPublisher(),
|
|
{ $0.join = true },
|
|
{ $0.join = false }
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ctrl.pipeValue(
|
|
dbg: "textUI",
|
|
sub: nil,
|
|
Bus.events.compactMap { Bus.convertKeyValue(K.textUI, $0) }.map { (k: String, v: String) in v }.eraseToAnyPublisher(),
|
|
{
|
|
$0.textUI.value = $1
|
|
$0.textUI.isRecent = true
|
|
},
|
|
{ m, _ in m.textUI.isRecent = false }
|
|
)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|