// // 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 } } }