@ -1,5 +1,5 @@
import PropTypes from 'prop-types' ;
import React from 'react' ;
import React , { PureComponent } from 'react' ;
import classNames from 'classnames' ;
import formatBytes from 'Utilities/Number/formatBytes' ;
import { ColorImpairedConsumer } from 'App/ColorImpairedContext' ;
@ -7,141 +7,148 @@ import DescriptionList from 'Components/DescriptionList/DescriptionList';
import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem' ;
import styles from './ArtistIndexFooter.css' ;
function ArtistIndexFooter ( { artist } ) {
const count = artist . length ;
let tracks = 0 ;
let trackFiles = 0 ;
let ended = 0 ;
let continuing = 0 ;
let monitored = 0 ;
let totalFileSize = 0 ;
artist . forEach ( ( s ) => {
const { statistics = { } } = s ;
const {
trackCount = 0 ,
trackFileCount = 0 ,
sizeOnDisk = 0
} = statistics ;
tracks += trackCount ;
trackFiles += trackFileCount ;
if ( s . status === 'ended' ) {
ended ++ ;
} else {
continuing ++ ;
}
if ( s . monitored ) {
monitored ++ ;
}
totalFileSize += sizeOnDisk ;
} ) ;
return (
< ColorImpairedConsumer >
{ ( enableColorImpairedMode ) => {
return (
< div className = { styles . footer } >
< div >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . continuing ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Continuing ( All tracks downloaded ) < / d i v >
class ArtistIndexFooter extends PureComponent {
//
// Render
render ( ) {
const { artist } = this . props ;
const count = artist . length ;
let tracks = 0 ;
let trackFiles = 0 ;
let ended = 0 ;
let continuing = 0 ;
let monitored = 0 ;
let totalFileSize = 0 ;
artist . forEach ( ( s ) => {
const { statistics = { } } = s ;
const {
trackCount = 0 ,
trackFileCount = 0 ,
sizeOnDisk = 0
} = statistics ;
tracks += trackCount ;
trackFiles += trackFileCount ;
if ( s . status === 'ended' ) {
ended ++ ;
} else {
continuing ++ ;
}
if ( s . monitored ) {
monitored ++ ;
}
totalFileSize += sizeOnDisk ;
} ) ;
return (
< ColorImpairedConsumer >
{ ( enableColorImpairedMode ) => {
return (
< div className = { styles . footer } >
< div >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . continuing ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Continuing ( All tracks downloaded ) < / d i v >
< / d i v >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . ended ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Ended ( All tracks downloaded ) < / d i v >
< / d i v >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . missingMonitored ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Missing Tracks ( Artist monitored ) < / d i v >
< / d i v >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . missingUnmonitored ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Missing Tracks ( Artist not monitored ) < / d i v >
< / d i v >
< / d i v >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . ended ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Ended ( All tracks downloaded ) < / d i v >
< div className = { styles . statistics } >
< DescriptionList >
< DescriptionListItem
title = "Artist"
data = { count }
/ >
< DescriptionListItem
title = "Ended"
data = { ended }
/ >
< DescriptionListItem
title = "Continuing"
data = { continuing }
/ >
< / D e s c r i p t i o n L i s t >
< DescriptionList >
< DescriptionListItem
title = "Monitored"
data = { monitored }
/ >
< DescriptionListItem
title = "Unmonitored"
data = { count - monitored }
/ >
< / D e s c r i p t i o n L i s t >
< DescriptionList >
< DescriptionListItem
title = "Tracks"
data = { tracks }
/ >
< DescriptionListItem
title = "Files"
data = { trackFiles }
/ >
< / D e s c r i p t i o n L i s t >
< DescriptionList >
< DescriptionListItem
title = "Total File Size"
data = { formatBytes ( totalFileSize ) }
/ >
< / D e s c r i p t i o n L i s t >
< / d i v >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . missingMonitored ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Missing Tracks ( Artist monitored ) < / d i v >
< / d i v >
< div className = { styles . legendItem } >
< div
className = { classNames (
styles . missingUnmonitored ,
enableColorImpairedMode && 'colorImpaired'
) }
/ >
< div > Missing Tracks ( Artist not monitored ) < / d i v >
< / d i v >
< / d i v >
< div className = { styles . statistics } >
< DescriptionList >
< DescriptionListItem
title = "Artist"
data = { count }
/ >
< DescriptionListItem
title = "Ended"
data = { ended }
/ >
< DescriptionListItem
title = "Continuing"
data = { continuing }
/ >
< / D e s c r i p t i o n L i s t >
< DescriptionList >
< DescriptionListItem
title = "Monitored"
data = { monitored }
/ >
< DescriptionListItem
title = "Unmonitored"
data = { count - monitored }
/ >
< / D e s c r i p t i o n L i s t >
< DescriptionList >
< DescriptionListItem
title = "Tracks"
data = { tracks }
/ >
< DescriptionListItem
title = "Files"
data = { trackFiles }
/ >
< / D e s c r i p t i o n L i s t >
< DescriptionList >
< DescriptionListItem
title = "Total File Size"
data = { formatBytes ( totalFileSize ) }
/ >
< / D e s c r i p t i o n L i s t >
< / d i v >
< / d i v >
);
} }
< / C o l o r I m p a i r e d C o n s u m e r >
);
) ;
} }
< / C o l o r I m p a i r e d C o n s u m e r >
) ;
}
}
ArtistIndexFooter . propTypes = {