OTP/OTP/Views/FolderRow.swift

81 lines
2.6 KiB
Swift

//
// FolderRow.swift
// OTP
//
// Created by Shadowfacts on 8/24/21.
//
import SwiftUI
struct FolderRow: View {
@ObservedObject private var store: KeyStore
@State private var folder: KeyData.Folder
@State private var editing = false
@FocusState private var focused: Bool
@State private var isTargetedForDrop = false
init(store: KeyStore, folder: KeyData.Folder) {
self.store = store
self._folder = State(initialValue: folder)
}
var body: some View {
NavigationLink {
FolderView(folder: folder)
} label: {
HStack {
Image(systemName: "folder.fill")
.foregroundColor(.accentColor)
if editing {
TextField("Name", text: $folder.name)
.focused($focused)
.submitLabel(.done)
.onSubmit {
withAnimation {
store.updateFolder(folder)
}
editing = false
focused = false
}
} else {
Text(folder.name)
}
}
// .background(isTargetedForDrop ? Color.red : nil)
// .onDrop(of: [.text], isTargeted: $isTargetedForDrop) { (itemProviders) in
// guard let provider = itemProviders.first,
// provider.canLoadObject(ofClass: NSString.self) else {
// return false
// }
// provider.loadObject(ofClass: NSString.self) { (idString, error) in
// guard error == nil,
// let idString = idString as? NSString,
// let id = UUID(uuidString: idString as String) else {
// return
// }
// store.moveEntryToFolder(entryID: id, folderID: folder.id)
// }
// return true
// }
}
.contextMenu {
Button {
editing = true
// just waiting 1 runloop iteration does not work for some reason :/
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
focused = true
}
} label: {
Label("Rename Folder", systemImage: "pencil")
}
}
}
}
struct FolderRow_Previews: PreviewProvider {
static var previews: some View {
FolderRow(store: .shared, folder: .init(name: "Test"))
}
}