forked from tangled.org/core
Monorepo for Tangled — https://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
···
return nil, err
}
-
stars, err := getTimelineStars(e, limit)
+
stars, err := getTimelineStars(e, limit, loggedInUserDid)
if err != nil {
return nil, err
}
···
return events, nil
}
+
func fetchStarStatuses(e Execer, loggedInUserDid string, repos []Repo) (map[string]bool, error) {
+
if loggedInUserDid == "" {
+
return nil, nil
+
}
+
+
var repoAts []syntax.ATURI
+
for _, r := range repos {
+
repoAts = append(repoAts, r.RepoAt())
+
}
+
+
return GetStarStatuses(e, loggedInUserDid, repoAts)
+
}
+
+
func getRepoStarInfo(repo *Repo, starStatuses map[string]bool) (bool, int64) {
+
var isStarred bool
+
if starStatuses != nil {
+
isStarred = starStatuses[repo.RepoAt().String()]
+
}
+
+
var starCount int64
+
if repo.RepoStats != nil {
+
starCount = int64(repo.RepoStats.StarCount)
+
}
+
+
return isStarred, starCount
+
}
+
func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
repos, err := GetRepos(e, limit)
if err != nil {
···
uriToRepo[r.RepoAt().String()] = r
}
-
var starStatuses map[string]bool
-
if loggedInUserDid != "" {
-
var repoAts []syntax.ATURI
-
for _, r := range repos {
-
repoAts = append(repoAts, r.RepoAt())
-
}
-
var err error
-
starStatuses, err = GetStarStatuses(e, loggedInUserDid, repoAts)
-
if err != nil {
-
return nil, err
-
}
+
starStatuses, err := fetchStarStatuses(e, loggedInUserDid, repos)
+
if err != nil {
+
return nil, err
}
var events []TimelineEvent
···
}
}
-
var isStarred bool
-
if starStatuses != nil {
-
isStarred = starStatuses[r.RepoAt().String()]
-
}
-
-
var starCount int64
-
if r.RepoStats != nil {
-
starCount = int64(r.RepoStats.StarCount)
-
}
+
isStarred, starCount := getRepoStarInfo(&r, starStatuses)
events = append(events, TimelineEvent{
Repo: &r,
···
return events, nil
}
-
func getTimelineStars(e Execer, limit int) ([]TimelineEvent, error) {
+
func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
stars, err := GetStars(e, limit)
if err != nil {
return nil, err
···
}
stars = stars[:n]
+
var repos []Repo
+
for _, s := range stars {
+
repos = append(repos, *s.Repo)
+
}
+
+
starStatuses, err := fetchStarStatuses(e, loggedInUserDid, repos)
+
if err != nil {
+
return nil, err
+
}
+
var events []TimelineEvent
for _, s := range stars {
+
isStarred, starCount := getRepoStarInfo(s.Repo, starStatuses)
+
events = append(events, TimelineEvent{
-
Star: &s,
-
EventAt: s.Created,
+
Star: &s,
+
EventAt: s.Created,
+
IsStarred: isStarred,
+
StarCount: starCount,
})
}
+4 -3
appview/pages/templates/timeline/fragments/timeline.html
···
{{ if .Repo }}
{{ template "timeline/fragments/repoEvent" (list $ .) }}
{{ else if .Star }}
-
{{ template "timeline/fragments/starEvent" (list $ .Star) }}
+
{{ template "timeline/fragments/starEvent" (list $ .) }}
{{ else if .Follow }}
{{ template "timeline/fragments/followEvent" (list $ .) }}
{{ end }}
···
{{ define "timeline/fragments/starEvent" }}
{{ $root := index . 0 }}
-
{{ $star := index . 1 }}
+
{{ $event := index . 1 }}
+
{{ $star := $event.Star }}
{{ with $star }}
{{ $starrerHandle := resolve .StarredByDid }}
{{ $repoOwnerHandle := resolve .Repo.Did }}
···
<span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" .Created }}</span>
</div>
{{ with .Repo }}
-
{{ template "user/fragments/repoCard" (list $root . true) }}
+
{{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }}
{{ end }}
{{ end }}
{{ end }}