Monorepo for Tangled tangled.org
856
fork

Configure Feed

Select the types of activity you want to include in your feed.

appview: adds issues into timeline #297

open opened by willdot.net targeting master from willdot.net/tangled-fork: include-issues-timeline

This will add issues being created into the timeline.

I think this is a nice step towards making the timeline be a bit more "custom" because when we get the ability to filter the timeline to be a bit more personalised, this could allow users to see issues being raised in repos they follow / start etc.

If you're happy with this, I can do pull requests next :)

Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:dadhhalkfcq3gucaq25hjqon/sh.tangled.repo.pull/3mktwkmzsbm22
+79 -1
Diff #0
+29
appview/db/timeline.go
··· 42 42 return nil, err 43 43 } 44 44 45 + issues, err := getTimelineIssues(e, limit, loggedInUserDid, userIsFollowing) 46 + if err != nil { 47 + return nil, err 48 + } 49 + 45 50 events = append(events, repos...) 46 51 events = append(events, stars...) 47 52 events = append(events, follows...) 53 + events = append(events, issues...) 48 54 49 55 sort.Slice(events, func(i, j int) bool { 50 56 return events[i].EventAt.After(events[j].EventAt) ··· 240 246 241 247 return events, nil 242 248 } 249 + 250 + func getTimelineIssues(e Execer, limit int, loggedInUserDid string, userIsFollowing []string) ([]models.TimelineEvent, error) { 251 + filters := make([]orm.Filter, 0) 252 + if userIsFollowing != nil { 253 + filters = append(filters, orm.FilterIn("owner_did", userIsFollowing)) 254 + } 255 + filters = append(filters, orm.FilterEq("open", 1)) 256 + 257 + issues, err := GetIssuesPaginated(e, pagination.Page{Limit: limit}, filters...) 258 + if err != nil { 259 + return nil, err 260 + } 261 + 262 + var events []models.TimelineEvent 263 + for _, issue := range issues { 264 + events = append(events, models.TimelineEvent{ 265 + Issue: &issue, 266 + EventAt: issue.Created, 267 + }) 268 + } 269 + 270 + return events, nil 271 + }
+1
appview/models/timeline.go
··· 6 6 *Repo 7 7 *Follow 8 8 *RepoStar 9 + *Issue 9 10 10 11 EventAt time.Time 11 12
+49 -1
appview/pages/templates/timeline/fragments/timeline.html
··· 19 19 {{ template "timeline/fragments/starEvent" (list $ .) }} 20 20 {{ else if .Follow }} 21 21 {{ template "timeline/fragments/followEvent" (list $ .) }} 22 + {{ else if .Issue }} 23 + {{ template "timeline/fragments/issueEvent" (list $ .) }} 22 24 {{ end }} 23 25 </div> 24 26 {{ end }} ··· 78 80 {{ end }} 79 81 {{ end }} 80 82 83 + {{ define "timeline/fragments/issueEvent" }} 84 + {{ $root := index . 0 }} 85 + {{ $event := index . 1 }} 86 + {{ $issue := $event.Issue }} 87 + {{ with $issue }} 88 + {{ $repo := .Repo}} 89 + {{ $userHandle := resolve .Did }} 90 + {{ $repoOwnerHandle := resolve $repo.Did }} 91 + <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"> 92 + {{ template "user/fragments/picHandleLink" .Did }} 93 + created an issue in 94 + <a href="/{{ $repoOwnerHandle }}/{{ $repo.Name }}" class="no-underline hover:underline"> 95 + {{ $repoOwnerHandle | truncateAt30 }}/{{ $repo.Name }} 96 + </a> 97 + <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" .Created }}</span> 98 + </div> 99 + <div class="rounded drop-shadow-sm bg-white px-6 py-4 dark:bg-gray-800 dark:border-gray-700"> 100 + <div class="pb-2"> 101 + <a href="/{{ $repoOwnerHandle }}/{{ $repo.Name }}" class="no-underline hover:underline"> 102 + {{ .Title }} 103 + <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span> 104 + </a> 105 + </div> 106 + <div class="text-sm text-gray-500 dark:text-gray-400 flex flex-wrap items-center gap-1"> 107 + {{ $bgColor := "bg-gray-800 dark:bg-gray-700" }} 108 + {{ $icon := "ban" }} 109 + {{ $state := "closed" }} 110 + {{ if .Open }} 111 + {{ $bgColor = "bg-green-600 dark:bg-green-700" }} 112 + {{ $icon = "circle-dot" }} 113 + {{ $state = "open" }} 114 + {{ end }} 115 + 116 + <span class="inline-flex items-center rounded px-2 py-[5px] {{ $bgColor }}"> 117 + {{ i $icon "w-3 h-3 mr-1.5 text-white dark:text-white" }} 118 + <span class="text-white dark:text-white text-sm">{{ $state }}</span> 119 + </span> 120 + 121 + <span class="before:content-['ยท']"> 122 + {{ template "repo/fragments/time" .Created }} 123 + </span> 124 + </div> 125 + </div> 126 + {{ end }} 127 + {{ end }} 128 + 81 129 {{ define "timeline/fragments/followEvent" }} 82 130 {{ $root := index . 0 }} 83 131 {{ $event := index . 1 }} ··· 94 142 {{ template "user/fragments/picHandleLink" $subjectHandle }} 95 143 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $follow.FollowedAt }}</span> 96 144 </div> 97 - {{ template "user/fragments/followCard" 145 + {{ template "user/fragments/followCard" 98 146 (dict 99 147 "LoggedInUser" $root.LoggedInUser 100 148 "UserDid" $follow.SubjectDid

History

1 round 0 comments
sign up or login to add to the discussion
willdot.net submitted #0
1 commit
expand
appview: adds issues into timeline
merge conflicts detected
expand
  • appview/pages/templates/timeline/fragments/timeline.html:19
expand 0 comments