-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContentView.swift
82 lines (75 loc) · 2.25 KB
/
ContentView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//
// ContentView.swift
// SwiftUI iOS 15
//
// Created by Vincent on 10/09/2021.
//
import SwiftUI
struct ContentView: View {
@State var movies = [Movie]()
@State var filter = ""
@State var movieToShare: Movie? = nil
@State var currentPage = 1
var filteredMovies: [Movie] {
if filter.isEmpty {
return movies
} else {
return movies.filter { $0.title.hasPrefix(filter) }
}
}
var body: some View {
List(filteredMovies) { movie in
HStack(spacing: 10) {
AsyncImage(url: movie.posterURL) { image in
image
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 100)
} placeholder: {
ProgressView()
.frame(width: 100)
}
VStack(alignment: .leading, spacing: 10) {
Text(movie.title)
.font(.headline)
Text(movie.overview)
.lineLimit(3)
.font(.subheadline)
}
}
.sheet(item: $movieToShare) { movie in
ShareSheet(activityItems: [movie.title, movie.overview])
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
Button(action: {
movieToShare = movie
}) {
Label("Share",
systemImage: "square.and.arrow.up")
}
.tint(Color.yellow)
}
.task {
if movie == movies.last {
currentPage += 1
movies += await loadMovies(page: currentPage)
}
}
}
.task {
movies = await loadMovies()
}
.refreshable {
movies = await loadMovies().shuffled()
}
.navigationTitle("Upcoming")
.searchable(text: $filter, prompt: "Filter")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
ContentView()
}
}
}