2019-04-11 08:05:53 +12:00
|
|
|
import React, { memo } from 'react';
|
2018-10-24 21:15:57 +13:00
|
|
|
import Link from './Link';
|
2020-03-03 16:39:37 +13:00
|
|
|
import { uriType as uriTypeHelper } from '../util/helpers';
|
2021-01-23 16:24:07 +13:00
|
|
|
import { encodeUri } from '../util/format';
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2021-04-12 21:13:45 +12:00
|
|
|
export default memo(({
|
|
|
|
|
type,
|
|
|
|
|
uri: rawUri,
|
|
|
|
|
className,
|
|
|
|
|
handleContextMenu,
|
|
|
|
|
children,
|
|
|
|
|
unencoded,
|
|
|
|
|
}) => {
|
2019-09-05 15:36:11 +12:00
|
|
|
let to = null;
|
2021-04-12 21:13:45 +12:00
|
|
|
const uriType = type || uriTypeHelper(rawUri);
|
|
|
|
|
const uri = (!unencoded) ? encodeUri(rawUri) : rawUri;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-10-05 09:10:34 +13:00
|
|
|
switch (uriType) {
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'playlist':
|
|
|
|
|
to = `/playlist/${uri}`;
|
|
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'artist':
|
|
|
|
|
to = `/artist/${uri}`;
|
|
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'album':
|
|
|
|
|
to = `/album/${uri}`;
|
|
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'track':
|
|
|
|
|
to = `/track/${uri}`;
|
|
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'user':
|
|
|
|
|
to = `/user/${uri}`;
|
|
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'browse':
|
|
|
|
|
to = `/library/browse/${uri}`;
|
|
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'recommendations':
|
|
|
|
|
to = `/discover/recommendations/${uri}`;
|
|
|
|
|
break;
|
2018-02-15 09:47:49 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
case 'search':
|
2021-04-12 21:13:45 +12:00
|
|
|
var exploded = uri.split(':');
|
2019-10-13 09:29:41 +13:00
|
|
|
to = `/search/${exploded[2]}/${exploded[3]}`;
|
2019-09-05 15:36:11 +12:00
|
|
|
break;
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
default:
|
2021-01-14 19:35:30 +13:00
|
|
|
to = `/uri/${uri}`;
|
2019-09-05 15:36:11 +12:00
|
|
|
}
|
2017-10-27 10:51:48 +13:00
|
|
|
|
2019-09-05 15:36:11 +12:00
|
|
|
if (uri) {
|
|
|
|
|
return (
|
|
|
|
|
<Link
|
2021-04-12 21:13:45 +12:00
|
|
|
className={className}
|
2019-09-05 15:36:11 +12:00
|
|
|
to={to}
|
2021-04-12 21:13:45 +12:00
|
|
|
onContextMenu={handleContextMenu}
|
2019-09-05 15:36:11 +12:00
|
|
|
>
|
2021-04-12 21:13:45 +12:00
|
|
|
{children}
|
2019-09-05 15:36:11 +12:00
|
|
|
</Link>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
return (
|
2021-04-12 21:13:45 +12:00
|
|
|
<span className={className}>
|
|
|
|
|
{children}
|
2019-09-05 15:36:11 +12:00
|
|
|
</span>
|
2019-10-05 09:10:34 +13:00
|
|
|
);
|
|
|
|
|
});
|