Monorepo for Tangled tangled.org

appview: implement follower and following pages for users #484

merged opened by ptr.pet targeting master from [deleted fork]: followers-following-list
Labels

None yet.

assignee

None yet.

Participants 2
AT URI
at://did:plc:dfl62fgb7wtjj3fcbb72naae/sh.tangled.repo.pull/3lwawsuk3de22
+10 -5
Interdiff #5 #6
appview/db/profile.go

This file has not been changed.

appview/db/timeline.go

This file has not been changed.

appview/pages/funcmap.go

This file has not been changed.

+1
appview/pages/pages.go
··· 436 437 type FollowCard struct { 438 UserDid string 439 UserDisplayName string 440 FollowStatus db.FollowStatus 441 FollowersCount int
··· 436 437 type FollowCard struct { 438 UserDid string 439 + UserHandle string 440 UserDisplayName string 441 FollowStatus db.FollowStatus 442 FollowersCount int
appview/pages/templates/timeline.html

This file has not been changed.

appview/pages/templates/user/followers.html

This file has not been changed.

appview/pages/templates/user/following.html

This file has not been changed.

appview/pages/templates/user/fragments/follow.html

This file has not been changed.

+3 -2
appview/pages/templates/user/fragments/followCard.html
··· 1 {{ define "user/fragments/followCard" }} 2 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm"> 3 <div class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800 flex items-center gap-4"> 4 <div class="flex-shrink-0 max-h-full w-24 h-24"> 5 - <img class="object-cover rounded-full p-2" src="{{ fullAvatar .UserDid }}" /> 6 </div> 7 8 <div class="flex-1 min-h-0 justify-around flex flex-col"> 9 - <a href="/{{ .UserDid }}"> 10 <span class="font-bold dark:text-white overflow-hidden text-ellipsis whitespace-nowrap max-w-full">{{ .UserDisplayName | truncateAt30 }}</span> 11 </a> 12 <p class="text-sm pb-2 md:pb-2">{{.Profile.Description}}</p>
··· 1 {{ define "user/fragments/followCard" }} 2 + {{ $userIdent := didOrHandle .UserDid .UserHandle }} 3 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm"> 4 <div class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800 flex items-center gap-4"> 5 <div class="flex-shrink-0 max-h-full w-24 h-24"> 6 + <img class="object-cover rounded-full p-2" src="{{ fullAvatar $userIdent }}" /> 7 </div> 8 9 <div class="flex-1 min-h-0 justify-around flex flex-col"> 10 + <a href="/{{ $userIdent }}"> 11 <span class="font-bold dark:text-white overflow-hidden text-ellipsis whitespace-nowrap max-w-full">{{ .UserDisplayName | truncateAt30 }}</span> 12 </a> 13 <p class="text-sm pb-2 md:pb-2">{{.Profile.Description}}</p>
appview/pages/templates/user/fragments/profileCard.html

This file has not been changed.

+6 -3
appview/state/profile.go
··· 227 followCards := make([]pages.FollowCard, 0, len(follows)) 228 for _, did := range followDids { 229 var handle string 230 if ident, err := s.idResolver.ResolveIdent(ctx, did); err != nil { 231 log.Printf("can't resolve handle for %s: %s", did, err) 232 - handle = did 233 } else if ident.Handle.IsInvalidHandle() { 234 - handle = fmt.Sprintf("handle.invalid (%s)", did) 235 } else { 236 handle = ident.Handle.String() 237 } 238 followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) ··· 256 } 257 followCards = append(followCards, pages.FollowCard{ 258 UserDid: did, 259 - UserDisplayName: handle, 260 FollowStatus: followStatus, 261 FollowersCount: followersCount, 262 FollowingCount: followingCount,
··· 227 followCards := make([]pages.FollowCard, 0, len(follows)) 228 for _, did := range followDids { 229 var handle string 230 + var displayName string 231 if ident, err := s.idResolver.ResolveIdent(ctx, did); err != nil { 232 log.Printf("can't resolve handle for %s: %s", did, err) 233 + displayName = did 234 } else if ident.Handle.IsInvalidHandle() { 235 + displayName = fmt.Sprintf("handle.invalid (%s)", did) 236 } else { 237 + displayName = ident.Handle.String() 238 handle = ident.Handle.String() 239 } 240 followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) ··· 258 } 259 followCards = append(followCards, pages.FollowCard{ 260 UserDid: did, 261 + UserHandle: handle, 262 + UserDisplayName: displayName, 263 FollowStatus: followStatus, 264 FollowersCount: followersCount, 265 FollowingCount: followingCount,
appview/state/router.go

This file has not been changed.

appview/strings/strings.go

This file has not been changed.

History

14 rounds 6 comments
sign up or login to add to the discussion
1 commit
expand
cb75b373
appview: implement follower and following pages for users
expand 0 comments
pull request successfully merged
1 commit
expand
98413d89
appview: implement follower and following pages for users
expand 0 comments
1 commit
expand
118fb342
appview: implement follower and following pages for users
expand 0 comments
1 commit
expand
7a5c931a
appview: implement follower and following pages for users
expand 0 comments
1 commit
expand
773aa964
appview: implement follower and following pages for users
expand 1 comment
  • fixed timeline linking to wrong user (forgot to use subjectHandle instead of userHandle)
  • use ?tab= for followers / following like repo page does
  • fix repos opengraph url from /repos to ?tab=repos
1 commit
expand
ece60a35
appview: implement follower and following pages for users
expand 1 comment
  • added following / follower page links to timeline and follow cards
  • also added followers and following to profile tab switch case
1 commit
expand
a8bcde9d
appview: implement follower and following pages for users
expand 1 comment

using resolve in html instead of resolving handles in go code, and dedupped followers/followingPage into followPage

1 commit
expand
a285cd0f
appview: implement follower and following pages for users
expand 0 comments
1 commit
expand
3c2d8223
appview: implement follower and following pages for users
expand 1 comment

fixed some issues now that i got my dev setup working again

1 commit
expand
90b0a392
appview: implement follower and following pages for users
expand 1 comment

comments from #1 should be addressed now

on top of that changed GetProfiles to return a map instead of array, which seemed easier to do since it internally uses a map anyway and both places it's used in need it as a map

1 commit
expand
0dfc15e9
appview: implement follower and following pages for users
expand 0 comments
1 commit
expand
9643a898
appview: implement follower and following pages for users
expand 0 comments
1 commit
expand
cf9a2ce8
appview: implement follower and following pages for users
expand 1 comment

the pages themselves look pretty good for a start!

  • i'd like to add follower-following count to each item (to make these identical to the profile cards in the timeline)
  • this GetProfile call results in an N+1 query. we have a helper called GetProfiles to help with this, you can get profiles of multiple DIDs in one DB call. db/timeline.go has an example of the same.

overall, i'm loving this stack!

ptr.pet submitted #0
1 commit
expand
cbdbaf6d
appview: implement follower and following pages for users
expand 0 comments