import Foundation import Observation /// `mr list --state `, paginated. @Observable @MainActor final class MRListViewModel { enum StateFilter: String, CaseIterable, Identifiable, Sendable { case open, merged, closed, all var id: String { rawValue } } let list: PagedListModel let repoPath: String var filter: StateFilter = .open { didSet { guard filter != oldValue else { return } configureList() Task { await list.reload() } } } init(client: GitbayClient, repoPath: String) { self.repoPath = repoPath list = PagedListModel( client: client, argv: ["mr", "list", repoPath, "--state", StateFilter.open.rawValue], emptyMessage: "No open merge requests." ) } var state: LoadState<[MergeRequest]> { list.state } func load() async { await list.reload() } private func configureList() { list.argv = ["mr", "list", repoPath, "--state", filter.rawValue] list.emptyMessage = "No \(filter == .all ? "" : filter.rawValue + " ")merge requests." } }