Skip to content

Commit 31ac3aa

Browse files
committed
Factor out ArtistCreditUsageLink
1 parent ea702c8 commit 31ac3aa

File tree

5 files changed

+74
-17
lines changed

5 files changed

+74
-17
lines changed

root/artist_credit/ArtistCreditIndex.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import * as React from 'react';
1111

1212
import ENTITIES from '../../entities';
13+
import ArtistCreditUsageLink
14+
from '../static/scripts/common/components/ArtistCreditUsageLink';
1315
import DescriptiveLink
1416
from '../static/scripts/common/components/DescriptiveLink';
1517
import EntityLink
@@ -43,8 +45,6 @@ function buildSection(
4345
}
4446

4547
const entityUrlFragment = ENTITIES[entityType].url;
46-
const url = '/artist-credit/' + props.artistCredit.id +
47-
'/' + entityUrlFragment;
4848

4949
return (
5050
<React.Fragment key={entityType}>
@@ -62,12 +62,14 @@ function buildSection(
6262
{entities.count > entities.entities.length ? (
6363
<li key="see-all">
6464
<em>
65-
<a href={url}>
66-
{expand2text(
65+
<ArtistCreditUsageLink
66+
artistCredit={props.artistCredit}
67+
content={expand2text(
6768
seeAllMessage(entities.count),
6869
{num: formatCount(props.$c, entities.count)},
6970
)}
70-
</a>
71+
subPath={entityUrlFragment}
72+
/>
7173
</em>
7274
</li>
7375
) : null}

root/artist_credit/ArtistCreditLayout.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import * as React from 'react';
1111

1212
import Tabs from '../components/Tabs';
1313
import Layout from '../layout';
14+
import ArtistCreditUsageLink
15+
from '../static/scripts/common/components/ArtistCreditUsageLink';
1416
import {reduceArtistCredit}
1517
from '../static/scripts/common/immutable-entities';
1618

@@ -54,19 +56,22 @@ const ArtistCreditLayout = ({
5456
>
5557
<div id="content">
5658
<h1>
57-
<a href={'/artist-credit/' + artistCredit.id}>
58-
{texp.l(
59+
<ArtistCreditUsageLink
60+
artistCredit={artistCredit}
61+
content={texp.l(
5962
'Artist credit “{artist_credit}”',
6063
{artist_credit: reduceArtistCredit(artistCredit)},
6164
)}
62-
</a>
65+
/>
6366
</h1>
6467
<Tabs>
6568
{tabLinks.map(link => (
6669
<li className={page === link[0] ? 'sel' : ''} key={link[0]}>
67-
<a href={'/artist-credit/' + artistCredit.id + link[0]}>
68-
{link[1]()}
69-
</a>
70+
<ArtistCreditUsageLink
71+
artistCredit={artistCredit}
72+
content={link[1]()}
73+
subPath={link[0].replace(/^\//, '')}
74+
/>
7075
</li>
7176
))}
7277
</Tabs>

root/components/Aliases/ArtistCreditList.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import * as React from 'react';
1111

1212
import ArtistCreditLink
1313
from '../../static/scripts/common/components/ArtistCreditLink';
14+
import ArtistCreditUsageLink
15+
from '../../static/scripts/common/components/ArtistCreditUsageLink';
1416
import EntityLink from '../../static/scripts/common/components/EntityLink';
1517
import bracketed from '../../static/scripts/common/utility/bracketed';
1618
import loopParity from '../../utility/loopParity';
@@ -62,9 +64,10 @@ const ArtistCreditList = ({
6264
{' '}
6365
<span className="small">
6466
{bracketed(
65-
<a href={`/artist-credit/${credit.id}`}>
66-
{l('see uses')}
67-
</a>,
67+
<ArtistCreditUsageLink
68+
artistCredit={credit}
69+
content={l('see uses')}
70+
/>,
6871
)}
6972
</span>
7073
</td>

root/edit/details/EditArtistCredit.js

+8-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import * as React from 'react';
1111

12+
import ArtistCreditUsageLink
13+
from '../../static/scripts/common/components/ArtistCreditUsageLink';
1214
import ExpandedArtistCredit from
1315
'../../static/scripts/common/components/ExpandedArtistCredit';
1416

@@ -42,9 +44,12 @@ const EditArtistCredit = ({edit}: Props): React.Element<'table'> => {
4244
<tr>
4345
<th />
4446
<td colSpan="2">
45-
<a href={`/artist-credit/${display.artist_credit.old.id}`}>
46-
{l('See all uses of the artist credit being changed.')}
47-
</a>
47+
<ArtistCreditUsageLink
48+
artistCredit={display.artist_credit.old}
49+
content={l(
50+
'See all uses of the artist credit being changed.',
51+
)}
52+
/>
4853
</td>
4954
</tr>
5055
) : null}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* @flow strict-local
3+
* Copyright (C) 2021 MetaBrainz Foundation
4+
*
5+
* This file is part of MusicBrainz, the open internet music database,
6+
* and is licensed under the GPL version 2, or (at your option) any
7+
* later version: http://www.gnu.org/licenses/gpl-2.0.txt
8+
*/
9+
10+
import * as React from 'react';
11+
12+
import {reduceArtistCredit} from '../immutable-entities';
13+
14+
type Props = {
15+
+artistCredit: ArtistCreditT,
16+
+content?: string,
17+
+subPath?: string,
18+
+target?: '_blank',
19+
};
20+
21+
const ArtistCreditUsageLink = ({
22+
artistCredit,
23+
content,
24+
subPath,
25+
...props
26+
}: Props): React.Element<'a'> | null => {
27+
const id = artistCredit.id;
28+
if (id == null) {
29+
return null;
30+
}
31+
let href = `/artist-credit/${id}`;
32+
if (nonEmpty(subPath)) {
33+
href += '/' + subPath;
34+
}
35+
return (
36+
<a href={href} {...props}>
37+
{nonEmpty(content) ? content : reduceArtistCredit(artistCredit)}
38+
</a>
39+
);
40+
};
41+
42+
export default ArtistCreditUsageLink;

0 commit comments

Comments
 (0)