codingblocks/qit.cloud

View on GitHub
website/src/App.js

Summary

Maintainability
B
5 hrs
Test Coverage
import React, { Component } from 'react'
import { connect, actions } from 'mirrorx'
import PropTypes from 'prop-types'
 
import Card from './components/Main/Card'
import EpisodeList from './components/Main/Episode/EpisodeList'
import Queue from './components/Main/Queue'
 
import NowPlaying from './components/Player/NowPlaying'
import AudioPlayer from './components/Player/AudioPlayer'
 
import { sslAudioUrl, setPlaybackRate } from './helpers'
 
import API from './adapters/API'
 
export class App extends Component {
componentDidMount () {
const nowPlaying = window.localStorage.getItem('nowPlaying')
nowPlaying && actions.player.play(JSON.parse(nowPlaying))
 
window.localStorage.getItem('token') &&
actions.player.getRemoteEpisodes()
}
 
componentDidUpdate () {
this.props.location.pathname === '/' &&
actions.search.clearSearch()
}
 
Function `render` has 31 lines of code (exceeds 25 allowed). Consider refactoring.
render () {
const {
currentSearch,
nowPlaying,
queue,
playbackrate
} = this.props
 
return <div>
<Card>
<EpisodeList>
<Queue
nowPlaying={nowPlaying}
queue={queue}
blur={currentSearch !== ''}
/>
</EpisodeList>
</Card>
{
nowPlaying.audioUrl &&
<NowPlaying nowPlaying={nowPlaying}>
<AudioPlayer
src={sslAudioUrl(nowPlaying.audioUrl)}
playbackrate={playbackrate}
onEnded={() => {
API.unqueueEpisode(nowPlaying.id)
actions.player.playNextEpisode()
}}
onLoadStart={() => setPlaybackRate(playbackrate)}
/>
</NowPlaying>
}
</div>
}
}
 
App.defaultProps = {
results: [],
searchTerm: '',
currentSearch: '',
loading: false,
nowPlaying: {},
queue: []
}
 
App.propTypes = {
results: PropTypes.array.isRequired,
searchTerm: PropTypes.string.isRequired,
currentSearch: PropTypes.string.isRequired,
loading: PropTypes.bool.isRequired,
nowPlaying: PropTypes.object.isRequired,
queue: PropTypes.array.isRequired
}
 
Similar blocks of code found in 2 locations. Consider refactoring.
const ConnectedApp = connect(state => ({
searchTerm: state.search.searchTerm,
currentSearch: state.search.currentSearch,
loading: state.search.loading,
nowPlaying: state.player.nowPlaying,
queue: state.player.queue,
playbackrate: state.player.playbackrate,
currentUser: state.user.currentUser
}))(App)
 
export default ConnectedApp