// // TagBarView.swift // Todos // // Created by Sam Jaffe on 2/28/26. // import SwiftUI import SwiftData struct TagBarView: View { @Environment(\.modelContext) private var modelContext @Binding var task: Task @AppStorage(UserDefaultsKeys.UrlHints) var allHints = CodableArray() @State private var active: String = "" @FocusState private var isFocused: Bool var body: some View { HStack { ForEach($task.tags) { tag in if let url = allHints.filter({ $0.matches(tag.wrappedValue) }) .first?.url(tag.wrappedValue) { Link(destination: url) { Label("", systemImage: "link") } .padding(.leading, -8) .padding(.trailing, -10) } TextField("", text: tag.id) .focused($isFocused) .onChange(of: isFocused) { task.tags.removeAll(where: { $0.id.isEmpty }) } } .scaledToFit() TextField("Tag", text: $active) .onSubmit(addItem) } } private func addItem() { if !active.isEmpty && !task.tags.contains(where: { $0.like(active) }) { let newTag = Tag(id: active, parent: task) modelContext.insert(newTag) task.tags.append(newTag) } active = "" } } #Preview { @Previewable @State var task = Task() TagBarView(task: $task) }