110 lines
3.1 KiB
Swift
110 lines
3.1 KiB
Swift
|
//
|
||
|
// CreateFolderViewModifier.swift
|
||
|
// Browse
|
||
|
//
|
||
|
// Created by Javier Cicchelli on 16/12/2022.
|
||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import DataModels
|
||
|
import KeychainStorage
|
||
|
import SwiftUI
|
||
|
|
||
|
struct CreateFolderViewModifier: ViewModifier {
|
||
|
|
||
|
// MARK: Storages
|
||
|
|
||
|
@KeychainStorage(key: .KeychainStorage.account) private var account: Account?
|
||
|
|
||
|
// MARK: States
|
||
|
|
||
|
@State private var folderName: String = ""
|
||
|
@State private var showErrorAlert: Bool = false
|
||
|
|
||
|
// MARK: Bindings
|
||
|
|
||
|
@Binding var isPresenting: Bool
|
||
|
|
||
|
let id: String
|
||
|
let submitted: ActionClosure
|
||
|
|
||
|
private let createFolder: CreateFolderUseCase = .init()
|
||
|
|
||
|
// MARK: Body
|
||
|
|
||
|
func body(content: Content) -> some View {
|
||
|
content
|
||
|
.background(InputAlertView(
|
||
|
isPresenting: $isPresenting,
|
||
|
title: .localise(key: "create_folder.input_alert.title"),
|
||
|
message: .localise(key: "create_folder.input_alert.message"),
|
||
|
textFieldPlaceholder: .localise(key: "create_folder.input_alert.text_field.placeholder"),
|
||
|
textFieldString: $folderName,
|
||
|
actions: [
|
||
|
.init(
|
||
|
title: .localise(key: "create_folder.input_alert.button.cancel"),
|
||
|
style: .cancel,
|
||
|
handler: { _ in
|
||
|
folderName = .empty
|
||
|
}
|
||
|
),
|
||
|
.init(
|
||
|
title: .localise(key: "create_folder.input_alert.button.submit"),
|
||
|
style: .default,
|
||
|
handler: { _ in
|
||
|
Task {
|
||
|
await addFolder()
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
]
|
||
|
))
|
||
|
.alert(isPresented: $showErrorAlert) {
|
||
|
Alert(
|
||
|
title: Text(
|
||
|
"create_folder.system_alert.title",
|
||
|
bundle: .module
|
||
|
),
|
||
|
message: Text(
|
||
|
"create_folder.system_alert.message",
|
||
|
bundle: .module
|
||
|
),
|
||
|
dismissButton: .cancel(Text(
|
||
|
"create_folder.system_alert.button.cancel",
|
||
|
bundle: .module
|
||
|
)) {
|
||
|
folderName = .empty
|
||
|
}
|
||
|
)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// MARK: - Helpers
|
||
|
|
||
|
private extension CreateFolderViewModifier {
|
||
|
func addFolder() async {
|
||
|
guard let account else {
|
||
|
showErrorAlert = true
|
||
|
return
|
||
|
}
|
||
|
|
||
|
do {
|
||
|
_ = try await createFolder(
|
||
|
id: id,
|
||
|
name: folderName,
|
||
|
username: account.username,
|
||
|
password: account.password
|
||
|
)
|
||
|
|
||
|
folderName = .empty
|
||
|
|
||
|
submitted()
|
||
|
} catch {
|
||
|
showErrorAlert = true
|
||
|
}
|
||
|
}
|
||
|
}
|