60 lines
1.6 KiB
Swift
60 lines
1.6 KiB
Swift
//
|
|
// CourseCatalogView.swift
|
|
// CourseCatalogView
|
|
//
|
|
// Created by Felix Förtsch on 01.08.21.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct CourseCatalogView: View {
|
|
|
|
var courses: [Course] {
|
|
let url = Bundle.main.url(forResource: "courses", withExtension: "json")!
|
|
let data = try! Data(contentsOf: url)
|
|
let decoder = JSONDecoder()
|
|
var courses = try? decoder.decode([Course].self, from: data)
|
|
|
|
courses?.sort(by: { $0.name < $1.name })
|
|
return courses!
|
|
}
|
|
|
|
@State var searchText = ""
|
|
|
|
var searchResults: [Course] {
|
|
if searchText.isEmpty {
|
|
return courses
|
|
} else {
|
|
return courses.filter { $0.name.contains(searchText) }
|
|
}
|
|
}
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
List {
|
|
ForEach(searchResults, id: \.self) { item in
|
|
|
|
NavigationLink(destination: CourseDetailsView(item)) {
|
|
VStack(alignment: .leading) {
|
|
Text(item.name)
|
|
Text(item.type)
|
|
.font(.subheadline)
|
|
.foregroundColor(Color.gray)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.searchable(text: $searchText)
|
|
.navigationBarTitle("Courses")
|
|
}
|
|
}
|
|
}
|
|
|
|
struct CourseCatalogView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
Group {
|
|
CourseCatalogView().preferredColorScheme(.dark)
|
|
}
|
|
}
|
|
}
|