-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathListViewView.swift
102 lines (96 loc) · 4.66 KB
/
ListViewView.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// ListView.swift
// BloggerWatch WatchKit Extension
//
// Created by 莊智凱 on 2022/1/11.
//
import SwiftUI
struct ListView: View {
@StateObject var bloggerFeedViewModel = BloggerFeedViewModel()
@StateObject var bloggerSearchFeedViewModel = BloggerSearchFeedViewModel()
@State private var showTagDelete = false
@State private var maxResults = 10
var selectTag: String
var body: some View {
GeometryReader { geo in
NavigationView {
List {
if selectTag == "posts" || selectTag == "pages" {
if let entry = bloggerFeedViewModel.feed?.entry {
ForEach(entry, id: \.id.id) { entry in
HStack {
VStack(alignment: .leading) {
Text(entry.title.title).lineLimit(2)
Text(entry.published.published, format: .dateTime.year().month().day()).font(.caption).foregroundColor(.gray)
}
if let thumbnail = entry.thumbnail {
let resVarId = thumbnail.url.lastIndex(of: "s") ?? thumbnail.url.endIndex
let fullResUrl = thumbnail.url[..<resVarId]
Spacer()
AsyncImage(url: URL(string: fullResUrl + "s720")) { image in
image
.resizable()
.scaledToFill()
} placeholder: {
Color.gray.overlay {
ProgressView()
}
}
.frame(width: geo.size.width/4, height: geo.size.width/4)
.clipped()
}
}
}
if let feed = bloggerFeedViewModel.feed {
if maxResults <= Int(feed.postNum.postNum)! {
ProgressView()
.frame(maxWidth: .infinity)
.onAppear {
maxResults += 10
bloggerFeedViewModel.fetchFeed(term: selectTag, maxResults: maxResults)
}
}
}
}
} else {
if let entry = bloggerSearchFeedViewModel.feed?.entry {
ForEach(entry, id: \.id.id) { entry in
HStack {
VStack(alignment: .leading) {
Text(entry.title.title).lineLimit(2)
Text(entry.published.published, format: .dateTime.year().month().day()).font(.caption).foregroundColor(.gray)
}
if let thumbnail = entry.thumbnail {
let resVarId = thumbnail.url.lastIndex(of: "s") ?? thumbnail.url.endIndex
let fullResUrl = thumbnail.url[..<resVarId]
Spacer()
AsyncImage(url: URL(string: fullResUrl + "s480")) { image in
image
.resizable()
.scaledToFill()
} placeholder: {
Color.gray.overlay {
ProgressView()
}
}
.frame(width: geo.size.width/4, height: geo.size.width/4)
.clipped()
}
}
}
}
}
}
.navigationBarTitle(selectTag)
.navigationBarTitleDisplayMode(.inline)
.onAppear {
if selectTag == "posts" || selectTag == "pages" {
bloggerFeedViewModel.fetchFeed(term: selectTag, maxResults: maxResults)
} else {
bloggerSearchFeedViewModel.fetchSearchFeed(term: selectTag)
}
}
}
}
}
}