I'd like to reload one specific card after I get the data update from an async restful process. However, loadSpecificCards function is not available under the CardPartsViewController. I am wondering what's the correct method to achieve that. Also, I am wondering what the "indexPath" in the function is. Is it possible for someone to give an example? Thank you very much!
import Foundation
import CardParts
import RxSwift
class CardRecommendationController: CardPartsViewController {
private var diseaseClient: DiseaseClient?
private var progressManager: ProgressManager?
private var currentPage = 0
private var timer: Timer?
let cardPartTextView = CardPartTextView(type: .normal)
var recommendations = BehaviorSubject(value: ["1", "2"])
var recommendationImages: [UIImage?] = [UIImage(systemName: "heart"), UIImage(systemName: "lungs")]
let imageRecommendation = CardPartImageView()
override func viewDidLoad() {
super.viewDidLoad()
self.progressManager = ProgressManager()
self.diseaseClient = DiseaseClient()
cardPartTextView.text = "Top Health Threats in the Country"
cardPartTextView.font = UIFont.systemFont(ofSize: 18)
cardPartTextView.textColor = .darkGray
self.diseaseClient?.getDiseaseData(country: "US"){[unowned self] (diseaseData, error) in
if error != nil {
self.progressManager?.stopLoading()
return
}
if let diseaseData = diseaseData {
let viewModel3 = DiseaseViewModel(model: diseaseData)
viewModel3.cause.asObservable().bind(to: recommendations).disposed(by: bag)
var stackViews: [CardPartStackView] = []
do {
for (index, recommedationString) in try recommendations.value().enumerated() {
let sv = CardPartStackView()
sv.axis = .vertical
sv.spacing = 8
stackViews.append(sv)
let strs = recommedationString.components(separatedBy: "|")
let image = CardPartImageView()
image.image = recommendationImages[index]
image.contentMode = .scaleAspectFit
image.tintColor = .lightGray
sv.addArrangedSubview(image)
let recom1 = CardPartTextView(type: .normal)
recom1.text = String(index * 5 + 1) + ". " + strs[0]
recom1.textAlignment = .center
sv.addArrangedSubview(recom1)
let recom2 = CardPartTextView(type: .normal)
recom2.text = String(index * 5 + 2) + ". " + strs[1]
recom2.textAlignment = .center
sv.addArrangedSubview(recom2)
let recom3 = CardPartTextView(type: .normal)
recom3.text = String(index * 5 + 3) + ". " + strs[2]
recom3.textAlignment = .center
sv.addArrangedSubview(recom3)
let recom4 = CardPartTextView(type: .normal)
recom4.text = String(index * 5 + 4) + ". " + strs[3]
recom4.textAlignment = .center
sv.addArrangedSubview(recom4)
let recom5 = CardPartTextView(type: .normal)
recom5.text = String(index * 5 + 5) + ". " + strs[4]
recom5.textAlignment = .center
sv.addArrangedSubview(recom5)
}
} catch {
}
let cardPartPagedView = CardPartPagedView(withPages: stackViews, andHeight: 200)
// To animate through the pages
timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: {[weak self] (_) in
guard let this = self else { return }
do {
let recomSize = try this.recommendations.value().count
this.currentPage = this.currentPage == recomSize - 1 ? 0 : this.currentPage + 1
} catch{
}
cardPartPagedView.moveToPage(this.currentPage)
})
setupCardParts([cardPartTextView, cardPartPagedView])
// I want to call loadSpecificCards(cards: <#T##[CardController]#>, indexPaths: <#T##[IndexPath]#>) method here
// but it is not available for CardPartsViewController. What should be the best practice?
self.progressManager?.stopLoading()
}
}
}
}
I'd like to reload one specific card after I get the data update from an async restful process. However, loadSpecificCards function is not available under the CardPartsViewController. I am wondering what's the correct method to achieve that. Also, I am wondering what the "indexPath" in the function is. Is it possible for someone to give an example? Thank you very much!