Implemented the CreateFolderViewModifier view modifier for the Browse module.
This commit is contained in:
parent
e66b027c66
commit
55a89975be
@ -25,15 +25,26 @@
|
||||
"message.type_not_supported.text.second" = "Please be patient while the support for this type of document is being built by our development team.";
|
||||
"message.type_not_supported.button.text" = "Go back to folder";
|
||||
|
||||
// CreateFolderViewModifier
|
||||
|
||||
"create_folder.input_alert.title" = "Create a new folder";
|
||||
"create_folder.input_alert.message" = "You are about to create a new folder inside the folder you are currently in.";
|
||||
"create_folder.input_alert.text_field.placeholder" = "Name of the folder to create";
|
||||
"create_folder.input_alert.button.cancel" = "Dismiss";
|
||||
"create_folder.input_alert.button.submit" = "Create folder";
|
||||
"create_folder.system_alert.title" = "An error occurred while creating a new folder";
|
||||
"create_folder.system_alert.message" = "An unexpected error occurred while trying to create a new folder into the current folder.\n\nPlease check your Internet connection and try this operation at a later time.";
|
||||
"create_folder.system_alert.button.cancel" = "Understood";
|
||||
|
||||
// DeleteItemViewModifier
|
||||
|
||||
"delete_item.action_sheet.title" = "Delete an item";
|
||||
"delete_item.action_sheet.message %@" = "You are about to delete an item named \"%@\" from this folder.\n\nAre you sure you wish to proceed?";
|
||||
"delete_item.action_sheet.button.ok" = "Yes, please delete it.";
|
||||
"delete_item.action_sheet.button.cancel" = "No, I reconsidered.";
|
||||
"delete_item.system_alert.title" = "...";
|
||||
"delete_item.system_alert.message" = "...";
|
||||
"delete_item.system_alert.button.dismiss" = "...";
|
||||
"delete_item.system_alert.title" = "An error occurred when deleting a folder";
|
||||
"delete_item.system_alert.message" = "An unexpected error occurred while trying to delete the indicated folder from the current folder.\n\nPlease check your Internet connection and try this operation at a later time.";
|
||||
"delete_item.system_alert.button.cancel" = "Understood";
|
||||
|
||||
// BrowseView
|
||||
|
||||
|
@ -22,6 +22,18 @@ extension View {
|
||||
))
|
||||
}
|
||||
|
||||
func createFolder(
|
||||
isPresenting: Binding<Bool>,
|
||||
id: String,
|
||||
submitted: @escaping ActionClosure
|
||||
) -> some View {
|
||||
modifier(CreateFolderViewModifier(
|
||||
isPresenting: isPresenting,
|
||||
id: id,
|
||||
submitted: submitted
|
||||
))
|
||||
}
|
||||
|
||||
func delete(
|
||||
item: Binding<(any FileSystemItem)?>,
|
||||
deleted: @escaping ActionClosure
|
||||
|
@ -0,0 +1,109 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
}
|
||||
}
|
@ -115,6 +115,8 @@ private extension DeleteItemViewModifier {
|
||||
password: account.password
|
||||
)
|
||||
|
||||
item = nil
|
||||
|
||||
deleted()
|
||||
} catch {
|
||||
showErrorAlert = true
|
||||
|
Loading…
x
Reference in New Issue
Block a user