79 lines
1.5 KiB
Swift
79 lines
1.5 KiB
Swift
//
|
|
// 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 {
|
|
SelectDocumentPicker { 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.
|
|
}
|
|
}
|
|
}
|