Skip to content
Snippets Groups Projects
AccountDeleteViewModel.swift 1.12 KiB
Newer Older
Bruno Muniz's avatar
Bruno Muniz committed
import HUD
import Combine
import Integration
import Foundation
import DependencyInjection

final class AccountDeleteViewModel {
    @Dependency private var session: SessionType

    var deleting = false

    var hud: AnyPublisher<HUDStatus, Never> { hudRelay.eraseToAnyPublisher() }
    private let hudRelay = CurrentValueSubject<HUDStatus, Never>(.none)

    func didTapDelete() {
        guard deleting == false else { return }
        deleting = true

        DispatchQueue.main.async { [weak self] in
Ahmed Shehata's avatar
Ahmed Shehata committed
            self?.hudRelay.send(.on(nil))
Bruno Muniz's avatar
Bruno Muniz committed
        }

        do {
            try session.deleteMyself()
            DependencyInjection.Container.shared.unregister(SessionType.self)

            DispatchQueue.main.async { [weak self] in
                self?.hudRelay.send(.error(.init(
                    content: "Now kill the app and re-open",
                    title: "Account deleted",
                    dismissable: false
                )))
            }
        } catch {

            DispatchQueue.main.async { [weak self] in
                self?.hudRelay.send(.error(.init(with: error)))
            }
        }
    }
}