Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | 4x 11x 11x 11x 11x 11x 11x 4x 4x 4x 11x 11x 11x 11x 11x 11x 11x 4x 4x | import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { formatTrackArtist, formatTrackTitle } from './track-utils';
/**
* Creates the track title to display based on track object
*
* @param { string } name
* @param { string } title
* @param { string } artist
* @param { string } creator
* @param { boolean } isAlbum
*
* @return { react fragment } trackTitle
*/
const TrackTitle = ({
name: fileName,
title,
albumCreator,
albumName,
creator,
artist,
isAlbum
}) => {
Iif (isAlbum) {
return 'Full album';
}
const trackArtist = creator || artist;
const displayArtist = formatTrackArtist(trackArtist, albumCreator, albumName);
const titleArtistDelimiter = displayArtist ? ' - ' : null;
const artistName = displayArtist ? <i className="track-artist">{displayArtist}</i> : null;
return (
<Fragment>
{formatTrackTitle(title, fileName)}
{titleArtistDelimiter}
{artistName}
</Fragment>
);
};
TrackTitle.defaultProps = {
name: '',
title: '',
albumCreator: '',
albumName: '',
creator: '',
artist: '',
isAlbum: false
};
TrackTitle.propTypes = {
name: PropTypes.string,
title: PropTypes.string,
albumCreator: PropTypes.oneOfType([
PropTypes.string,
PropTypes.shape([])
]),
albumName: PropTypes.string,
creator: PropTypes.string,
artist: PropTypes.string,
isAlbum: PropTypes.bool
};
/**
* Draws track info as button
*
* @param bool selected
* @param function onSelected
* @param object track
*
* @return component
*/
const OneTrack = ({
selected,
onSelected,
thisTrack,
displayTrackNumbers,
albumCreator,
albumName
}) => {
const { trackNumber, length, formattedLength } = thisTrack;
const trackProps = { ...thisTrack, albumCreator, albumName };
const track = parseInt(trackNumber, 10);
const displayNumber = track > 0 ? track : '-';
const displayLength = formattedLength || length || '-- : --';
const trackButtonClass = [
selected ? 'selected' : '',
'track',
displayTrackNumbers ? '' : 'no-track-number'
].join(' ').trim();
return (
<button
type="button"
data-track-number={trackNumber || 0}
className={trackButtonClass}
onClick={onSelected}
data-event-click-tracking="TrackList|Item"
>
<span className="track-number">{displayNumber}</span>
<span className="track-title"><TrackTitle {...trackProps} /></span>
<span className="track-length">{displayLength}</span>
</button>
);
};
OneTrack.defaultProps = {
selected: false,
displayTrackNumbers: false,
albumCreator: '',
albumName: ''
};
OneTrack.propTypes = {
selected: PropTypes.bool,
onSelected: PropTypes.func.isRequired,
thisTrack: PropTypes.shape({}).isRequired,
displayTrackNumbers: PropTypes.bool,
albumCreator: PropTypes.oneOfType([
PropTypes.string,
PropTypes.array
]),
albumName: PropTypes.string,
trackIdx: PropTypes.number
};
export default OneTrack;
|