diff --git a/Modules/Sources/Browse/UI/Views/UploadView.swift b/Modules/Sources/Browse/UI/Views/UploadView.swift new file mode 100644 index 0000000..495a43d --- /dev/null +++ b/Modules/Sources/Browse/UI/Views/UploadView.swift @@ -0,0 +1,78 @@ +// +// UploadView.swift +// Browse +// +// Created by Javier Cicchelli on 17/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import DataModels +import Foundation +import KeychainStorage +import SwiftUI + + +struct UploadView: View { + + // MARK: Storages + + @KeychainStorage(key: .KeychainStorage.account) private var account: Account? + + // MARK: States + + @State private var urls: [URL] = [] + + // MARK: Properties + + let id: String + let uploaded: ActionClosure + + private let uploadFile: UploadFileUseCase = .init() + + // MARK: Body + + var body: some View { + DocumentPicker { urls in + Task { await addFile(from: urls) } + } + } + +} + +// MARK: - Helpers + +private extension UploadView { + func addFile(from urls: [URL]) async { + guard let url = urls.first else { + // TODO: Handle this error case. + return + } + guard let account else { + // TODO: Handle this error case. + return + } + + do { + try await uploadFile( + id: id, + url: url, + username: account.username, + password: account.password + ) + + uploaded() + } catch { + // TODO: Handle this error case. + } + } +} + +// MARK: - Previews + +struct UploadView_Previews: PreviewProvider { + static var previews: some View { + UploadView(id: "1234567890") { + // uploaded closure. + } + } +}