| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- //
- // TagBarView.swift
- // Todos
- //
- // Created by Sam Jaffe on 2/28/26.
- //
- import SwiftUI
- import SwiftData
- struct TagBarView: View {
- @Binding var tags: [Tag]
- @EnvironmentObject var allHints: URLHintArray
- @State private var active: String = ""
- @FocusState private var isFocused: Bool
-
- var body: some View {
- HStack {
- ForEach($tags) { tag in
- let url = allHints.array.filter({ $0.matches(tag.wrappedValue) })
- .first?.url(tag.wrappedValue)
- if url != nil {
- Link(destination: url!) {
- Label("", systemImage: "link")
- }
- .padding(.leading, -8)
- .padding(.trailing, -10)
- }
- TextField("", text: tag.id)
- .focused($isFocused)
- .onChange(of: isFocused) {
- tags.removeAll(where: { $0.id.isEmpty })
- }
- }
- .scaledToFit()
- TextField("Tag", text: $active)
- .onSubmit {
- if !tags.contains(where: { $0.like(active) }) {
- tags.append(Tag(id: active))
- }
- active = ""
- }
- }
- }
- }
- #Preview {
- @Previewable @State var tags = Array<Tag>()
- @Previewable @State var allHints = URLHintArray([
- URLHint(prefix: "RPD:", replacement: "http://localhost/")
- ])
- TagBarView(tags: $tags)
- .environmentObject(allHints)
- }
|