119 lines
3.2 KiB
React
Raw Normal View History

2017-12-25 18:19:28 +01:00
import React from 'react'
import { Helmet } from 'react-helmet'
2019-09-16 10:26:02 +02:00
import { withTranslation } from 'react-i18next'
2017-12-25 18:19:28 +01:00
import { connect } from 'react-redux'
2018-05-09 10:25:08 +02:00
import ActivityCard from './ActivityCard'
2019-01-03 12:53:47 +01:00
import Calendar from './Calendar'
2019-09-16 10:26:02 +02:00
import NoActivities from '../Common/NoActivities'
2018-05-20 13:12:35 +02:00
import Records from './Records'
2018-05-09 10:25:08 +02:00
import Statistics from './Statistics'
2018-06-05 19:37:10 +02:00
import UserStatistics from './UserStatistics'
2018-06-12 13:12:18 +02:00
import { getOrUpdateData } from '../../actions'
import { getMoreActivities } from '../../actions/activities'
2018-05-09 10:25:08 +02:00
2018-01-28 13:01:26 +01:00
class DashBoard extends React.Component {
constructor(props, context) {
super(props, context)
this.state = {
page: 1,
}
}
2018-05-09 10:25:08 +02:00
componentDidMount() {
this.props.loadActivities()
}
2017-12-25 18:19:28 +01:00
render() {
const {
2019-08-28 15:35:22 +02:00
activities,
loadMoreActivities,
message,
records,
sports,
2019-09-16 10:26:02 +02:00
t,
2019-08-28 15:35:22 +02:00
user,
} = this.props
2019-08-28 15:35:22 +02:00
const paginationEnd =
activities.length > 0
? activities[activities.length - 1].previous_activity === null
: true
const { page } = this.state
2017-12-25 18:19:28 +01:00
return (
<div>
<Helmet>
2019-09-16 10:26:02 +02:00
<title>FitTrackee - {t('common:Dashboard')}</title>
</Helmet>
{message ? (
<code>{message}</code>
) : (
2019-08-28 15:35:22 +02:00
activities &&
sports.length > 0 && (
2018-05-30 17:48:58 +02:00
<div className="container dashboard">
2019-09-16 10:26:02 +02:00
<UserStatistics user={user} t={t} />
<div className="row">
2018-05-20 13:12:35 +02:00
<div className="col-md-4">
2019-09-16 10:26:02 +02:00
<Statistics t={t} />
<Records
t={t}
records={records}
sports={sports}
user={user}
/>
2018-05-20 13:12:35 +02:00
</div>
<div className="col-md-8">
<Calendar weekm={user.weekm} />
{activities.length > 0 ? (
activities.map(activity => (
2019-08-28 15:35:22 +02:00
<ActivityCard
activity={activity}
key={activity.id}
sports={sports}
user={user}
/>
))
) : (
2019-09-16 10:26:02 +02:00
<NoActivities t={t} />
)}
2019-08-28 15:35:22 +02:00
{!paginationEnd && (
<input
type="submit"
className="btn btn-default btn-md btn-block"
value="Load more activities"
onClick={() => {
loadMoreActivities(page + 1)
this.setState({ page: page + 1 })
}}
/>
2019-08-28 15:35:22 +02:00
)}
</div>
2018-05-10 11:36:08 +02:00
</div>
2018-05-09 10:25:08 +02:00
</div>
)
)}
2017-12-25 18:19:28 +01:00
</div>
)
}
}
2019-09-16 10:26:02 +02:00
export default withTranslation()(
connect(
state => ({
activities: state.activities.data,
message: state.message,
records: state.records.data,
sports: state.sports.data,
user: state.user,
}),
dispatch => ({
loadActivities: () => {
dispatch(getOrUpdateData('getData', 'activities', { page: 1 }))
dispatch(getOrUpdateData('getData', 'records'))
},
loadMoreActivities: page => {
dispatch(getMoreActivities({ page }))
},
})
)(DashBoard)
)