// // 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")) } }