Skip to content
Snippets Groups Projects
BackupViewModel.swift 857 B
Newer Older
import Combine
import DependencyInjection

enum BackupViewState: Equatable {
    case setup
    case config
}

struct BackupViewModel {
    var setupViewModel: () -> BackupSetupViewModel
    var configViewModel: () -> BackupConfigViewModel

    var state: () -> AnyPublisher<BackupViewState, Never>
}

extension BackupViewModel {
    static func live() -> Self {
        class Context {
            @Dependency var service: BackupService
        }

        let context = Context()

        return .init(
            setupViewModel: { BackupSetupViewModel.live() },
            configViewModel: { BackupConfigViewModel.live() },
            state: {
Bruno Muniz's avatar
Bruno Muniz committed
                context.service.connectedServicesPublisher
                    .map { $0.isEmpty ? BackupViewState.setup : .config }
                    .eraseToAnyPublisher()
            }
        )
    }
}