@@ -10,38 +10,49 @@ import V2exAPI
1010import Kingfisher
1111
1212struct TopicListCellView : View {
13+ @State var isMemberLoading = false
1314
1415 @Environment ( \. colorScheme) var colorScheme
1516
1617 let topic : V2Topic
18+ @State var member : V2Member ?
19+
20+ init ( topic: V2Topic ) {
21+ self . topic = topic
22+ self . isMemberLoading = topic. member == nil
23+ }
1724
1825 var body : some View {
1926 NavigationLink {
2027 TopicDetailView ( topic: topic)
2128 } label: {
2229
2330 HStack {
24- if let avatarUrl = topic. member? . avatarLarge {
25- KFImage . url ( URL ( string: avatarUrl) )
26- . resizable ( )
27- . fade ( duration: 0.25 )
28- . scaledToFit ( )
29- . frame ( width: 48 , height: 48 )
30- . mask ( RoundedRectangle ( cornerRadius: 8 ) )
31+
32+ if !isMemberLoading {
33+ let user = topic. member ?? member
34+ if let avatarUrl = user? . avatarLarge {
35+ KFImage . url ( URL ( string: avatarUrl) )
36+ . resizable ( )
37+ . fade ( duration: 0.25 )
38+ . scaledToFit ( )
39+ . frame ( width: 48 , height: 48 )
40+ . mask ( RoundedRectangle ( cornerRadius: 8 ) )
41+ }
3142 }
43+
3244 VStack ( alignment: . leading, spacing: 6 ) {
3345
3446 Text ( topic. title ?? " " )
3547 . lineLimit ( 2 )
3648
3749 HStack ( ) {
38- if let username = topic. member? . username {
50+
51+ if let username = topic. member? . username ?? topic. lastReplyBy {
3952 UserName ( username)
40-
4153 Text ( " • " )
4254 }
4355
44-
4556 if let lastModified = topic. lastModified {
4657 Text ( Date . init ( timeIntervalSince1970: TimeInterval ( lastModified) ) . fromNow ( ) )
4758 }
@@ -60,6 +71,12 @@ struct TopicListCellView: View {
6071
6172 }
6273 . foregroundColor ( Color ( NSColor . labelColor) )
74+ . task {
75+ if let name = topic. lastReplyBy {
76+ member = try ? await v2ex. memberShow ( username: name)
77+ isMemberLoading = member == nil
78+ }
79+ }
6380 }
6481 }
6582}
0 commit comments