diff options
| author | Fuwn <[email protected]> | 2025-07-05 05:59:04 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-07-05 05:59:04 -0700 |
| commit | 6381fe585268bda17d0859937568290205575e2c (patch) | |
| tree | 2db111ba87535288d75e785b92e5277b5632c09f /Sora | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-6381fe585268bda17d0859937568290205575e2c.tar.xz sora-testing-6381fe585268bda17d0859937568290205575e2c.zip | |
feat: Development commit
Diffstat (limited to 'Sora')
| -rw-r--r-- | Sora/Data/Settings/SettingsFolder.swift | 2 | ||||
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 6 | ||||
| -rw-r--r-- | Sora/Views/Settings/Collections/SettingsCollectionsListView.swift | 16 | ||||
| -rw-r--r-- | Sora/Views/Settings/Collections/SettingsCollectionsView.swift | 61 | ||||
| -rw-r--r-- | Sora/Views/Settings/SettingsView.swift | 6 |
5 files changed, 90 insertions, 1 deletions
diff --git a/Sora/Data/Settings/SettingsFolder.swift b/Sora/Data/Settings/SettingsFolder.swift index ce19561..84543c1 100644 --- a/Sora/Data/Settings/SettingsFolder.swift +++ b/Sora/Data/Settings/SettingsFolder.swift @@ -2,7 +2,7 @@ import Foundation struct SettingsFolder: Codable, Identifiable, Hashable { let id: UUID - let name: String + var name: String let createdAt: Date init(name: String, id: UUID = UUID()) { diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift index d24929b..b63c7b3 100644 --- a/Sora/Data/Settings/SettingsManager.swift +++ b/Sora/Data/Settings/SettingsManager.swift @@ -615,6 +615,12 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l folders.first { $0.id == id }?.name } + func renameFolder(_ folder: SettingsFolder, to newName: String) { + guard let index = folders.firstIndex(where: { $0.id == folder.id }) else { return } + + folders[index].name = newName + } + // MARK: Search History Management func removeSearchHistoryEntry(at offsets: IndexSet) { searchHistory.remove(atOffsets: offsets) diff --git a/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift b/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift new file mode 100644 index 0000000..c474b79 --- /dev/null +++ b/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift @@ -0,0 +1,16 @@ +import SwiftUI + +struct SettingsCollectionsListView: View { + @EnvironmentObject private var settings: SettingsManager + + var body: some View { + List { + ForEach(settings.folders) { folder in + NavigationLink(destination: SettingsCollectionsView(folder: folder)) { + Text(folder.name) + } + } + } + .navigationTitle("Collections") + } +} diff --git a/Sora/Views/Settings/Collections/SettingsCollectionsView.swift b/Sora/Views/Settings/Collections/SettingsCollectionsView.swift new file mode 100644 index 0000000..a7ce5a7 --- /dev/null +++ b/Sora/Views/Settings/Collections/SettingsCollectionsView.swift @@ -0,0 +1,61 @@ +import SwiftUI + +struct SettingsCollectionsView: View { + @EnvironmentObject private var settings: SettingsManager + + @State private var isDeleteConfirmationPresented = false + @State private var isRenameAlertPresented = false + @State private var newCollectionName = "" + let folder: SettingsFolder + + var body: some View { + Form { + Section(header: Text("Actions")) { + Button(action: { + newCollectionName = folder.name + isRenameAlertPresented = true + }) { + Label("Rename", systemImage: "pencil") + } + + Button( + role: .destructive, + action: { + isDeleteConfirmationPresented = true + } + ) { + Label("Delete", systemImage: "trash") + } + } + } + .navigationTitle(folder.name) + .alert( + "Rename Collection", + isPresented: $isRenameAlertPresented + ) { + TextField("Collection Name", text: $newCollectionName) + + Button("Cancel", role: .cancel) { + newCollectionName = "" + isRenameAlertPresented = false + } + + Button("Rename") { + settings.renameFolder(folder, to: newCollectionName) + + newCollectionName = "" + isRenameAlertPresented = false + } + } + .alert( + "Are you sure you want to delete this collection?", + isPresented: $isDeleteConfirmationPresented + ) { + Button("Delete", role: .destructive) { + settings.folders.removeAll { $0.id == folder.id } + } + + Button("Cancel", role: .cancel) { () } + } + } +} diff --git a/Sora/Views/Settings/SettingsView.swift b/Sora/Views/Settings/SettingsView.swift index 1cd5255..3315301 100644 --- a/Sora/Views/Settings/SettingsView.swift +++ b/Sora/Views/Settings/SettingsView.swift @@ -20,6 +20,12 @@ struct SettingsView: View { SettingsSearchView() } + Section(header: Text("Collections")) { + NavigationLink(destination: SettingsCollectionsListView()) { + Text("Manage Collections") + } + } + Section(header: Text("Settings")) { SettingsSettingsView() } |