Monorepo for Tangled tangled.org

appview/{db,pages}: show star/unstar buttons on star events

Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>

anirudh.fi 1fc4863f 796f739c

verified
Changed files
+53 -27
appview
db
pages
templates
timeline
fragments
+49 -24
appview/db/timeline.go
··· 37 37 return nil, err 38 38 } 39 39 40 - stars, err := getTimelineStars(e, limit) 40 + stars, err := getTimelineStars(e, limit, loggedInUserDid) 41 41 if err != nil { 42 42 return nil, err 43 43 } ··· 63 63 return events, nil 64 64 } 65 65 66 + func fetchStarStatuses(e Execer, loggedInUserDid string, repos []Repo) (map[string]bool, error) { 67 + if loggedInUserDid == "" { 68 + return nil, nil 69 + } 70 + 71 + var repoAts []syntax.ATURI 72 + for _, r := range repos { 73 + repoAts = append(repoAts, r.RepoAt()) 74 + } 75 + 76 + return GetStarStatuses(e, loggedInUserDid, repoAts) 77 + } 78 + 79 + func getRepoStarInfo(repo *Repo, starStatuses map[string]bool) (bool, int64) { 80 + var isStarred bool 81 + if starStatuses != nil { 82 + isStarred = starStatuses[repo.RepoAt().String()] 83 + } 84 + 85 + var starCount int64 86 + if repo.RepoStats != nil { 87 + starCount = int64(repo.RepoStats.StarCount) 88 + } 89 + 90 + return isStarred, starCount 91 + } 92 + 66 93 func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 67 94 repos, err := GetRepos(e, limit) 68 95 if err != nil { ··· 90 117 uriToRepo[r.RepoAt().String()] = r 91 118 } 92 119 93 - var starStatuses map[string]bool 94 - if loggedInUserDid != "" { 95 - var repoAts []syntax.ATURI 96 - for _, r := range repos { 97 - repoAts = append(repoAts, r.RepoAt()) 98 - } 99 - var err error 100 - starStatuses, err = GetStarStatuses(e, loggedInUserDid, repoAts) 101 - if err != nil { 102 - return nil, err 103 - } 120 + starStatuses, err := fetchStarStatuses(e, loggedInUserDid, repos) 121 + if err != nil { 122 + return nil, err 104 123 } 105 124 106 125 var events []TimelineEvent ··· 112 131 } 113 132 } 114 133 115 - var isStarred bool 116 - if starStatuses != nil { 117 - isStarred = starStatuses[r.RepoAt().String()] 118 - } 119 - 120 - var starCount int64 121 - if r.RepoStats != nil { 122 - starCount = int64(r.RepoStats.StarCount) 123 - } 134 + isStarred, starCount := getRepoStarInfo(&r, starStatuses) 124 135 125 136 events = append(events, TimelineEvent{ 126 137 Repo: &r, ··· 134 145 return events, nil 135 146 } 136 147 137 - func getTimelineStars(e Execer, limit int) ([]TimelineEvent, error) { 148 + func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 138 149 stars, err := GetStars(e, limit) 139 150 if err != nil { 140 151 return nil, err ··· 150 161 } 151 162 stars = stars[:n] 152 163 164 + var repos []Repo 165 + for _, s := range stars { 166 + repos = append(repos, *s.Repo) 167 + } 168 + 169 + starStatuses, err := fetchStarStatuses(e, loggedInUserDid, repos) 170 + if err != nil { 171 + return nil, err 172 + } 173 + 153 174 var events []TimelineEvent 154 175 for _, s := range stars { 176 + isStarred, starCount := getRepoStarInfo(s.Repo, starStatuses) 177 + 155 178 events = append(events, TimelineEvent{ 156 - Star: &s, 157 - EventAt: s.Created, 179 + Star: &s, 180 + EventAt: s.Created, 181 + IsStarred: isStarred, 182 + StarCount: starCount, 158 183 }) 159 184 } 160 185
+4 -3
appview/pages/templates/timeline/fragments/timeline.html
··· 15 15 {{ if .Repo }} 16 16 {{ template "timeline/fragments/repoEvent" (list $ .) }} 17 17 {{ else if .Star }} 18 - {{ template "timeline/fragments/starEvent" (list $ .Star) }} 18 + {{ template "timeline/fragments/starEvent" (list $ .) }} 19 19 {{ else if .Follow }} 20 20 {{ template "timeline/fragments/followEvent" (list $ .) }} 21 21 {{ end }} ··· 58 58 59 59 {{ define "timeline/fragments/starEvent" }} 60 60 {{ $root := index . 0 }} 61 - {{ $star := index . 1 }} 61 + {{ $event := index . 1 }} 62 + {{ $star := $event.Star }} 62 63 {{ with $star }} 63 64 {{ $starrerHandle := resolve .StarredByDid }} 64 65 {{ $repoOwnerHandle := resolve .Repo.Did }} ··· 71 72 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" .Created }}</span> 72 73 </div> 73 74 {{ with .Repo }} 74 - {{ template "user/fragments/repoCard" (list $root . true) }} 75 + {{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }} 75 76 {{ end }} 76 77 {{ end }} 77 78 {{ end }}