81 lines
2.6 KiB
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"))
|
|
}
|
|
}
|