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

merged
opened by anirudh.fi targeting master from push-qrltzqmlrlln
Changed files
+73 -9
appview
db
pages
templates
timeline
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
+52 -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 + <div class="py-4 px-6 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800 min-h-32"> 56 + <div class="flex items-center justify-between"> 57 + <div class="font-medium dark:text-white flex items-center"> 58 + {{ if .Source }} 59 + {{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }} 60 + {{ else }} 61 + {{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }} 62 + {{ end }} 63 + 64 + {{ $repoOwner := resolve .Did }} 65 + <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a> 66 + </div> 67 + 68 + {{ if $root.LoggedInUser }} 69 + {{ template "repo/fragments/repoStar" (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount)) }} 70 + {{ end }} 71 + </div> 72 + 73 + {{ with .Description }} 74 + <div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2"> 75 + {{ . | description }} 76 + </div> 77 + {{ end }} 78 + 79 + {{ if .RepoStats }} 80 + <div class="text-gray-400 text-sm font-mono inline-flex gap-4 mt-auto"> 81 + {{ with .RepoStats.Language }} 82 + <div class="flex gap-2 items-center text-sm"> 83 + <div class="size-2 rounded-full" 84 + style="background: radial-gradient(circle at 35% 35%, color-mix(in srgb, {{ langColor . }} 70%, white), {{ langColor . }} 30%, color-mix(in srgb, {{ langColor . }} 85%, black));"></div> 85 + <span>{{ . }}</span> 86 + </div> 87 + {{ end }} 88 + {{ with .RepoStats.IssueCount.Open }} 89 + <div class="flex gap-1 items-center text-sm"> 90 + {{ i "circle-dot" "w-3 h-3" }} 91 + <span>{{ . }}</span> 92 + </div> 93 + {{ end }} 94 + {{ with .RepoStats.PullCount.Open }} 95 + <div class="flex gap-1 items-center text-sm"> 96 + {{ i "git-pull-request" "w-3 h-3" }} 97 + <span>{{ . }}</span> 98 + </div> 99 + {{ end }} 100 + </div> 101 + {{ end }} 102 + </div> 55 103 {{ end }} 56 104 {{ end }} 57 105