appview/{pages,db}: show star/unstar buttons on the timeline #554

merged
opened by anirudh.fi targeting master from push-qrltzqmlrlln
Changed files
+47 -16
appview
db
pages
templates
timeline
fragments
user
fragments
+21 -5
appview/db/timeline.go
··· 19 19 *Profile 20 20 *FollowStats 21 21 *FollowStatus 22 + 23 + // optional: populate only if event is Repo 24 + IsStarred bool 25 + StarCount int64 22 26 } 23 27 24 28 // TODO: this gathers heterogenous events from different sources and aggregates ··· 26 30 func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 27 31 var events []TimelineEvent 28 32 29 - repos, err := getTimelineRepos(e, limit) 33 + repos, err := getTimelineRepos(e, limit, loggedInUserDid) 30 34 if err != nil { 31 35 return nil, err 32 36 } ··· 57 61 return events, nil 58 62 } 59 63 60 - func getTimelineRepos(e Execer, limit int) ([]TimelineEvent, error) { 64 + func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 61 65 repos, err := GetRepos(e, limit) 62 66 if err != nil { 63 67 return nil, err ··· 93 97 } 94 98 } 95 99 100 + var isStarred bool 101 + if loggedInUserDid != "" { 102 + isStarred = GetStarStatus(e, loggedInUserDid, r.RepoAt()) 103 + } 104 + 105 + var starCount int64 106 + if r.RepoStats != nil { 107 + starCount = int64(r.RepoStats.StarCount) 108 + } 109 + 96 110 events = append(events, TimelineEvent{ 97 - Repo: &r, 98 - EventAt: r.Created, 99 - Source: source, 111 + Repo: &r, 112 + EventAt: r.Created, 113 + Source: source, 114 + IsStarred: isStarred, 115 + StarCount: starCount, 100 116 }) 101 117 } 102 118
+5 -4
appview/pages/templates/timeline/fragments/timeline.html
··· 13 13 {{ with $e }} 14 14 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm"> 15 15 {{ if .Repo }} 16 - {{ template "timeline/fragments/repoEvent" (list $ .Repo .Source) }} 16 + {{ template "timeline/fragments/repoEvent" (list $ .) }} 17 17 {{ else if .Star }} 18 18 {{ template "timeline/fragments/starEvent" (list $ .Star) }} 19 19 {{ else if .Follow }} ··· 29 29 30 30 {{ define "timeline/fragments/repoEvent" }} 31 31 {{ $root := index . 0 }} 32 - {{ $repo := index . 1 }} 33 - {{ $source := index . 2 }} 32 + {{ $event := index . 1 }} 33 + {{ $repo := $event.Repo }} 34 + {{ $source := $event.Source }} 34 35 {{ $userHandle := resolve $repo.Did }} 35 36 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm"> 36 37 {{ template "user/fragments/picHandleLink" $repo.Did }} ··· 51 52 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span> 52 53 </div> 53 54 {{ with $repo }} 54 - {{ template "user/fragments/repoCard" (list $root . true) }} 55 + {{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }} 55 56 {{ end }} 56 57 {{ end }} 57 58
+21 -7
appview/pages/templates/user/fragments/repoCard.html
··· 2 2 {{ $root := index . 0 }} 3 3 {{ $repo := index . 1 }} 4 4 {{ $fullName := index . 2 }} 5 + {{ $starButton := false }} 6 + {{ $starData := dict }} 7 + {{ if gt (len .) 3 }} 8 + {{ $starButton = index . 3 }} 9 + {{ if gt (len .) 4 }} 10 + {{ $starData = index . 4 }} 11 + {{ end }} 12 + {{ end }} 5 13 6 14 {{ with $repo }} 7 15 <div class="py-4 px-6 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800 min-h-32"> 8 - <div class="font-medium dark:text-white flex items-center"> 16 + <div class="font-medium dark:text-white flex items-center justify-between"> 17 + <div class="flex items-center"> 9 18 {{ if .Source }} 10 19 {{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }} 11 20 {{ else }} 12 21 {{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }} 13 22 {{ end }} 14 23 15 - {{ $repoOwner := resolve .Did }} 16 - {{- if $fullName -}} 17 - <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a> 18 - {{- else -}} 19 - <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ .Name }}</a> 20 - {{- end -}} 24 + {{ $repoOwner := resolve .Did }} 25 + {{- if $fullName -}} 26 + <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a> 27 + {{- else -}} 28 + <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ .Name }}</a> 29 + {{- end -}} 30 + </div> 31 + 32 + {{ if and $starButton $root.LoggedInUser }} 33 + {{ template "repo/fragments/repoStar" $starData }} 34 + {{ end }} 21 35 </div> 22 36 {{ with .Description }} 23 37 <div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2">