aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/Files
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2025-11-12 18:55:25 -0800
committerDustin Mierau <dustin@mierau.me>2025-11-12 18:55:25 -0800
commit5eff79cc4891076d85223dcfd96c7cb8894c80f2 (patch)
tree9a0197cf30d3300cb2fbc024da26ddbc82df43bd /Hotline/macOS/Files
parent5a3d06c527cf03d68149449965fade0dd5ea0ed2 (diff)
Get Accounts out of the sidebar, redesign Account management.
Diffstat (limited to 'Hotline/macOS/Files')
-rw-r--r--Hotline/macOS/Files/FileDetailsSheet.swift10
-rw-r--r--Hotline/macOS/Files/FilesView.swift26
-rw-r--r--Hotline/macOS/Files/NewFolderPopover.swift51
-rw-r--r--Hotline/macOS/Files/NewFolderSheet.swift32
4 files changed, 71 insertions, 48 deletions
diff --git a/Hotline/macOS/Files/FileDetailsSheet.swift b/Hotline/macOS/Files/FileDetailsSheet.swift
index d798fd4..2118518 100644
--- a/Hotline/macOS/Files/FileDetailsSheet.swift
+++ b/Hotline/macOS/Files/FileDetailsSheet.swift
@@ -13,8 +13,14 @@ struct FileDetailsSheet: View {
var body: some View {
VStack(alignment: .leading, spacing: 16) {
HStack(alignment: .center, spacing: 16){
- FileIconView(filename: fd.name, fileType: nil)
- .frame(width: 32, height: 32)
+ if self.fd.type == "Folder" {
+ FolderIconView()
+ .frame(width: 32, height: 32)
+ }
+ else {
+ FileIconView(filename: fd.name, fileType: nil)
+ .frame(width: 32, height: 32)
+ }
TextField("", text: $filename)
.disabled(!self.canRename())
}
diff --git a/Hotline/macOS/Files/FilesView.swift b/Hotline/macOS/Files/FilesView.swift
index a9b0b83..2386d2a 100644
--- a/Hotline/macOS/Files/FilesView.swift
+++ b/Hotline/macOS/Files/FilesView.swift
@@ -12,8 +12,8 @@ struct FilesView: View {
@State private var searchText: String = ""
@State private var isSearching: Bool = false
@State private var dragOver: Bool = false
- @State private var deleteConfirmationDisplayed: Bool = false
- @State private var newFolderSheetDisplayed: Bool = false
+ @State private var confirmDeleteShown: Bool = false
+ @State private var newFolderShown: Bool = false
var body: some View {
NavigationStack {
@@ -96,7 +96,7 @@ struct FilesView: View {
Divider()
Button {
- self.deleteConfirmationDisplayed = true
+ self.confirmDeleteShown = true
} label: {
Label("Delete...", systemImage: "trash")
}
@@ -200,16 +200,21 @@ struct FilesView: View {
ToolbarItem {
Button {
- self.newFolderSheetDisplayed = true
+ self.newFolderShown = true
} label: {
Label("New Folder", systemImage: "folder.badge.plus")
}
.help("New Folder")
+ .popover(isPresented: self.$newFolderShown, arrowEdge: .bottom) {
+ NewFolderPopover { folderName in
+ self.newFolder(name: folderName, parent: self.selection)
+ }
+ }
}
ToolbarItem {
Button {
- self.deleteConfirmationDisplayed = true
+ self.confirmDeleteShown = true
} label: {
Label("Delete", systemImage: "trash")
}
@@ -218,7 +223,7 @@ struct FilesView: View {
}
}
}
- .alert("Are you sure you want to permanently delete \"\(self.selection?.name ?? "this file")\"?", isPresented: self.$deleteConfirmationDisplayed, actions: {
+ .alert("Are you sure you want to permanently delete \"\(self.selection?.name ?? "this file")\"?", isPresented: self.$confirmDeleteShown, actions: {
Button("Delete", role: .destructive) {
if let s = self.selection {
Task {
@@ -229,11 +234,6 @@ struct FilesView: View {
}, message: {
Text("You cannot undo this action.")
})
- .sheet(isPresented: self.$newFolderSheetDisplayed) {
- NewFolderSheet { folderName in
- self.newFolder(name: folderName, parent: self.selection)
- }
- }
.sheet(item: self.$fileDetails) { item in
FileDetailsSheet(fd: item)
}
@@ -441,9 +441,7 @@ struct FilesView: View {
@MainActor private func getFileInfo(_ file: FileInfo) {
Task {
if let fileInfo = try? await model.getFileDetails(file.name, path: file.path) {
- Task { @MainActor in
- self.fileDetails = fileInfo
- }
+ self.fileDetails = fileInfo
}
}
}
diff --git a/Hotline/macOS/Files/NewFolderPopover.swift b/Hotline/macOS/Files/NewFolderPopover.swift
new file mode 100644
index 0000000..4e282f5
--- /dev/null
+++ b/Hotline/macOS/Files/NewFolderPopover.swift
@@ -0,0 +1,51 @@
+import SwiftUI
+
+struct NewFolderPopover: View {
+ @Environment(\.dismiss) private var dismiss
+
+ let action: ((String) -> Void)?
+
+ @State private var folderName: String = "Untitled Folder"
+
+ var body: some View {
+ VStack(spacing: 16) {
+ TextField("Folder Name", text: self.$folderName)
+ .onSubmit(of: .text) {
+ self.createFolder()
+ }
+
+ HStack(spacing: 8) {
+ Spacer()
+
+ Button("Cancel", role: .cancel) {
+ self.dismiss()
+ }
+ .buttonStyle(.bordered)
+ .buttonBorderShape(.capsule)
+
+ if #available(macOS 26.0, *) {
+ Button("New Folder", role: .confirm) {
+ self.createFolder()
+ }
+ .buttonStyle(.borderedProminent)
+ .buttonBorderShape(.capsule)
+ }
+ else {
+ Button("OK") {
+ self.dismiss()
+ self.action?(self.folderName)
+ }
+ .buttonStyle(.borderedProminent)
+ .buttonBorderShape(.capsule)
+ }
+ }
+ }
+ .frame(width: 250)
+ .padding()
+ }
+
+ private func createFolder() {
+ self.dismiss()
+ self.action?(self.folderName)
+ }
+}
diff --git a/Hotline/macOS/Files/NewFolderSheet.swift b/Hotline/macOS/Files/NewFolderSheet.swift
deleted file mode 100644
index a899f36..0000000
--- a/Hotline/macOS/Files/NewFolderSheet.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-import SwiftUI
-
-struct NewFolderSheet: View {
- @Environment(\.dismiss) private var dismiss
-
- let action: ((String) -> Void)?
-
- @State private var folderName: String = "Untitled"
-
- var body: some View {
- Form {
- TextField(text: self.$folderName) {
- Text("Folder Name")
- }
- }
- .formStyle(.grouped)
- .fixedSize(horizontal: false, vertical: true)
- .toolbar {
- ToolbarItem(placement: .confirmationAction) {
- Button("New Folder") {
- self.dismiss()
- self.action?(self.folderName)
- }
- }
- ToolbarItem(placement: .cancellationAction) {
- Button("Cancel") {
- self.dismiss()
- }
- }
- }
- }
-}