Skip to content

Instantly share code, notes, and snippets.

@ykpoh
Last active July 18, 2021 09:28
Show Gist options
  • Save ykpoh/2feb659d01b7b723a8d2a3437b71b837 to your computer and use it in GitHub Desktop.
Save ykpoh/2feb659d01b7b723a8d2a3437b71b837 to your computer and use it in GitHub Desktop.
import Foundation
import RxCocoa
protocol LaunchListTableViewCellViewModelType { // 1
var launch: BehaviorRelay<Launch?> { get }
var launchNumber: BehaviorRelay<String?> { get }
var detail: BehaviorRelay<String?> { get }
var hideDetail: BehaviorRelay<Bool> { get }
var dateTime: BehaviorRelay<String?> { get }
var statusString: BehaviorRelay<String?> { get }
var statusTextColor: BehaviorRelay<UIColor> { get }
init(launch: Launch)
}
class LaunchListTableViewCellViewModel: LaunchListTableViewCellViewModelType { // 2
enum Status: String {
case upcoming = "UPCOMING"
case success = "SUCCESS"
case fail = "FAIL"
}
var launch = BehaviorRelay<Launch?>(value: nil)
var launchNumber = BehaviorRelay<String?>(value: nil)
var detail = BehaviorRelay<String?>(value: nil)
var hideDetail = BehaviorRelay<Bool>(value: false)
var dateTime = BehaviorRelay<String?>(value: nil)
var statusString = BehaviorRelay<String?>(value: nil)
var statusTextColor = BehaviorRelay<UIColor>(value: .black)
var status: Status = .upcoming
init() {}
required convenience init(launch: Launch) { // 3
self.init()
self.launch.accept(launch)
launchNumber.accept(launch.name)
detail.accept(launch.details)
hideDetail.accept(launch.details == nil)
if let date = launch.date_utc {
dateTime.accept("Launch time: \(DateFormatter.dateTimeSeconds.string(from: date)) (UTC)")
} else {
dateTime.accept("Launch time: TBD")
}
status = { () -> (Status) in
if launch.upcoming ?? false {
return .upcoming
} else if launch.success ?? false {
return .success
} else {
return .fail
}
}()
statusString.accept(status.rawValue)
statusTextColor.accept({ () -> UIColor in
switch status {
case .upcoming:
return .brown
case .success:
return .green
case .fail:
return .red
}
}())
}
public func configure(_ cell: LaunchListTableViewCell) { // 4
cell.viewModel = self
cell.setupListeners()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment