Skip to content

Commit 48ff6e7

Browse files
committed
add list placeholder
1 parent d39b504 commit 48ff6e7

File tree

5 files changed

+74
-38
lines changed

5 files changed

+74
-38
lines changed

iosApp/flare/Localizable.xcstrings

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
},
219219
"like" : {
220220

221+
},
222+
"list description" : {
223+
224+
},
225+
"list title" : {
226+
221227
},
222228
"local_filter_title" : {
223229

iosApp/flare/UI/Component/PagingView.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,14 @@ extension PagingView {
4545
) where ErrorContent == EmptyView, LoadingContent == EmptyView, EmptyContent == EmptyView {
4646
self.init(data: data, emptyContent: { EmptyView() }, errorContent: {_ in EmptyView()}, loadingContent: {EmptyView()}, successContent: successContent)
4747
}
48+
49+
init(
50+
data: PagingState<T>,
51+
@ViewBuilder
52+
successContent: @escaping (T) -> SuccessContent,
53+
@ViewBuilder
54+
loadingContent: @escaping () -> LoadingContent
55+
) where ErrorContent == EmptyView, EmptyContent == EmptyView {
56+
self.init(data: data, emptyContent: { EmptyView() }, errorContent: {_ in EmptyView()}, loadingContent: loadingContent, successContent: successContent)
57+
}
4858
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import SwiftUI
2+
import KotlinSharedUI
3+
4+
struct UiListView: View {
5+
let data: UiList
6+
var body: some View {
7+
VStack(
8+
alignment: .leading,
9+
spacing: 8
10+
) {
11+
Label {
12+
Text(data.title)
13+
} icon: {
14+
if let image = data.avatar {
15+
AvatarView(data: image)
16+
.frame(width: 24, height: 24)
17+
} else {
18+
Image("fa-list")
19+
}
20+
}
21+
if let desc = data.description_, !desc.isEmpty {
22+
Text(desc)
23+
.font(.caption)
24+
.foregroundStyle(.secondary)
25+
}
26+
}
27+
}
28+
}
29+
30+
struct UiListPlaceholder: View {
31+
var body: some View {
32+
VStack(
33+
alignment: .leading,
34+
spacing: 8
35+
) {
36+
HStack {
37+
Rectangle()
38+
.fill(.placeholder)
39+
.frame(width: 24, height: 24)
40+
.clipShape(.circle)
41+
Text("list title")
42+
}
43+
Text("list description")
44+
.font(.caption)
45+
.foregroundStyle(.secondary)
46+
}
47+
.redacted(reason: .placeholder)
48+
}
49+
}

iosApp/flare/UI/Screen/AllFeedScreen.swift

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,10 @@ struct AllFeedScreen: View {
2020
Bluesky.FeedTabItem(account: accountType, uri: item.id, metaData: .init(title: TitleType.Text(content: item.title), icon: IconType.Material(icon: .feeds)))
2121
)
2222
) {
23-
Label {
24-
Text(item.title)
25-
} icon: {
26-
if let image = item.avatar {
27-
AvatarView(data: image)
28-
} else {
29-
Image("fa-list")
30-
}
31-
}
23+
UiListView(data: item)
3224
}
25+
} loadingContent: {
26+
UiListPlaceholder()
3327
}
3428
} header: {
3529
Text("all_feeds_section_my_feeds")
@@ -44,28 +38,11 @@ struct AllFeedScreen: View {
4438
Bluesky.FeedTabItem(account: accountType, uri: item.id, metaData: .init(title: TitleType.Text(content: item.title), icon: IconType.Material(icon: .feeds)))
4539
)
4640
) {
47-
VStack(
48-
alignment: .leading,
49-
spacing: 8
50-
) {
51-
Label {
52-
Text(item.title)
53-
} icon: {
54-
if let image = item.avatar {
55-
AvatarView(data: image)
56-
.frame(width: 24, height: 24)
57-
} else {
58-
Image("fa-list")
59-
}
60-
}
61-
if let desc = item.description_, !desc.isEmpty {
62-
Text(desc)
63-
.font(.caption)
64-
.foregroundStyle(.secondary)
65-
}
66-
}
41+
UiListView(data: item)
6742
}
6843
}
44+
} loadingContent: {
45+
UiListPlaceholder()
6946
}
7047
} header: {
7148
Text("all_feeds_section_explore_feeds")

iosApp/flare/UI/Screen/AllListScreen.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,10 @@ struct AllListScreen: View {
2626
)
2727
)
2828
) {
29-
Label {
30-
Text(item.title)
31-
} icon: {
32-
if let image = item.avatar {
33-
AvatarView(data: image)
34-
} else {
35-
Image("fa-list")
36-
}
37-
}
29+
UiListView(data: item)
3830
}
31+
} loadingContent: {
32+
UiListPlaceholder()
3933
}
4034
}
4135
.navigationTitle("all_lists_title")

0 commit comments

Comments
 (0)