// // SeriesConfiguration.swift // Meshtastic // // Created by Jake Bordens on 12/7/24. // import SwiftUI class MetricsColumnList: ObservableObject, RandomAccessCollection, RangeReplaceableCollection { @Published var columns: [MetricsTableColumn] init(columns: [MetricsTableColumn]) { self.columns = columns } var visible: [MetricsTableColumn] { return columns.filter { $0.visible } } func toggleVisibity(for column: MetricsTableColumn) { if columns.contains(column) { self.objectWillChange.send() column.visible.toggle() } } var gridItems: [GridItem] { var returnValues: [GridItem] = [] let columnsInChart = self.visible for i in 0.. MetricsTableColumn? { return columns.first(where: { $0.attribute == attribute}) } // Collection conformance typealias Index = Int typealias Element = MetricsTableColumn typealias SubSequence = ArraySlice required init() { columns = [] } required init(_ columns: S) where S.Element == Element { self.columns = Array(columns) } var startIndex: Int { columns.startIndex } var endIndex: Int { columns.endIndex } subscript(position: Int) -> Element { get { columns[position] } set { objectWillChange.send() columns[position] = newValue } } subscript(bounds: Range) -> ArraySlice { columns[bounds] } func index(after i: Int) -> Int { columns.index(after: i) } func replaceSubrange(_ subrange: Range, with newElements: C) where C.Element == Element { objectWillChange.send() columns.replaceSubrange(subrange, with: newElements) } func append(_ newElement: Element) { columns.append(newElement) objectWillChange.send() } func remove(at index: Int) -> Element { objectWillChange.send() let removedElement = columns.remove(at: index) return removedElement } func removeAll() { objectWillChange.send() columns.removeAll() } func insert(_ newElement: Element, at index: Int) { objectWillChange.send() columns.insert(newElement, at: index) } }