66 * Copyright Oxide Computer Company
77 */
88
9- import { useMemo } from 'react'
9+ import { useMemo , type SVGProps } from 'react'
1010import * as R from 'remeda'
1111
1212import {
1313 Images24Icon ,
14- SizeOutline12Icon ,
1514 SoftwareUpdate16Icon ,
1615 SoftwareUpdate24Icon ,
17- TimeOutline12Icon ,
1816} from '@oxide/design-system/icons/react'
1917import { Badge } from '@oxide/design-system/ui'
2018
@@ -179,9 +177,9 @@ export default function UpdatePage() {
179177 return (
180178 < li
181179 key = { repo . hash }
182- className = "border-default @container flex items-center gap-3 rounded border pl-4"
180+ className = "border-default @container flex items-center gap-2 rounded border pl-4"
183181 >
184- < Images24Icon className = "text-tertiary shrink-0" aria-hidden />
182+ < Images24Icon className = "text-quaternary shrink-0" aria-hidden />
185183 < div className = "flex min-w-0 flex-1 flex-col flex-wrap items-start gap-x-4 gap-y-1 py-3 @md:flex-row @md:items-center" >
186184 < div className = "flex-1" >
187185 < div className = "flex items-center gap-1.5" >
@@ -191,14 +189,18 @@ export default function UpdatePage() {
191189 { isTarget && < Badge color = "default" > Target</ Badge > }
192190 </ div >
193191 </ div >
194- < div className = "flex flex-col items-start gap-0.5 @md:items-end" >
195- < div className = "flex items-center gap-1.5" >
196- < DateTime date = { repo . timeCreated } />
197- < TimeOutline12Icon className = "text-quaternary" aria-hidden />
198- </ div >
199- < div className = "flex items-center gap-1.5" >
200- < div > { repo . fileName } </ div >
201- < SizeOutline12Icon className = "text-quaternary" aria-hidden />
192+ < div className = "flex flex-col items-start gap-0.5 pr-2 @md:items-end" >
193+ < DateTime date = { repo . timeCreated } />
194+ < div className = "flex items-center gap-0.5" >
195+ < HashIcon className = "text-quaternary" aria-hidden />
196+ < a
197+ href = { `https://github.com/oxidecomputer/omicron/commits/${ repo . hash } ` }
198+ className = "link-with-underline text-default"
199+ target = "_blank"
200+ rel = "noopener noreferrer"
201+ >
202+ { repo . hash . substring ( 0 , 7 ) }
203+ </ a >
202204 </ div >
203205 </ div >
204206 </ div >
@@ -242,3 +244,19 @@ export default function UpdatePage() {
242244 </ >
243245 )
244246}
247+
248+ const HashIcon = ( props : SVGProps < SVGSVGElement > ) => (
249+ < svg
250+ width = "12"
251+ height = "12"
252+ viewBox = "0 0 12 12"
253+ fill = "none"
254+ xmlns = "http://www.w3.org/2000/svg"
255+ { ...props }
256+ >
257+ < path
258+ d = "M8.8338 0.967163L9.16681 1.03357C9.34546 1.06923 9.46113 1.24262 9.4256 1.42126L9.00958 3.50037H10.1707C10.3529 3.5005 10.5008 3.64827 10.5008 3.83044V4.17029C10.5008 4.35245 10.3528 4.50023 10.1707 4.50037H8.81036L8.20978 7.50037H9.17072C9.35285 7.5005 9.50079 7.64827 9.50079 7.83044V8.17029C9.50079 8.35245 9.35285 8.50023 9.17072 8.50037H8.01056L7.55548 10.7748C7.51965 10.9533 7.34537 11.0691 7.16681 11.0336L6.8338 10.9672C6.65508 10.9314 6.53926 10.7572 6.57501 10.5785L6.99103 8.50037H4.01056L3.55548 10.7748C3.51965 10.9533 3.34537 11.0691 3.16681 11.0336L2.8338 10.9672C2.65508 10.9314 2.53926 10.7572 2.57501 10.5785L2.99103 8.50037H1.83087C1.64862 8.50037 1.5008 8.35254 1.50079 8.17029V7.83044C1.50079 7.64819 1.64862 7.50037 1.83087 7.50037H3.19025L3.79083 4.50037H2.83087C2.64862 4.50037 2.5008 4.35254 2.50079 4.17029V3.83044C2.50079 3.64819 2.64862 3.50037 2.83087 3.50037H3.99005L4.44513 1.22595C4.48085 1.04733 4.65516 0.931576 4.8338 0.967163L5.16681 1.03357C5.34546 1.06923 5.46113 1.24262 5.4256 1.42126L5.00958 3.50037H7.99005L8.44513 1.22595C8.48085 1.04733 8.65516 0.931576 8.8338 0.967163ZM4.81036 4.50037L4.20978 7.50037H7.19025L7.79083 4.50037H4.81036Z"
259+ fill = "currentColor"
260+ />
261+ </ svg >
262+ )
0 commit comments