diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 8ef90bbe..5a625d3e 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -672,6 +672,7 @@ func (p *Pages) ProfileOverview(w io.Writer, params ProfileOverviewParams) error type ProfileReposParams struct { LoggedInUser *oauth.MultiAccountUser Repos []models.Repo + StarStatuses map[string]bool Card *ProfileCard Active string Page pagination.Page diff --git a/appview/pages/templates/user/repos.html b/appview/pages/templates/user/repos.html index 1edc6db4..9ae8ffd1 100644 --- a/appview/pages/templates/user/repos.html +++ b/appview/pages/templates/user/repos.html @@ -48,7 +48,11 @@
{{ range .Repos }}
- {{ template "user/fragments/repoCard" (list $ . false) }} + {{ template "user/fragments/repoCard" (list $ . false true (dict + "SubjectAt" .RepoAt + "IsStarred" (index $.StarStatuses .RepoDid) + "StarCount" .RepoStats.StarCount + "RepoName" .Slug)) }}
{{ else }}
diff --git a/appview/state/profile.go b/appview/state/profile.go index a90ff7c4..5519f54e 100644 --- a/appview/state/profile.go +++ b/appview/state/profile.go @@ -263,6 +263,7 @@ func (s *State) reposPage(w http.ResponseWriter, r *http.Request) { var repos []models.Repo var totalRepos int64 + loggedInUser := s.oauth.GetMultiAccountUser(r) if searchOpts.HasSearchFilters() { res, err := s.indexer.Repos.Search(r.Context(), searchOpts) @@ -316,9 +317,27 @@ func (s *State) reposPage(w http.ResponseWriter, r *http.Request) { } } + starStatuses := map[string]bool{} + if loggedInUser != nil { + repoDids := make([]string, 0, len(repos)) + for _, repo := range repos { + if repo.RepoDid != "" { + repoDids = append(repoDids, repo.RepoDid) + } + } + + starStatuses, err = db.GetStarStatuses(s.db, loggedInUser.Did, repoDids) + if err != nil { + l.Error("failed to get repo star statuses", "err", err) + s.pages.Error500(w) + return + } + } + err = s.pages.ProfileRepos(w, pages.ProfileReposParams{ - LoggedInUser: s.oauth.GetMultiAccountUser(r), + LoggedInUser: loggedInUser, Repos: repos, + StarStatuses: starStatuses, Card: profile, Page: page, RepoCount: int(totalRepos),