Monorepo for Tangled tangled.org

add forks to profile timeline

fix bug where forked repo was created twice

Changed files
+55 -16
appview
+17
appview/db/profile.go
··· 2 2 3 3 import ( 4 4 "fmt" 5 + "log" 5 6 "sort" 6 7 "time" 7 8 ) ··· 12 13 *Issue 13 14 *Pull 14 15 *Repo 16 + 17 + // optional: populate only if Repo is a fork 18 + Source *Repo 15 19 } 16 20 17 21 func MakeProfileTimeline(e Execer, forDid string) ([]ProfileTimelineEvent, error) { ··· 61 65 return timeline, fmt.Errorf("error getting all repos by did: %w", err) 62 66 } 63 67 68 + log.Println(repos) 69 + 64 70 for _, repo := range repos { 71 + var sourceRepo *Repo 72 + log.Println("name", repo.Name) 73 + if repo.Source != "" { 74 + log.Println("source", repo.Source) 75 + sourceRepo, err = GetRepoByAtUri(e, repo.Source) 76 + if err != nil { 77 + return nil, err 78 + } 79 + } 80 + 65 81 timeline = append(timeline, ProfileTimelineEvent{ 66 82 EventAt: repo.Created, 67 83 Type: "repo", 68 84 Repo: &repo, 85 + Source: sourceRepo, 69 86 }) 70 87 } 71 88
+4 -2
appview/db/repos.go
··· 97 97 98 98 if nullableDescription.Valid { 99 99 repo.Description = nullableDescription.String 100 - } else { 101 - repo.Description = "" 100 + } 101 + 102 + if nullableSource.Valid { 103 + repo.Source = nullableSource.String 102 104 } 103 105 104 106 createdAtTime, err := time.Parse(time.RFC3339, createdAt)
+3 -7
appview/db/timeline.go
··· 38 38 } 39 39 40 40 for _, repo := range repos { 41 + var sourceRepo *Repo 41 42 if repo.Source != "" { 42 - sourceRepo, err := GetRepoByAtUri(e, repo.Source) 43 + sourceRepo, err = GetRepoByAtUri(e, repo.Source) 43 44 if err != nil { 44 45 return nil, err 45 46 } 46 - 47 - events = append(events, TimelineEvent{ 48 - Repo: &repo, 49 - EventAt: repo.Created, 50 - Source: sourceRepo, 51 - }) 52 47 } 53 48 54 49 events = append(events, TimelineEvent{ 55 50 Repo: &repo, 56 51 EventAt: repo.Created, 52 + Source: sourceRepo, 57 53 }) 58 54 } 59 55
+8 -6
appview/pages/templates/timeline.html
··· 45 45 <p class="text-gray-600 dark:text-gray-300"> 46 46 <a href="/{{ $userHandle }}" class="no-underline hover:underline">{{ $userHandle | truncateAt30 }}</a> 47 47 {{ if .Source }} 48 - forked 49 - <a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline">{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}</a> 50 - to 51 - <a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 48 + forked 49 + <a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline"> 50 + {{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }} 51 + </a> 52 + to 53 + <a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 52 54 {{ else }} 53 - created 54 - <a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 55 + created 56 + <a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 55 57 {{ end }} 56 58 <time class="text-gray-700 dark:text-gray-400 text-xs">{{ .Repo.Created | timeFmt }}</time> 57 59 </p>
+18 -1
appview/pages/templates/user/profile.html
··· 67 67 </div> 68 68 {{ else if eq .Type "repo" }} 69 69 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit flex items-center gap-3"> 70 + {{ if .Source }} 71 + <div class="text-gray-800 dark:text-gray-400 p-1"> 72 + {{ i "git-fork" "w-5 h-5" }} 73 + </div> 74 + {{ else }} 70 75 <div class="text-gray-800 dark:text-gray-400 p-1"> 71 76 {{ i "book-plus" "w-5 h-5" }} 72 77 </div> 78 + {{ end }} 73 79 <div> 74 80 <p class="text-gray-600 dark:text-gray-300"> 75 - created <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 81 + 82 + {{ if .Source }} 83 + forked 84 + <a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline"> 85 + {{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }} 86 + </a> 87 + to 88 + <a href="/{{ didOrHandle $.UserHandle $.UserDid }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 89 + {{ else }} 90 + created 91 + <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 92 + {{ end }} 76 93 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time> 77 94 </p> 78 95 </div>
+5
appview/state/profile.go
··· 44 44 didsToResolve = append(didsToResolve, r.Did) 45 45 } 46 46 for _, evt := range timeline { 47 + if evt.Repo != nil { 48 + if evt.Repo.Source != "" { 49 + didsToResolve = append(didsToResolve, evt.Source.Did) 50 + } 51 + } 47 52 didsToResolve = append(didsToResolve, evt.Repo.Did) 48 53 } 49 54