Skip to content

Commit

Permalink
Extract ExternalLinks into its own component
Browse files Browse the repository at this point in the history
  • Loading branch information
deluan committed Jul 26, 2021
1 parent 72f9e3e commit 615cac2
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 59 deletions.
62 changes: 3 additions & 59 deletions ui/src/album/AlbumDetails.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import {
CardContent,
CardMedia,
Collapse,
IconButton,
Tooltip,
makeStyles,
Typography,
useMediaQuery,
Expand All @@ -31,9 +29,7 @@ import {
} from '../common'
import config from '../config'
import { intersperse } from '../utils'
import Link from '@material-ui/core/Link'
import MusicBrainz from '../icons/MusicBrainz'
import { ImLastfm2 } from 'react-icons/im'
import AlbumExternalLinks from './AlbumExternalLinks'

const useStyles = makeStyles(
(theme) => ({
Expand Down Expand Up @@ -100,7 +96,7 @@ const useStyles = makeStyles(
genreList: {
marginTop: theme.spacing(0.5),
},
links: {
externalLinks: {
marginTop: theme.spacing(1.5),
},
}),
Expand Down Expand Up @@ -182,58 +178,6 @@ const Details = (props) => {
return <>{intersperse(details, ' 路 ')}</>
}

const Links = (props) => {
const classes = useStyles()
const translate = useTranslate()
const record = useRecordContext(props)
let links = []
const addLink = (obj) => {
const id = links.length
links.push(<span key={`link-${record.id}-${id}`}>{obj}</span>)
}

addLink(
<Link
href={`https://last.fm/music/${
encodeURIComponent(record.albumArtist) +
'/' +
encodeURIComponent(record.name)
}`}
target="_blank"
rel="noopener noreferrer"
>
<Tooltip title={translate('message.openIn.lastfm')}>
<IconButton
size={'small'}
aria-label={translate('message.openIn.lastfm')}
>
<ImLastfm2 />
</IconButton>
</Tooltip>
</Link>
)

record.mbzAlbumId &&
addLink(
<Link
href={`https://musicbrainz.org/release/${record.mbzAlbumId}`}
target="_blank"
rel="noopener noreferrer"
>
<Tooltip title={translate('message.openIn.musicbrainz')}>
<IconButton
size={'small'}
aria-label={translate('message.openIn.musicbrainz')}
>
<MusicBrainz />
</IconButton>
</Tooltip>
</Link>
)

return <div className={classes.links}>{intersperse(links, ' ')}</div>
}

const AlbumDetails = (props) => {
const record = useRecordContext(props)
const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('lg'))
Expand Down Expand Up @@ -302,7 +246,7 @@ const AlbumDetails = (props) => {
)}
{isDesktop && (
<Typography component={'p'} className={classes.recordMeta}>
<Links />
<AlbumExternalLinks className={classes.externalLinks} />
</Typography>
)}
{isDesktop && record['comment'] && <AlbumComment record={record} />}
Expand Down
49 changes: 49 additions & 0 deletions ui/src/album/AlbumExternalLinks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import React from 'react'
import { useRecordContext, useTranslate } from 'react-admin'
import { IconButton, Tooltip, Link } from '@material-ui/core'
import { ImLastfm2 } from 'react-icons/im'
import MusicBrainz from '../icons/MusicBrainz'
import { intersperse } from '../utils'

const AlbumExternalLinks = (props) => {
const { className } = props
const translate = useTranslate()
const record = useRecordContext(props)
let links = []

const addLink = (url, title, icon) => {
const translatedTitle = translate(title)
const link = (
<Link href={url} target="_blank" rel="noopener noreferrer">
<Tooltip title={translatedTitle}>
<IconButton size={'small'} aria-label={translatedTitle}>
{icon}
</IconButton>
</Tooltip>
</Link>
)
const id = links.length
links.push(<span key={`link-${record.id}-${id}`}>{link}</span>)
}

addLink(
`https://last.fm/music/${
encodeURIComponent(record.albumArtist) +
'/' +
encodeURIComponent(record.name)
}`,
'message.openIn.lastfm',
<ImLastfm2 />
)

record.mbzAlbumId &&
addLink(
`https://musicbrainz.org/release/${record.mbzAlbumId}`,
'message.openIn.musicbrainz',
<MusicBrainz />
)

return <div className={className}>{intersperse(links, ' ')}</div>
}

export default AlbumExternalLinks

0 comments on commit 615cac2

Please sign in to comment.