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