metatext-app-ios-iphone-ipad/ViewModels/Sources/ViewModels/LoadMoreViewModel.swift

31 lines
1.1 KiB
Swift
Raw Normal View History

2020-10-02 09:41:30 +02:00
// Copyright © 2020 Metabolist. All rights reserved.
2020-10-03 11:19:05 +02:00
import Combine
2020-10-04 10:39:54 +02:00
import ServiceLayer
2020-10-02 09:41:30 +02:00
2020-11-09 07:22:20 +01:00
public final class LoadMoreViewModel: ObservableObject, CollectionItemViewModel {
2020-10-05 03:25:02 +02:00
public var direction = LoadMore.Direction.up
@Published public private(set) var loading = false
2020-10-04 10:39:54 +02:00
public let events: AnyPublisher<AnyPublisher<CollectionItemEvent, Error>, Never>
private let loadMoreService: LoadMoreService
private let eventsSubject = PassthroughSubject<AnyPublisher<CollectionItemEvent, Error>, Never>()
init(loadMoreService: LoadMoreService) {
self.loadMoreService = loadMoreService
events = eventsSubject.eraseToAnyPublisher()
}
}
extension LoadMoreViewModel {
func loadMore() {
eventsSubject.send(
2020-10-05 03:25:02 +02:00
loadMoreService.request(direction: direction)
2020-10-04 10:39:54 +02:00
.handleEvents(
2020-10-05 03:25:02 +02:00
receiveSubscription: { [weak self] _ in self?.loading = true },
receiveCompletion: { [weak self] _ in self?.loading = false })
2020-10-04 10:39:54 +02:00
.map { _ in CollectionItemEvent.ignorableOutput }
.eraseToAnyPublisher())
}
2020-10-02 09:41:30 +02:00
}