58 lines
1.4 KiB
Swift
58 lines
1.4 KiB
Swift
//
|
|
// ListDemo.swift
|
|
// Adwaita
|
|
//
|
|
// Created by david-swift on 01.01.24.
|
|
//
|
|
|
|
// swiftlint:disable missing_docs
|
|
|
|
import Adwaita
|
|
import Foundation
|
|
|
|
struct ListDemo: View {
|
|
|
|
@State private var items: [Element] = []
|
|
@State private var selectedItem = ""
|
|
|
|
var view: Body {
|
|
HStack {
|
|
Button("Add Row") {
|
|
let element = Element(id: UUID().uuidString)
|
|
items.append(element)
|
|
selectedItem = element.id
|
|
}
|
|
Button("Delete Selected Row") {
|
|
let index = items.firstIndex { $0.id == selectedItem }
|
|
items = items.filter { $0.id != selectedItem }
|
|
selectedItem = items[safe: index]?.id ?? items[safe: index ?? 0 - 1]?.id ?? items.first?.id ?? ""
|
|
}
|
|
}
|
|
.linked()
|
|
.padding()
|
|
.halign(.center)
|
|
if !items.isEmpty {
|
|
List(items, selection: $selectedItem) { item in
|
|
HStack {
|
|
Text("\(item.id)")
|
|
.hexpand()
|
|
}
|
|
.padding()
|
|
}
|
|
.boxedList()
|
|
.valign(.center)
|
|
.padding()
|
|
}
|
|
}
|
|
|
|
struct Element: Identifiable, CustomStringConvertible, Equatable {
|
|
|
|
var id: String
|
|
var description: String { id }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// swiftlint:enable missing_docs
|