diff options
| author | Christian Cleberg <[email protected]> | 2026-04-01 23:37:12 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-01 23:37:12 -0500 |
| commit | 0bef9acc515cfcb4ac6e2530cd34cbdbc47c2c1d (patch) | |
| tree | 4457ca8d3fcc1f53383c9da46e19661a039834df /Hutch/Views/Repositories/RepositoryDetailViewModel.swift | |
| parent | a83893afa086f0050c825144fa818024db4df056 (diff) | |
| download | hutch-0bef9acc515cfcb4ac6e2530cd34cbdbc47c2c1d.tar.gz hutch-0bef9acc515cfcb4ac6e2530cd34cbdbc47c2c1d.tar.bz2 hutch-0bef9acc515cfcb4ac6e2530cd34cbdbc47c2c1d.zip | |
feat: show commit dates in Refs tabv2.8.1
Diffstat (limited to 'Hutch/Views/Repositories/RepositoryDetailViewModel.swift')
| -rw-r--r-- | Hutch/Views/Repositories/RepositoryDetailViewModel.swift | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/Hutch/Views/Repositories/RepositoryDetailViewModel.swift b/Hutch/Views/Repositories/RepositoryDetailViewModel.swift index e2eaf4d..72c4d1f 100644 --- a/Hutch/Views/Repositories/RepositoryDetailViewModel.swift +++ b/Hutch/Views/Repositories/RepositoryDetailViewModel.swift @@ -24,10 +24,33 @@ private struct RefsRepository: Decodable, Sendable { } private struct RefsPage: Decodable, Sendable { - let results: [Reference] + let results: [ReferencePayload] let cursor: String? } +/// Decodes a single reference including the optional follow object for date extraction. +private struct ReferencePayload: Decodable, Sendable { + let name: String + let target: String? + let follow: ReferenceFollow? + + func toDetail() -> ReferenceDetail { + // Branches and lightweight tags follow to a Commit (author.time). + // Annotated tags follow to a Tag object (tagger.time). + let date = follow?.author?.time ?? follow?.tagger?.time + return ReferenceDetail(name: name, target: target, date: date) + } +} + +private struct ReferenceFollow: Decodable, Sendable { + let author: ReferenceSignature? + let tagger: ReferenceSignature? +} + +private struct ReferenceSignature: Decodable, Sendable { + let time: Date +} + private struct ReadmeResponse: Decodable, Sendable { let repository: ReadmeRepository? } @@ -98,8 +121,8 @@ final class RepositoryDetailViewModel { // MARK: - References state - private(set) var branches: [Reference] = [] - private(set) var tags: [Reference] = [] + private(set) var branches: [ReferenceDetail] = [] + private(set) var tags: [ReferenceDetail] = [] private(set) var isLoadingRefs = false // MARK: - README state @@ -220,7 +243,14 @@ final class RepositoryDetailViewModel { query refs($rid: ID!) { repository(rid: $rid) { references { - results { name target } + results { + name + target + follow { + ... on Commit { author { time } } + ... on Tag { tagger { time } } + } + } cursor } } @@ -240,8 +270,8 @@ final class RepositoryDetailViewModel { responseType: RefsResponse.self ) let allRefs = result.repository?.references.results ?? [] - branches = allRefs.filter { $0.name.hasPrefix("refs/heads/") } - tags = allRefs.filter { $0.name.hasPrefix("refs/tags/") } + branches = allRefs.filter { $0.name.hasPrefix("refs/heads/") }.map { $0.toDetail() } + tags = allRefs.filter { $0.name.hasPrefix("refs/tags/") }.map { $0.toDetail() } } catch { self.error = error.userFacingMessage } |
