diff --git a/apps/web/src/api/client.ts b/apps/web/src/api/client.ts index 841b3f1..55c4314 100644 --- a/apps/web/src/api/client.ts +++ b/apps/web/src/api/client.ts @@ -1150,6 +1150,11 @@ export const api = { versionId: string, path: string, ) => versionAssetUrl("file", projectId, artifactId, versionId, path), + versionArchiveUrl: ( + projectId: string, + artifactId: string, + versionId: string, + ) => `/api/v1/artifacts/${encodeURIComponent(artifactId)}/versions/${encodeURIComponent(versionId)}/archive?${projectQuery(projectId)}`, versionMediaUrl: ( projectId: string, artifactId: string, diff --git a/apps/web/src/review/review-app.tsx b/apps/web/src/review/review-app.tsx index 97063b4..18e2f10 100644 --- a/apps/web/src/review/review-app.tsx +++ b/apps/web/src/review/review-app.tsx @@ -15,6 +15,7 @@ import { BookOpen01Icon, Cancel01Icon, Comment01Icon, + Download04Icon, Edit02Icon, ExternalLinkIcon, File01Icon, @@ -134,6 +135,11 @@ interface VersionListItem { readonly version: Version; } +interface ReviewDownload { + readonly href: string; + readonly title: string; +} + interface ReviewLocation { readonly artifactId: string | null; readonly path: string | null; @@ -960,6 +966,11 @@ function ArtifactReview({ && session.principal.membershipRole === "administrator" ) || session.principal.capabilities.includes("artifact:manage:any"); const previewKind = reviewPreviewKind(selectedVersion, selectedPath); + const download = reviewDownload( + projectId, + selectedArtifactId, + selectedVersion, + ); const selectArtifact = useCallback((artifactId: string, versionId?: string): void => { setDetailError(null); setSelectedArtifactId(artifactId); @@ -1657,6 +1668,10 @@ function ArtifactReview({ selectedVersion={selectedVersion} triggerClassName="as-button as-focus-controls__button" /> + + {!inspectorOpen ? ( +