Slide 18
Slide 18 text
Feedback
feedback:
bind(self) { me, state in
let subscriptions: [Disposable] = [
// itemsΛUITableViewʹBind
state.map { $0.items }
.drive(me.tableView.rx.items(cellIdentifier: "Cell"))(me.configureCell),
// loading ͕falseͰ͋ΕrefreshControlΛఀࢭ
state.map { $0.loading }.filter { !$0 }
.drive(onNext: { _ in me.refreshControl.endRefreshing() })
]
let events: [Signal] = [
// RefreshControl͕มߋ͞ΕΕrefreshΠϕϯτΛൃՐͤ͞Δ
me.refreshControl.rx.controlEvent(.valueChanged).asSignal().map { _ in Event.refresh },
// UITableViewΛఈ·ͰεΫϩʔϧͨ͠߹loadNextPageΠϕϯτΛൃՐͤ͞Δ
state.flatMapLatest { state in
if state.loading { return Signal.empty() }
return me.tableView.rx.reachedBottom.map { _ in Event.loadNextPage }
}
]
return Bindings(subscriptions: subscriptions, events: events)
},
react(query: { $0.loadPage }, effects: { page in
// loadPage͕มߋ͞ΕΔʹݺΕΔ(nilͷ߹ݺΕͳ͍)
return api.fetch(page: page, limit: fetchCount)
.asSignal(onErrorJustReturn: [])
.map(Event.response)
})