ChWebsiteApp/CHDataManagement/Views/Generic/FolderOnDiskPropertyView.swift
2024-12-17 23:24:07 +01:00

74 lines
2.0 KiB
Swift

import SwiftUI
import SFSafeSymbols
struct FolderOnDiskPropertyView: View {
let title: LocalizedStringKey
@Binding
var folder: URL?
@Binding
var isStale: Bool
let footer: LocalizedStringKey
let update: (URL) -> Void
init(title: LocalizedStringKey, folder: Binding<URL?>, isStale: Binding<Bool>, footer: LocalizedStringKey, update: @escaping (URL) -> Void) {
self.title = title
self._folder = folder
self._isStale = isStale
self.footer = footer
self.update = update
}
var body: some View {
VStack(alignment: .leading) {
HStack(alignment: .firstTextBaseline) {
Text(title)
.font(.headline)
if isStale {
Image(systemSymbol: .exclamationmarkTriangle)
.foregroundStyle(.yellow)
}
Spacer()
Button("Select") {
guard let url = openFolderSelectionPanel() else {
return
}
DispatchQueue.main.async {
update(url)
}
}
}
Text(folder?.path() ?? "No folder selected")
.padding(.bottom, 5)
Text(footer)
.foregroundStyle(.secondary)
.padding(.bottom)
}
}
private func openFolderSelectionPanel() -> URL? {
let panel = NSOpenPanel()
// Sets up so user can only select a single directory
panel.canChooseFiles = false
panel.canChooseDirectories = true
panel.allowsMultipleSelection = false
panel.showsHiddenFiles = false
panel.title = "Select directory"
//panel.prompt = "Select Directory"
let response = panel.runModal()
guard response == .OK else {
return nil
}
guard let url = panel.url else {
return nil
}
return url
}
}