diff --git a/ui/src/dialogs/AboutDialog.js b/ui/src/dialogs/AboutDialog.js
index 75f15f8a4..b9ef178a0 100644
--- a/ui/src/dialogs/AboutDialog.js
+++ b/ui/src/dialogs/AboutDialog.js
@@ -25,6 +25,29 @@ const links = {
featureRequests: 'github.com/navidrome/navidrome/issues',
}
+const LinkToVersion = ({ version }) => {
+ if (version === 'dev') {
+ return {version}
+ }
+
+ const parts = version.split(' ')
+ const commitID = parts[1].replace(/[()]/g, '')
+ const isSnapshot = version.includes('SNAPSHOT')
+ const url = isSnapshot
+ ? `https://github.com/navidrome/navidrome/compare/v${
+ parts[0].split('-')[0]
+ }...${commitID}`
+ : `https://github.com/navidrome/navidrome/releases/tag/v${parts[0]}`
+ return (
+
+
+ {parts[0]}
+
+ {' (' + commitID + ')'}
+
+ )
+}
+
const AboutDialog = ({ open, onClose }) => {
const translate = useTranslate()
return (
@@ -45,22 +68,7 @@ const AboutDialog = ({ open, onClose }) => {
{translate('menu.version')}:
- {config.version === 'dev' ? (
- {config.version}
- ) : (
-
-
- {config.version.split(' ')[0]}
-
- {' ' + config.version.split(' ')[1]}
-
- )}
+
{Object.keys(links).map((key) => {
return (
@@ -118,4 +126,4 @@ AboutDialog.propTypes = {
onClose: PropTypes.func.isRequired,
}
-export { AboutDialog }
+export { AboutDialog, LinkToVersion }
diff --git a/ui/src/dialogs/AboutDialog.test.js b/ui/src/dialogs/AboutDialog.test.js
new file mode 100644
index 000000000..e3f8d3a8f
--- /dev/null
+++ b/ui/src/dialogs/AboutDialog.test.js
@@ -0,0 +1,54 @@
+import * as React from 'react'
+import { cleanup, render } from '@testing-library/react'
+import { LinkToVersion } from './AboutDialog'
+import TableBody from '@material-ui/core/TableBody'
+import TableRow from '@material-ui/core/TableRow'
+import Table from '@material-ui/core/Table'
+
+const Wrapper = ({ version }) => (
+
+)
+
+describe('', () => {
+ afterEach(cleanup)
+
+ it('should not render any link for "dev" version', () => {
+ const version = 'dev'
+ const { queryByRole } = render()
+ expect(queryByRole('link')).toBeNull()
+ })
+
+ it('should render link to GH tag page for full releases', () => {
+ const version = '0.40.0 (300a0292)'
+ const { queryByRole } = render()
+
+ const link = queryByRole('link')
+ expect(link.href).toBe(
+ 'https://github.com/navidrome/navidrome/releases/tag/v0.40.0'
+ )
+ expect(link.textContent).toBe('0.40.0')
+
+ const cell = queryByRole('cell')
+ expect(cell.textContent).toBe('0.40.0 (300a0292)')
+ })
+
+ it('should render link to GH comparison page for snapshot releases', () => {
+ const version = '0.40.0-SNAPSHOT (300a0292)'
+ const { queryByRole } = render()
+
+ const link = queryByRole('link')
+ expect(link.href).toBe(
+ 'https://github.com/navidrome/navidrome/compare/v0.40.0...300a0292'
+ )
+ expect(link.textContent).toBe('0.40.0-SNAPSHOT')
+
+ const cell = queryByRole('cell')
+ expect(cell.textContent).toBe('0.40.0-SNAPSHOT (300a0292)')
+ })
+})