Skip to content

Commit 0f9125d

Browse files
committed
[File Manager] Allow delete folder
1 parent 33ca6b7 commit 0f9125d

2 files changed

Lines changed: 29 additions & 6 deletions

File tree

Flipper/iOS/UI/FileManager/Components/SelectedElementSheet.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ extension FileManagerView.FileManagerListing {
5555
) {
5656
onDelete(element)
5757
}
58-
.disabled(isDirectory)
5958
.foregroundColor(.red)
6059
}
6160
.padding(.horizontal, 14)

Flipper/iOS/UI/FileManager/FileManagerListing.swift

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@ extension FileManagerView {
1616
@State private var isLoading = true
1717
@State private var error: String?
1818

19+
@State private var isForceDeletePresented = false
1920
@State private var isFileImporterPresented = false
2021
@State private var showOptions = false
22+
2123
@State private var selectedElement: ExtendedElement?
24+
@State private var deletedElement: ExtendedElement?
2225

2326
@AppStorage(.fileManagerSettings)
2427
private var settings: FileManagerSettings = .init()
@@ -56,7 +59,7 @@ extension FileManagerView {
5659
elements: elements,
5760
displayType: settings.displayType,
5861
onTap: navigate,
59-
onDelete: deleteFile,
62+
onDelete: { deleteFile($0) },
6063
onAction: { selectedElement = $0 }
6164
)
6265
}
@@ -98,9 +101,18 @@ extension FileManagerView {
98101
SelectedElementSheet(
99102
element: $0,
100103
onExport: downloadFile,
101-
onDelete: deleteFile
104+
onDelete: { deleteFile($0) }
102105
)
103106
}
107+
.alert(
108+
"Directory is not empty",
109+
isPresented: $isForceDeletePresented,
110+
presenting: deletedElement
111+
) { deletedElement in
112+
Button("Force Delete", role: .destructive) {
113+
deleteFile(deletedElement, force: true)
114+
}
115+
}
104116
.fileImporter(
105117
isPresented: $isFileImporterPresented,
106118
allowedContentTypes: [UTType.item],
@@ -179,16 +191,28 @@ extension FileManagerView {
179191
}
180192
}
181193

182-
private func deleteFile(_ extended: ExtendedElement) {
194+
private func deleteFile(
195+
_ extended: ExtendedElement,
196+
force: Bool = false
197+
) {
198+
deletedElement = extended
183199
isLoading = true
184200
defer { isLoading = false }
185201

186202
Task {
203+
defer { selectedElement = nil }
187204
do {
188-
try await fileManager.delete(extended.type, at: path)
205+
try await fileManager.delete(
206+
extended.type,
207+
at: path,
208+
force: force
209+
)
189210
await load()
211+
} catch let error as RemoteFileManager.Error
212+
where error == .directoryIsNotEmpty && !force {
213+
self.isForceDeletePresented = true
190214
} catch {
191-
self.error = String(describing: error)
215+
self.error = String(describing: error)
192216
}
193217
}
194218
}

0 commit comments

Comments
 (0)