Skip to content

Commit e9b211c

Browse files
committed
[File Manager] Create file and folder
1 parent 70c59d0 commit e9b211c

File tree

6 files changed

+109
-0
lines changed

6 files changed

+109
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "CreateFile.svg",
5+
"idiom" : "universal",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"author" : "xcode",
19+
"version" : 1
20+
}
21+
}
Lines changed: 4 additions & 0 deletions
Loading
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "CreateFolder.svg",
5+
"idiom" : "universal",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"author" : "xcode",
19+
"version" : 1
20+
}
21+
}
Lines changed: 4 additions & 0 deletions
Loading

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,25 @@ extension FileManagerView.FileManagerListing {
55
@Binding var isPresented: Bool
66
@Binding var settings: FileManagerSettings
77

8+
let createFolder: () -> Void
9+
let createFile: () -> Void
810
let upload: () -> Void
911

1012
var body: some View {
1113
HStack {
1214
Spacer()
1315
Card {
1416
VStack(alignment: .leading, spacing: 0) {
17+
Option(title: "Create Folder", image: "CreateFolder") {
18+
isPresented = false
19+
createFolder()
20+
}
21+
22+
Option(title: "Create File", image: "CreateFile") {
23+
isPresented = false
24+
createFile()
25+
}
26+
1527
Option(title: "Upload", image: "Share") {
1628
isPresented = false
1729
upload()

Flipper/iOS/UI/FileManager/FileManagerListing.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ extension FileManagerView {
2323
@State private var selectedElement: ExtendedElement?
2424
@State private var deletedElement: ExtendedElement?
2525

26+
// MARK: Create File/Directory
27+
@State private var name = ""
28+
@State private var isNewFile = false
29+
@State private var isNewDirectory = false
30+
@FocusState var isNameFocused: Bool
31+
var namePlaceholder: String {
32+
"\(isNewFile ? "file" : "directory") name"
33+
}
34+
2635
@AppStorage(.fileManagerSettings)
2736
private var settings: FileManagerSettings = .init()
2837

@@ -59,6 +68,14 @@ extension FileManagerView {
5968
}
6069
.padding([.horizontal, .top], 14)
6170

71+
if isNewFile || isNewDirectory {
72+
TextField(namePlaceholder, text: $name)
73+
.textFieldStyle(.roundedBorder)
74+
.onSubmit { submitNewElement() }
75+
.focused($isNameFocused)
76+
.padding([.horizontal, .top], 14)
77+
}
78+
6279
Group {
6380
if elements.isEmpty {
6481
EmptyFolder(onUpload: showUpload)
@@ -103,6 +120,8 @@ extension FileManagerView {
103120
FileListingOptions(
104121
isPresented: $showOptions,
105122
settings: $settings,
123+
createFolder: { newElement(isDirectory: true) },
124+
createFile: { newElement(isDirectory: false) },
106125
upload: showUpload
107126
)
108127
}
@@ -229,6 +248,34 @@ extension FileManagerView {
229248
private func showUpload() {
230249
isFileImporterPresented = true
231250
}
251+
252+
// MARK: Create File/Directory
253+
func newElement(isDirectory: Bool) {
254+
name = ""
255+
isNewFile = !isDirectory
256+
isNewDirectory = isDirectory
257+
isNameFocused = true
258+
}
259+
260+
func submitNewElement() {
261+
if !name.isEmpty {
262+
let path = path.appending(name)
263+
let isDirectory = isNewDirectory
264+
Task {
265+
do {
266+
try await fileManager.create(
267+
path: path,
268+
isDirectory: isDirectory)
269+
await load()
270+
} catch {
271+
self.error = String(describing: error)
272+
}
273+
}
274+
}
275+
name = ""
276+
isNewFile = false
277+
isNewDirectory = false
278+
}
232279
}
233280
}
234281

0 commit comments

Comments
 (0)